Изучите логистическую регрессию за 5 минут с помощью Python
Машинное обучение 101
- "Линейная регрессия"
2. Логистическая регрессия
и многое другое.
В предыдущем посте мы начали серию машинного обучения с линейной регрессии. Теперь пришло время изучить логистическую регрессию с ее основами.
В этом посте я объясню, как работает логистическая регрессия и как ее построить на Python.
Если вы не знакомы с линейной регрессией, я также объяснил линейную регрессию на практическом примере здесь.
Начнем!
Что такое логистическая регрессия?
Логистическая регрессия — это метод статистического и машинного обучения для классификации наблюдений на основе значений полей ввода.
Он в основном используется для бинарной классификации (отток или не отток, хороший или плохой и т. д.), но также используется для множественной классификации (низкий, нормальный, высокий).
Логистическая регрессия соответствует специальной s-образной кривой, беря линейную регрессию и преобразовывая числовую оценку в вероятность.
Вы можете увидеть форму сигмовидной функции ниже.
Мы видим на оси y, s-образный идет от 0 до 1, что является вероятностью выхода. Например, если мы пытаемся предсказать вероятность оттока клиентов, 1 означает, что наш клиент на 100 % уйдет на основе логистической регрессии, тогда как 0 означает, что клиент не может покинуть нашу компанию.
Когда использовать логистическую регрессию?
- Если вам нужны вероятностные результаты (вероятность оттока клиентов составляет 60%)
- Когда вам нужно понять влияние функции (как линейную, так и логистическую регрессию легко объяснить).
- Когда ваши данные двоичные (логистическая регрессия больше подходит для двоичной классификации)
Логистическая регрессия также является формой линейной регрессии, в которой используется сигмовидная функция для преобразования значений в вероятности.
Разница между логистической и линейной регрессией
В линейной регрессии мы можем попытаться предсказать непрерывное значение, такое как цена дома, продажи в магазине или расход топлива автомобиля. С другой стороны, в логистической регрессии мы прогнозируем значение, которое в основном является бинарным, например, да/нет, отток/не отток.
Обратите внимание, что целью логистической регрессии является оценка вероятности появления, а не значения самой переменной.
Пример: прогнозирование оттока клиентов с помощью логистической регрессии
Мы будем использовать набор телекоммуникационных данных для прогнозирования оттока клиентов. Для простоты я ограничу данные с помощью параметра usecols.
Скажем, нам предоставлены данные об оттоке клиентов, и наша цель — предсказать отток клиентов на основе заданных функций.
Набор данных
Отток: независимо от того, покинул ли клиент компанию или нет
MonthlyCharge:Ежемесячный счет за каждого клиента
Плата за перерасход: самый большой сбор за перерасход за последние 12 месяцев.
AccountWeeks: количество недель, в течение которых клиент имел активную учетную запись.
Использование данных: использование данных в гигабайтах в месяц.
Посмотреть репозиторий машинного обучения и загрузить данные можно здесь.
df = pd.read_csv('churn_data.csv',usecols=['Churn','MonthlyCharge','OverageFee','AccountWeeks','DataUsage'])
Понимание данных
Когда мы впервые сталкиваемся с нашим набором данных, нам всегданужно понимать набор данных.
Есть некоторые функции, которые обычно используются в pandas. Вот некоторые из них: head(), tail(), description(), info(), shape(). Если вы хотите узнать больше об исследовательском анализе данных, я также подробно объяснил это здесь.
df.head()
df.describe() # summary statistics of
df.info()
Построение модели логистической регрессии
Вместо того, чтобы подгонять данные ко всему нашему набору данных, лучше разделить данные для обучения и тестирования.
Разделение между поездами и тестами
X = df.drop('Churn',axis=1) y = df['Churn'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42)
Нормализация данных
scaler = StandardScaler() X_train = scaler.fit_transform(X_train) X_test = scaler.transform(X_test)
Давайте построим нашу модель, используя LogisticRegression из пакета Scikit-learn. Эта функция реализует логистическую регрессию и может использовать различные числовые оптимизаторы для поиска параметров, включая 'newton-cg', 'lbfgs', 'liblinear'. , 'sag', 'saga'.
Таблица ниже даст вам представление о том, что вы должны выбрать в качестве решателя.
Для этого набора данных мы используем «liblinear» в качестве решателя. Параметр C указывает инверсию силы регуляризации, которая должна быть положительной с плавающей запятой. Меньшие значения определяют более сильную регуляризацию.
logistic_model = LogisticRegression(C=0.20,solver='liblinear') logistic_model.fit(X_train,y_train)
Теперь мы можем прогнозировать, используя наш набор данных:
y_pred = logistic_model.predict(X_test)
Оценка нашей модели
Матрица путаницы
sns.heatmap(confusion_matrix(y_test,y_pred,labels=[1,0]),annot=True,fmt='g',cbar=None,xticklabels=['Churn','Not Churn'],yticklabels=['Churn','Not Churn'],cmap='Blues') plt.yticks(rotation = 0) plt.title('Confusion Matrix') plt.ylabel('Actual Values') plt.xlabel('Predicted Values') plt.show()
Как вы можете подсчитать, из 235 клиентов значение оттока 97 из них равно 1. Из этих 97 случаев классификатор правильно предсказал 36 из них как 1, а ошибочно 61 из них как 0.
Что можно сказать о клиентах с нулевым значением оттока? Давайте посмотрим на вторую строку:
Похоже, что было 138 клиентов, фактическое значение оттока которых было равно 0. Наша модель правильно предсказала 118 из них как 0 и 20 из них ошибочно как 1.
Основываясь на подсчете каждого раздела, мы также можем рассчитать точность, точность, отзыв, показатели F1 Score, а также.
Точность – это мера точности при условии, что метка класса была предсказана. Он определяется следующим образом: точность = TP / (TP + FP)
Отзыв – это истинный положительный показатель. Он определяется как: Отзыв = TP / (TP + FN)
Оценка F1: Теперь мы можем рассчитать оценки F1 для каждой метки на основе точности и отзыва. этого ярлыка.
Точность Количество всех правильных прогнозов / Все прогнозы
print(f'Accuracy Score is {round(accuracy,2)} Precision Score is {round(precision,2)}, Recall Score is ,{round(recall,2)} and F1 Score is {round(f1,2)}') Output: Accuracy Score is 0.66 Precision Score is 0.64, Recall Score is ,0.37 and F1 Score is 0.47
Заключение
В этой статье я попытался объяснить основные концепции логистической регрессии на практике. Я продолжу серию статей о машинном обучении и скоро добавлю новый контент.
Блокнот и набор данных можно найти на моем Github!
Ссылки: https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression
Хотите изучить линейную регрессию? Нажмите на ссылку ниже!
Хотите изучить 10 SQL-запросов, наиболее часто используемых в науке о данных?