Метод машинного обучения для классификации

Вероятно, вы используете машинное обучение десятки раз в день, даже не подозревая об этом. Простой веб-поиск в Google работает так хорошо, потому что стоящее за ним программное обеспечение машинного обучения научилось определять, какие страницы и как оценивать. Точно так же вы спасены от тонны спама в вашей электронной почте, потому что ваш компьютер научился различать спам и не спам.

Машинное обучение - отличная альтернатива анализу огромных объемов данных. В зависимости от выполняемых задач и характера выходных данных модели машинного обучения можно разделить на три типа:

  1. Регрессия: прогнозируемая выходная переменная является непрерывной переменной.
  2. Классификация: прогнозируемая выходная переменная является категориальной.
  3. Кластеризация: где нет заранее определенного понятия метки, присвоенной сформированным группам / кластерам.

Большое количество важных проблемных областей в сфере классификации - важная область контролируемого машинного обучения. И несмотря на термин «регрессия» в логистической регрессии - это, по сути, один из самых основных алгоритмов классификации. В отличие от линейной регрессии, которая выводит непрерывные числовые значения, логистическая регрессия использует логистическую сигмовидную функцию для преобразования своих выходных данных для возврата значения вероятности, которое затем может быть отображено на два или более дискретных класса.

Типы логистической регрессии:

  1. Двоичный (истина / ложь, да / нет)
  2. Мульти-класс (овцы, кошки, собаки)
  3. Порядковый (уровень удовлетворенности работой - неудовлетворен, удовлетворен, полностью удовлетворен)

Прежде чем мы начнем строить многомерную модель логистической регрессии, есть определенные концептуальные предпосылки, с которыми нам нужно ознакомиться.

Сигмовидная функция

Ранее мы говорили о преобразовании значений в вероятности. Этого можно достичь, вызвав сигмовидную функцию, которая отобразит любое реальное значение в другое значение от 0 до 1. Машинное обучение использует эту функцию для сопоставления прогнозов с вероятностями.

Математически,

Где, f (x) = выход от 0 до 1 (оценка вероятности)

Графически,

Код:

def sigmoid(z):
  return 1.0 / (1 + np.exp(-z))

Граница решения

Чтобы лучше понять, что вычисляет функция гипотезы логистической регрессии, нам нужно знать понятие, называемое «границей решения». Функция прогнозирования, которую мы используем, вернет оценку вероятности от 0 до 1. Чтобы сопоставить эту оценку с дискретным классом (положительный / отрицательный, истинный / ложный), мы выбираем пороговое значение, скажем 0,5, выше которого мы классифицируем значения на класс 1 и ниже которого значения попадут в класс 2.

Например, предположим, что функция прогнозирования возвращает значение 0,8, это будет классифицировано как истинное / положительное (поскольку оно выше выбранного значения порога). С другой стороны, значение 0,3 будет классифицировано как ложное / отрицательное. Имея дело с многомерной логистической регрессией, мы выбираем класс с наивысшей предсказанной вероятностью.

Коэффициенты и лог-коэффициенты

Логистическая регрессия работает скорее с вероятностями, чем с пропорциями. Шансы просто рассчитываются как соотношение пропорций двух возможных исходов. Пусть p будет долей одного результата, тогда 1-p будет долей второго результата.

Математически,

Коэффициенты = p / 1-p

Статистическая модель логистической регрессии:

журнал (p / 1-p) = β0 + β1x

Многомерная логистическая регрессия

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

Примечание. Перейдите по указанной ниже ссылке (GitHub Repo), чтобы найти набор данных, словарь данных и подробное решение этой проблемы.



Очистка и подготовка данных

После загрузки необходимых библиотек и набора данных давайте взглянем на первые несколько записей с помощью команды head ().

Команды формы говорят нам, что набор данных содержит в общей сложности 9240 точек данных и 37 столбцов. Ниже перечислены названия столбцов, представленных в этом наборе данных:

Как видите, большинство перечисленных переменных функций интуитивно понятны. Пожалуйста, обратитесь к словарю данных, чтобы лучше их понять.

Дальнейший анализ показывает наличие категориальных переменных в наборе данных, для которых нам нужно будет создать фиктивные переменные. Перед этим мы обрабатываем набор данных, чтобы удалить столбцы и строки с нулевыми значениями, а также переменные, которые, по нашему мнению, не понадобятся для этого анализа (например, город, страна). Быстрая проверка процента сохраненных строк показывает нам, что 69% строки были сохранены, что кажется достаточно хорошим.

Разделение тестового поезда

Целевая переменная для этого набора данных - «Конвертировано», которая сообщает нам, был ли предыдущий интерес преобразован или нет, где 1 означает, что он был преобразован, а 0 означает, что он не был преобразован.

Импортируйте библиотеку test_train_split и разделите набор данных на 70% на поезд и 30% на тест.

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

Построение модели

Переходя к части построения модели, мы видим, что в этом наборе данных есть много переменных, с которыми мы не можем справиться. Следовательно, мы будем использовать RFE, чтобы выбрать небольшой набор функций из этого пула. Ниже приведен код того же:

# Import 'LogisticRegression' and create a LogisticRegression object
from sklearn.linear_model import LogisticRegression
logreg = LogisticRegression()
# Import RFE and select 15 variables
from sklearn.feature_selection import RFE
rfe = RFE(logreg, 15)             
rfe = rfe.fit(X_train, y_train)

Теперь мы будем использовать statsmodels для создания моделей логистической регрессии на основе p-значений и VIF. Для начала создадим модель на наборе поездов после добавления константы и выведем сводку. Вот как будут выглядеть результаты регрессии обобщенной модели:

Мы также вычислим VIF для всех функций аналогичным образом и отбросим переменные с высоким значением p и высоким VIF. После переоборудования модели с новым набором функций мы еще раз проверим диапазон, в котором находятся значения p и VIF. При необходимости мы продолжим оценку модели в качестве следующего шага.

Оценка модели

Теперь мы спрогнозируем вероятности в наборе поездов и создадим новый фрейм данных, содержащий фактический флаг преобразования и вероятности, предсказанные моделью. Добавьте столбец для захвата прогнозируемых значений с условием равным 1 (в случае, если значение оплаченной вероятности больше 0,5) или 0.

Некоторые важные концепции, с которыми необходимо ознакомиться, прежде чем мы начнем оценивать модель:

Матрица неточностей

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

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

Это сводка результатов прогноза по классификационной модели.

В двухклассовых задачах мы строим матрицу путаницы, присваивая строку событий как «положительную», а строке без событий - как «отрицательную». Столбец прогнозов событий имеет значение «истина», а столбец без событий - значение «ложь».

Тогда матрица будет состоять из следующих элементов:

(i) Истинно положительный - для правильно установленных значений события

(ii) Истинно отрицательный - для правильно спрогнозированных значений отсутствия событий

(iii) Ложноположительный результат - для неверно спрогнозированных значений события.

(iv) Ложноотрицательный - для неверно предсказанных значений отсутствия событий.

Вот некоторые основные показатели эффективности, полученные из матрицы неточностей:

(a) Чувствительность: Чувствительность (SN) рассчитывается как количество правильных положительных прогнозов, деленное на общее количество положительных результатов. Это также называется отзывом (REC) или истинно положительной скоростью (TPR).

Математически,

(b) Специфичность. Специфичность (SP) рассчитывается как количество правильных отрицательных прогнозов, деленное на общее количество отрицательных. Это также называется истинно отрицательной ставкой (TNR).

Математически,

(c) Точность: Точность (PREC) рассчитывается как количество правильных положительных предсказаний, деленное на общее количество положительных предсказаний. Это также называется положительной прогностической ценностью (PPV).

Математически,

(г) Напомним: это часть всех существующих положительных результатов, которые мы предсказываем правильно.

Математически,

Мы будем использовать приведенную выше матрицу и показатели для оценки модели. 0,5 было случайно выбранным значением для проверки производительности модели. Чтобы получить лучшие результаты, нам необходимо оптимизировать порог, что мы и сделаем, построив и проанализировав кривую ROC.

Кривая рабочих характеристик приемника - это, по сути, график между частотой ложных и истинно положительных результатов для ряда пороговых значений, лежащих между 0 и 1.

Кривая ROC помогает нам сравнивать кривые разных моделей с разными пороговыми значениями, тогда как AUC (площадь под кривой) дает нам сводную информацию о навыках модели.

Здесь AUC составляет 0,86, что кажется неплохим. Чтобы найти оптимальную точку отсечения, давайте также проверим чувствительность и специфичность модели при разных порогах вероятности и построим то же самое.

На уровне 0,42 кривые трех показателей, кажется, пересекаются, поэтому мы выберем это значение в качестве порогового значения. (Вы можете рассчитать метрики, опять же, используя эту точку). Мы сделаем прогнозы по набору тестов, используя тот же подход.

Компромисс между точностью и отзывчивостью

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

Давайте проверим этот компромисс для выбранного нами значения порогового значения (т. Е. 0,42).

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

# Let's check the overall accuracy
metrics.accuracy_score(y_pred_final['Converted'], y_pred_final.final_predicted)
TP = confusion2[1,1] # true positive 
TN = confusion2[0,0] # true negatives
FP = confusion2[0,1] # false positives
FN = confusion2[1,0] # false negatives
# Calculate Precision
TP/(TP+FP)
# Calculate Recall
TP/(TP+FN)

Метрики, похоже, соответствуют тестовым данным. Похоже, мы создали достойную модель, поскольку метрики подходят как для тестов, так и для наборов данных поездов.

Теперь вы знакомы с основами построения и оценки моделей логистической регрессии с помощью Python. Как правило, это простой подход:

(i) Импортируйте необходимые пакеты и библиотеки.

(ii) Очистка данных, преобразование

(iii) Модель классификации должна быть создана и обучена с использованием существующих данных.

(iv) Оцените и проверьте работоспособность модели.

(v) Делайте прогнозы на основе наборов тестов.