Для тех, кто только начинает свой путь к машинному обучению, может показаться сложной задачей узнать обо всех моделях и различиях между ними. После того, как мы узнаем, как работает модель и как ее использовать, нам нужно будет перейти в реальный мир и применить полученные знания для решения реальных проблем. Что касается реальных проблем, нам не дается конкретная модель для настройки. Мы должны оценить несколько моделей, а затем решить, какую модель мы хотим использовать.
У нас проблема:
Когда мы начинаем думать о решении проблемы в машинном обучении, мы должны учитывать множество моментов:
- Определение проблемы
- Доступность набора данных
- Ожидаемые решения
- Деловые ограничения
Учитывая всю вышеперечисленную информацию, наша задача как разработчика ИИ состоит в том, чтобы спроектировать и обучить модель на заданном наборе данных, чтобы получить ожидаемые результаты. Создание моделей может быть тривиальным, если мы знаем, какую модель мы хотим построить. Есть масса ресурсов, которые могут нам помочь. Одна из лучших библиотек для Python для создания простых моделей машинного обучения - scikit-learn. Благодаря scikit-learn (scikit-learn.org) объем кода, который мы должны написать, значительно сокращается. Мы можем найти реализации почти всех популярных моделей в scikit-learn, поэтому наша работа упрощена и теперь сводится только к выбору лучшей модели для нашей задачи и настройке нескольких параметров. Это можно сделать с помощью всего нескольких строк кода.
Наша цель - измерить эффективность различных моделей классификации и попытаться выбрать лучшую для нашей задачи. Для этого мы посмотрим, насколько хорошо наши модели работают с одним и тем же набором данных.
Набор данных:
Мы выбрали набор данных Car Evaluation Data Set от Kaggle. Данные состоят из ряда функций, таких как
- относительная стоимость покупки
- стоимость технического обслуживания
- количество дверей
- загрузочное пространство и т. д.
Наша задача - предугадать, находится ли данная машина в приемлемом состоянии.
Есть 4 категории, в которые может попасть автомобиль: неприемлемый, приемлемый, хороший и очень хороший. Таким образом, наша проблема становится проблемой классификации с 4 классами. Теперь мы постараемся выбрать лучшую модель, которая может сказать нам, в хорошем состоянии автомобиль или нет.
Как выбрать правильную модель?
Есть много способов измерить эффективность нашей модели. Основная идея измерения производительности заключается в том, насколько точно наша модель может предсказать данные, которых она не видела. Есть и другие соображения, такие как задержка, использование памяти и т. Д., Но в этой статье мы будем иметь дело только с точностью прогнозирования модели.
Метрики, которые мы выбираем для оценки в этой статье:
- Точность
- Точность
- Отзывать
- Оценка F1
- ROC (AUC)
- Потеря журнала
Все эти показатели дадут нам другое представление о производительности. Хотя хорошая модель хорошо работает по большинству этих показателей, мы должны выбирать метрику на основе нашей постановки задачи.
Матрица неточностей : Чтобы понять большинство этих показателей, нам сначала нужно понять, что такое матрица неточностей. Предположим, у нас есть задача классификации на 2 класса. Мы называем один класс «Да», а другой - «Нет». Теперь у нас есть набор точек с фактической классификацией в качестве тестовых данных. У нас также есть набор прогнозируемых значений для тех же тестовых точек данных.
[источник: https://www.dataschool.io/simple-guide-to-confusion-matrix-terminology/]
Это изображение описывает матрицу путаницы для набора данных из 165 точек.
TN - истинно отрицательные (количество точек "Да" в фактическом наборе данных)
TP - истинные положительные результаты (количество точек "нет" в фактическом наборе данных)
FN - ложно отрицательные (количество точек, которые были неправильно предсказаны должно быть "Нет")
FP - Ложные срабатывания (количество баллов, которые были ошибочно предсказаны как Да)
Давайте посмотрим, что означают эти показатели:
Если n = количество общих точек в нашем тестовом наборе данных
1. Точность. Точность измеряет количество правильных прогнозов от общего числа прогнозов, т. е. долю правильных прогнозов модели. Это для одной точки данных. Когда у нас есть несколько точек данных, которые мы хотим протестировать, точность определяется средней точностью модели по всему набору тестовых данных. [источник: www.wikipedia.com/]
(Формула точности)
Точность также можно определить с помощью матрицы неточностей как
Acc = (TP + TN) / n
2.Точность: количество раз, когда мы получали правильный ответ "Да".
Точность = TP / прогнозируемое Да
3.Recall: количество раз, когда он правильно предсказывает "Да"
Напоминание = TP / фактическое "Да"
Оценка 4.F1: оценка F1 учитывает как точность, так и отзывчивость.
5.ROC (AUC): график зависимости FPR (ось X) до TPR (ось Y). Где:
FPR = ставка FP = FP / фактическая нет
TPR = ставка TP = TP / фактическая да
6.Log Loss: это также мера отклонения прогнозируемого значения от фактических значений. Для получения дополнительной информации перейдите по ссылке: https://wiki.fast.ai/index.php/Log_Loss
Тестирование наших моделей:
Теперь, когда мы определили наши метрики, давайте попробуем посмотреть, какие результаты мы получаем на разных моделях.
В нашем анализе мы будем использовать следующие модели:
- Логистическая регрессия
- Деревья решений
- Случайный лес
- K Ближайшие соседи
- Наивный байесовский (полиномиальный для нескольких классов)
Давайте попробуем их по очереди.
Логистическая регрессия:
Дерево решений:
Случайный лес:
K ближайших соседей:
Наивный Байес:
Сравнивая все наши показатели, мы получаем такие графики:
Наблюдения:
Из данных, которые мы собрали при запуске различных моделей в нашем наборе данных, мы видим, что показатели точности, точности, отзыва и F1 пропорциональны друг другу. Это означает, что в нашем случае мы можем использовать любой из них для оценки наших моделей.
Наивысшими показателями по этим показателям являются модели простого дерева решений со случайным лесом и логистической регрессией, которые соревнуются за второе место.
Матрицы путаницы дают нам более четкое представление о производительности. Мы должны смотреть на большие числа по диагоналям. Более высокие числа, кроме диагоналей, означают, что при классификации были ошибки. Здесь мы видим, что деревья решений допускают наименьшее количество ошибок в классификации.
Ситуация совсем иная, если мы посмотрим на сравнение потерь журнала. Здесь деревья решений работают намного хуже, чем все наши модели, тогда как логистическая регрессия дает нам лучшие результаты.
Эти расхождения противоречат нашей интуиции, поскольку мы ожидаем, что более точные модели будут иметь минимальные потери. Это требует дальнейшего изучения того, почему мы получаем такие большие убытки с деревьями решений.
Но в нашем случае классификатор дерева решений, кажется, работает лучше всего. Если бы мы хотели перестраховаться (что всегда является хорошей стратегией в реальной жизни), мы бы выбрали либо случайный лес, либо логистическую регрессию.
Внимание!
Глядя на эти результаты, мы должны помнить о нескольких вещах:
- Наш набор данных содержит только около 1700 точек, что недостаточно для удовлетворительного обучения наших моделей. В реальной жизни у нас будут гораздо большие наборы данных, и, следовательно, мы будем иметь разную степень производительности для нескольких моделей.
- Мы только немного доработали наши модели. Нам нужно будет оценить наши модели с более тщательной настройкой, чтобы решить, какая из них лучше всего подходит для наших данных. Мы можем использовать библиотеки выбора модели scikit-learn (https://scikit-learn.org/stable/modules/classes.html#module-sklearn.model_selection), чтобы найти лучшие параметры для настройки наших моделей.
Вывод:
Мы можем использовать разные показатели, чтобы сравнивать разные модели и выбирать лучшую, которая соответствует нашим потребностям. Эти показатели важны, но есть и другие соображения. Часто существуют требования к задержке, минимальные требования к точности, больший упор на уменьшение количества ложноотрицательных результатов и т. Д.
Мы надеемся, что помогли вам выбрать лучшую модель на основе измерения производительности.