Простое и нежное введение в логистическую регрессию с кодом 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
Последние записи
Оставайтесь с нами и поддержите это усилие.
Если вам понравилась и вы нашли эту статью полезной, подпишитесь на меня!
Вопросы? Разместите их в качестве комментария, и я отвечу как можно скорее.
Рекомендации
Свяжитесь со мной
- LinkedIn: https://www.linkedin.com/in/serafeim-loukas/
- ResearchGate: https://www.researchgate.net/profile/Serafeim_Loukas