В этой статье я собираюсь представить результаты использования 4 различных алгоритмов для задач классификации: логистическая регрессия, деревья решений, k ближайших соседей и нейронные сети. Для этого я буду использовать набор данных Качество красного вина. Кроме того, я использую sklearn для реализации каждого из алгоритмов. Реализацию можно найти по этой ссылке.

I. Введение набора данных и предварительная обработка

Он содержит 11 физико-химических свойств (признаков), а также переменную для прогнозирования (качество). Качество вина оценивается по шкале от 3 до 8. Задача, которую мы собираемся решить, состоит в том, чтобы предсказать, хорошее или плохое вино, используя известные характеристики. Чтобы немного упростить задачу, мы собираемся решить эту проблему как задачу бинарной классификации.

Классы не сбалансированы (например, нормальных вин намного больше, чем отличных или плохих), на изображении ниже показано распределение переменной для прогнозирования.

Мы будем работать с двумя разными сценариями: в первом случае вина плохого качества (класс 0) получают оценку от 3 до 6, а вина хорошего качества (класс 1) имеют качество 7 или 8.

Во втором сценарии плохие вина (класс 0) поднимаются с 3 до 5, а хорошие (класс 1) — с 6 до 8, эти 2 порога напрямую влияют на распределение данных.

Как мы видим, в сценарии 1 данные сильно несбалансированы, в отличие от сценария 2, данные не так уж плохи. Это повлияет на результаты, мы обсудим это позже.

Еще одним шагом на этапе предварительной обработки была стандартизация данных. Мы использовали надежный масштабатор, чтобы уменьшить влияние возможных выбросов.

II. Эксперименты и результаты

Мы используем GridSearchCV и K-кратную перекрестную проверку для выполнения 4 экспериментов, которые мы провели.

а. Логистическая регрессия. Для обоих сценариев GridSearchCV обнаружил, что liblinear — лучший решатель, достаточно 200 итераций, а L2 — лучший штраф.

Результаты для сценария 1. Мы получили точность 0,87. Точность для класса 0 составила 0,9, а для класса 1 — 0,5. Эта разница обусловлена ​​несбалансированными данными. На рисунке ниже показана кривая ROC и площадь AUC (было 0,64).

Результаты для сценария 2. В этом случае точность немного уменьшилась, теперь мы получили 0,75. Точность предсказания класса 0 также снижается, теперь она составляет 0,74. Однако точность предсказания класса 0 увеличивается до 0,76. Это улучшение связано с более сбалансированными данными. AUC увеличивается на 11 пунктов, достигая 0,75, что представляет собой большой выигрыш. Следующий график показывает кривую ROC.

Еще одна хорошая метрика — матрица путаницы, на следующем рисунке мы видим соответствующую сценарию 2.

б. Деревья решений. Для обоих сценариев GridSearchCV обнаружил, что лучший критерий — Джини, а лучший разделитель — случайный.

Результаты для сценария 1. Мы получили точность 0,88. Точность 0,93 для класса 0 и 0,53 для класса 1. AUC составляет 0,74. На изображении ниже мы видим график кривой ROC и матрицу путаницы.

Результаты для сценария 2. Точность составила 0,74. Точность для класса 0 составила 0,72, а для класса 1 — 0,76. Опять же, мы можем видеть, как мы получаем лучшую точность, когда данные сбалансированы. На изображении ниже видно, что AUC был таким же (0,74), однако ROC ведет себя немного иначе. Матрица путаницы помогает нам понять, почему ROC различны: модель сценария 1 лучше находит (в процентном отношении) положительные выборки (истинно положительные и истинно отрицательные), поскольку их сумма составляет 87,5%, тогда как в сценарии 2 то же самое. добавка равна 74,06%.

в. K ближайших соседей. Для обоих сценариев GridSearchCV обнаружил, что лучшими параметрами являются: 6 соседей, веса для расстояния и автоматический выбор лучшего алгоритма.

Результаты для сценария 1. Мы получили точность 0,89. Точность 0,94 для класса 0 и 0,61 для класса 1. AUC составляет 0,73.

Результаты для сценария 2. Точность составила 0,79. Точность для класса 0 составила 0,81, а для класса 1 — 0,77. Он представляет то же поведение, что и два предыдущих алгоритма, где второй сценарий получает лучшую точность для класса 1. AUC составляет 0,78, что лучше, чем значение, полученное в сценарии 1.

д. Нейронные сети. Благодаря GridSearchCV мы использовали 100 скрытых слоев, ReLU в качестве функции активации и Adam в качестве решателя.

Результаты для сценария 1. Мы получили точность 0,86. Точность 0,94 для класса 0 и 0,9 для класса 1. AUC составляет 0,64.

Результаты для сценария 2. Точность составила 0,74. Точность для класса 0 составила 0,73, а для класса 1 — 0,76. AUC составляет 0,75, что лучше значения, полученного в сценарии 1.

Выводы

Распределение целевой переменной напрямую влияет на общую производительность моделей. В результате экспериментов лучшая AUC была получена в 3 случаях (логистическая регрессия, kNN и нейронные сети), когда распределение зависимой переменной было немного более равномерным, как в сценарии 2, где класс 0 представлял 46,5% данные и класс 1 53,5%.

Получение одинакового значения AUC в двух разных моделях не означает, что модели ведут себя одинаково. В эксперименте с деревом решений мы получили одинаковую AUC (0,74) для обоих сценариев, однако в сценарии 1 (несбалансированные данные) значения истинного и ложноотрицательного были выше, а кривая ROC была другой.

Точность — не единственная метрика для измерения производительности модели, есть и другие, такие как точность и AUC (и многое другое). В этом эксперименте наилучшие результаты были получены при использовании алгоритма kNN.