Двумерный пример
Логистическая регрессия - это модель, используемая для прогнозирования «или-или» целевой переменной. Пример, над которым мы будем работать:
- Целевая переменная: учащийся сдаст или не сдаст экзамен.
- Независимая переменная: количество часов, потраченных на обучение в неделю.
Логистические модели - это, по сути, линейные модели с дополнительным шагом. В логистических моделях линейная регрессия проходит через «сигмовидную функцию», которая сжимает свои выходные данные в дихотомические единицы и нули.
Если бы мы хотели предсказать фактические результаты тестов, мы бы использовали линейную модель. Если бы мы хотели предсказать «пройден» / «не пройден», мы бы использовали модель логистической регрессии.
Линейный (прогноз числового результата теста):
y = b0 + b1x
Логистика (прогноз «пройден / не пройден»):
p = 1 / 1 + e ^-(b0 + b1x)
Визуализация:
На изображении ниже прямая линия является линейной, а линия в форме буквы «S» - логистической. Логистические регрессии имеют более высокую точность при использовании для моделей «или-или» из-за их формы.
Понимание данных:
import numpy as np import pandas as pd import matplotlib.pyplot as plt %matplotlib inline df = pd.read_excel(r”C:\Users\x\x\Log_test.xlsx”) x = df[‘W_hours’] y = df[‘Y’] plt.scatter(x,y) plt.show()
df.info() x.plot.hist() y.plot.hist()
В наборе данных 23 строки. Ниже представлено распределение изученных часов:
Ниже представлено распределение пройденных (1) / неудачных (0):
Подготовка данных / моделирование
Затем мы будем использовать библиотеку sklearn для импорта LogisticRegression. Подробности о параметрах можно найти здесь.
Мы конвертируем нашу двумерную модель в двухмерную с помощью функции .reshape (). Мы определяем 1 столбец, но оставляем количество строк равным размеру набора данных. Итак, мы получаем новую форму для x как (23, 1), вертикальный массив. Это необходимо для правильной работы функции sklearn.
Используйте «logreg.fit (x, y)» для соответствия регрессии.
from sklearn.linear_model import LogisticRegression logreg = LogisticRegression(C=1.0, solver=’lbfgs’, multi_class=’ovr’) #Convert a 1D array to a 2D array in numpy x = x.reshape(-1,1) #Run Logistic Regression logreg.fit(x, y)
Использование и визуализация модели
Давайте напишем программу, в которой мы сможем получить прогнозируемую вероятность сдачи и невыполнения по часам изучения. Мы вводим время обучения в код ниже: Примеры изучаемых 12, 16 и 20 часов.
print(logreg.predict_proba([[12]])) print(logreg.predict_proba([[16]])) print(logreg.predict_proba([[20]]))
Выход слева - это вероятность отказа, выход справа - проходной.
Чтобы визуализировать модель, давайте сделаем цикл, в котором каждые полчаса учебного времени мы вводим регрессию от 0 до 33.
hours = np.arange(0, 33, 0.5) probabilities= [] for i in hours: p_fail, p_pass = logreg.predict_proba([[i]])[0] probabilities.append(p_pass) plt.scatter(hours,probabilities) plt.title("Logistic Regression Model") plt.xlabel('Hours') plt.ylabel('Status (1:Pass, 0:Fail)') plt.show()
В этом вымышленном наборе данных учащийся гарантированно сдает экзамен, если он / она учится более 20 часов, и гарантированно не сдаст экзамен, если менее 10 часов. 17 часов - это отметка 50/50.
Спасибо за прочтение,