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

Давайте уделим некоторое время тому, чтобы понять, как работает логистическая регрессия и в каких ситуациях ее следует использовать.

Определение терминов машинного обучения

Логистическая регрессия — разновидность алгоритма классификации. Но что означает классификация?

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

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

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

Давайте рассмотрим пример задач классификации и задач регрессии, чтобы убедиться, что разница ясна.

Допустим, у вас есть набор данных, полный подробностей о разных домах, и вы хотите предсказать цену, по которой дом будет продан. В задаче регрессии модель учитывает характеристики (такие как количество комнат, площадь земли, возраст дома и т. д.) и пытается предсказать числовое значение, например 95 825 долларов.

Математически, если {x1,x2,…,xn} — характеристики, а y — цена, предположим, что функция гипотезы равна 0, так что y=0(x1,x2,…,xn). Модель регрессии попытается нарисовать то, что лучше всего подходит для набора данных.

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

  • Цена значительно ниже ожидаемой
  • Цена ниже ожидаемой
  • Ориентировочно ожидаемая цена
  • Цена выше ожидаемой
  • Цена значительно выше ожидаемой

Алгоритм классификации пометит пример одной из выбранных категорий.

Что такое логистическая регрессия?

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

Помните, что задачи классификации имеют дискретные категории, в отличие от задач регрессии.

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

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

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

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

Сигмовидная функция/логистическая функция — это функция, которая напоминает S-образную кривую при нанесении на график. Он принимает значения от 0 до 1 и «сжимает» их к полям сверху и снизу, помечая их как 0 или 1.

Уравнение для сигмовидной функции таково:

y=1/(1+e^{-x})

Что такое переменная e в этом случае? e представляет экспоненциальную функцию или экспоненциальную константу и имеет значение приблизительно 2,71828.

Давайте посмотрим, как сигмовидная функция представляет данный набор данных.

Это дает значение y, очень близкое к 0, если x большое отрицательное значение, и близкое к 1, если x большое положительное значение. После того, как входное значение было сжато до 0 или 1, входные данные могут быть пропущены через типичную линейную функцию, но теперь входные данные могут быть помещены в отдельные категории.

Как используется логистическая регрессия

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

  • Прогнозирование, является ли электронное письмо спамом или не спамом
  • Является ли опухоль злокачественной или доброкачественной
  • Является ли гриб ядовитым или съедобным.

При использовании логистической регрессии обычно указывается пороговое значение, указывающее, при каком значении пример будет помещен в один класс по сравнению с другим классом. В задаче классификации спама может быть установлено пороговое значение 0,5, что приведет к тому, что электронное письмо с вероятностью 50 % или выше будет классифицировано как спам, а любое электронное письмо с вероятностью менее 50 % будет классифицировано как «не спам». ».

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

Что такое стратегия один против всех? Допустим, у вас есть три разных класса, в которые могут попасть экземпляры в вашем наборе данных, и если бы у вас были эти три класса, вы могли бы рассматривать их как три разные проблемы бинарной классификации.

Например, вы бы обучили классификатор только на примерах, принадлежащих классу A, а не на всех примерах, принадлежащих всем другим классам. Затем вы должны сделать то же самое для класса B и, наконец, для класса C.

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

Тестовый пример применения логистической регрессии

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

Хорошим набором данных для практики является Набор данных о раке молочной железы, штат Висконсин. Набор данных разделен на 569 экземпляров/примеров с 32 различными атрибутами/функциями.

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

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

Логистическая регрессия в Python

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

Во-первых, мы начнем с импорта необходимых библиотек.

Мы будем использовать Scikit-learn, библиотеку машинного обучения для Python. Мы также используем библиотеку Pandas для загрузки в CSV и Numpy для преобразования фрейма данных в массивы, которые может использовать логистическая регрессия.

import numpy as np
import pandas as pd

# Now load in the dataset with Pandas
dataset = pd.read_csv(‘data.csv')

# Print out part of the dataset to ensure proper loading
print(dataset.head())

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

df = df.drop('Unnamed: 32', axis=1)

print(df.head(5))

Теперь нам нужно разделить наш фрейм данных на разделы обучения и тестирования. Важно не тестировать те же данные, на которых вы обучались, потому что это крайняя предвзятость, и она не будет точно отражать то, что удалось узнать классификатору.

Мы можем использовать функцию «train_test_split» в Scikit-learn для разделения данных и указать, какой процент данных мы хотели бы выделить для тестирования.

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.15, random_state=31)

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

from sklearn.preprocessing import

StandardScaler


# Create an instance of the scaler and apply it to the data


sc = StandardScaler()

X_train = sc.fit_transform(X_train)

X_test = sc.transform(X_test)

Теперь, когда мы подготовили данные, мы можем передать их в классификатор логистической регрессии. Во-первых, мы импортируем алгоритм логистической регрессии из Scikit-learn.

from sklearn.linear_model import LogisticRegression

Теперь мы создадим экземпляр классификатора и подгоним его к обучающим данным.

LogReg_clf = LogisticRegression(random_state = 0)

classifier.fit(X_train, y_train)

Теперь мы создадим прогнозы, запустив классификатор на тестовом наборе данных.

y_pred = classifier.predict(X_test)

Наконец, давайте проверим, как работает классификатор, импортировав некоторые показатели и сверив прогнозируемые значения с фактическими значениями.

from sklearn.metrics import confusion_matrix, accuracy_score


acc =  accuracy_score(y_test, y_pred)

cm = confusion_matrix(y_test, y_pred)


print(acc)

print(cm)

Вот и все, ваш первый классификатор логистической регрессии в Scikit-learn!

Заключение

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

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

Хотите узнать больше о таких темах искусственного интеллекта, как эта? Посетите наш блог по адресу blog.kambria.io и нажмите Технологии, чтобы прочитать множество статей об искусственном интеллекте, 3D-печати, робототехнике, блокчейне и многом другом. Вы также можете посетить kambria.io, чтобы узнать больше о нашей экосистеме открытых инноваций, которая помогает объединять новаторов и организации. Дайте нам знать, как вы хотели бы принять участие!

Первоначально опубликовано на Kambria.