Простое и нежное введение в логистическую регрессию с кодом Python и рабочим примером

Всем привет. Спасибо за интерес к моей статье. Давайте начнем!

1. Краткое введение

Логистическая регрессия – это метод машинного обучения, берущий начало в области статистики. Это действительно широко используемый метод для задач двоичной классификации (примечание: это не метод регрессии, как следует из его названия), но его также можно использовать для задач классификации с несколькими классами (например, более 2 классов/ метки с реализацией one-vs-rest).

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

2. Суть метода

логистическая функция, также называемая сигмовидной функцией, была разработана статистиками для описания свойств роста населения в экологии. , быстро растет и достигает максимальной пропускной способности окружающей среды [1]. Это S-образная кривая, которая может взять любое число с действительным знаком и преобразовать его в значение от 0 до 1 (но никогда, математически говоря, точно равные этим пределам).

Логистическая регрессия — это метод классификации, а не регрессия!

Функция логистики определяется следующим образом:

В логистической регрессии линейная модель (например, w*β1 + β0) включается в логистическую (также называемую сигмовидной) функцию.

Примечание. Основное отличие от линейной регрессии заключается в том, что выходное значение представляет собой двоичное значение (0 или 1), а не числовое значение.

Входные значения объединяются линейно с использованием весов или значений коэффициентов (x*β1 + β0) для прогнозирования выходных данных значение (y=f(x)). Ниже приведен пример уравнения логистической регрессии (предполагается один входной признак/переменная x):

Где y – прогнозируемый результат, b0 – смещение или точка пересечения, а b1 – коэффициент для одного входного значения ( Х).

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

Если вы хотите изучать науку о данных самостоятельно с помощью интерактивных дорожных карт и активного обучающего сообщества, взгляните на этот ресурс: https://aigents.co/learn

3. Связь с вероятностями

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

Логистическая регрессия моделирует вероятность класса по умолчанию. Как упоминалось ранее, логистическая регрессия — это метод классификации, но он также дает нам вероятность класса/метки, а не только предсказанную классификацию [2]. Это благодаря использованию логистической функции, которая отображает числовые выходные данные в диапазоне (0,1).

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

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

Как объяснялось выше, сигмовидная функция лежит между 0 и 1, и поэтому мы можем представить вероятности класса следующим образом:

Мы могли бы классифицировать выборку как принадлежащую

  • Класс 1, еслиy=1 или
  • Класс 2, еслиy=0

Поэтому порог вероятности (y) будет равен 0,5.

Если y≥0,5, отнесите этот образец к классу 1, в противном случае — к классу 2.

Теперь, чтобы найти границу решения, нам нужно решить следующее уравнение:

Итак, нам нужно решить для:

или эквивалентно:

Это наша линейная граница решения. Для более чем одной входной функции/переменной x мы можем записать это в более общем виде:

где X — это матрица с нашими переменными в виде столбцов и нашими выборками в виде строк, а b — вектор бета-весов/коэффициентов.

5. Рабочий пример Python

Ладно, с математикой все. Давайте теперь создадим рабочий пример на python!

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

Вот некоторый код Python для создания набора данных и его построения:

from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
X, y = make_blobs(n_samples=100, centers=2, n_features=2, random_state=0)
c = ['blue' if i==0 else 'red' for i in y]
plt.figure(dpi=200)
plt.scatter(X[:,0], X[:,1], c=c)
plt.xlabel("x1")
plt.ylabel("x2")
plt.show()

Теперь давайте разделим данные на обучающие (70%) и тестовые (30%) наборы для подбора модели.

from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.metrics import plot_confusion_matrix
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

Затем мы подгоняем модель, используя обучающий набор, и прогнозируем метки/классы тестового набора, используя обучающую модель.

# model definition & fitting
clf = LogisticRegression(random_state=0).fit(X_train, y_train)
# Predict classes of the test set
y_pred = clf.predict(X_test)

Наконец, мы оцениваем эффективность классификации.

print("The accuracy score on the test set is {}".format(clf.score(X_test, y_test)))
# or alternatively we can use "accuracy_score(y_test, y_pred)"

Оценка точности на тестовом наборе составляет 0,93.

plot_confusion_matrix(clf, X_test, y_test, display_labels=['dog', 'cat'])

Наконец, давайте построим границу решения:

import numpy as np
# Get the model parameters.
b = clf.intercept_[0]
w1, w2 = clf.coef_.T
# Calculate the intercept & gradient of the decision boundary.
c = -b/w2
m = -w1/w2
# Plot the data and the decision boundary.
xmin, xmax = -1, 2
ymin, ymax = -1, 2.5
xd = np.array([xmin, xmax])
yd = m*xd + c
plt.plot(xd, yd, 'k', lw=1, ls='--')
plt.fill_between(xd, yd, ymin, color='tab:blue', alpha=0.2)
plt.fill_between(xd, yd, ymax, color='tab:orange', alpha=0.2)
X = X_train
Y = y_train
plt.scatter(*X[Y==0].T, s=8, alpha=0.5)
plt.scatter(*X[Y==1].T, s=8, alpha=0.5)
plt.xlim(xmin, xmax)
plt.ylim(ymin, ymax)
plt.ylabel("x2")
plt.xlabel("x1")
plt.show()

6. Выводы

Логистическая регрессия – это мощный метод машинного обучения для решения задач бинарной классификации.

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

Рекомендации

[1] https://en.wikipedia.org/wiki/Логистическая_регрессия

[2] https://web.stanford.edu/~jurafsky/slp3/5.pdf

Последние записи







https://medium.com/mlearning-ai/how-to-perform-feature-selection-for-regression-problems-cc6ea56c6d48









Оставайтесь с нами и поддержите это усилие.

Если вам понравилась и вы нашли эту статью полезной, подпишитесь на меня!

Вопросы? Разместите их в качестве комментария, и я отвечу как можно скорее.

Рекомендации

Свяжитесь со мной