machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home

Логистическая регрессия: упрощенный подход с использованием Python

Дата публикации Sep 17, 2018

В логистической регрессии мы хотим смоделировать зависимую переменную (Y) в терминах одной или нескольких независимых переменных (X). Это метод дляклассификация, Этот алгоритм используется для зависимой переменной, котораякатегорический, Y моделируется с помощью функции, которая выдает выходные данные от 0 до 1 для всех значений X. В логистической регрессиисигмоид(aka Logistic) Функция используется.

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

Оценка модели с использованием матрицы путаницы

После того, как мы обучим модель логистической регрессии на некоторых данных обучения, мы оценим производительность модели на некоторых тестовых данных. Для этого мы используемМатрица путаницы,Confusion Matrix - это таблица, которая часто используется для описания производительности модели классификации на наборе тестовых данных, для которых уже известны истинные значения. Ниже приведена матрица путаницы.

Здесь TP означает True Positive, в тех случаях, когда мы предсказывали да, и фактическое значение было истинным. TN обозначает True Negative, что является случаями, в которых мы прогнозировали no, а фактическое значение равно false .FP обозначает False Positive, то есть случаи, которые мы прогнозировали как yes, а фактическим значением было False.FN обозначает False Negative, которые являются случаями. который мы предсказали Нет, и фактическое значение было правдой.

Что мы выводим из матрицы путаницы?

Путаница Матрица помогает нам определить, насколько часто прогноз модели является правильным или, другими словами, точность модели. По приведенной выше таблице, это дает:

(TP + TN) / Итого = 100 + 50/165 = 0,91

Это означает, что модель верна на 91%. Матрица путаницы также используется для измерения частоты ошибок, которая определяется как:

(FP + FN) / Всего = 15/165 = 0,09

В модели ошибка 9%.

В этой статье мы будем иметь дело с очень простыми шагами в python для моделирования логистической регрессии.

Коды Python с подробным объяснением

Мы будем наблюдать за данными, анализировать их, визуализировать, очищать, строить модель логистической регрессии, разбивать данные на поезда и тестировать, делать прогнозы и, наконец, оценивать их. Все это будет сделано шаг за шагом. Данные, с которыми мы будем иметь дело, это «Титанический набор данных», доступный вkaggle.com, Это очень известный набор данных и часто первый шаг студента к обучению машинному обучению на основе классификации. Мы пытаемся предсказать классификацию: выживание или умерший

Сначала мы импортируем библиотеки numpy и pandas:

import numpy as np
import pandas as pd

Давайте сделаем визуализацию импорта:

import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

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

train=pd.read_csv('titanic_train.csv')
train.head()

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

train.isnull()

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

sns.heatmap(train.isnull())

Столбцы Age и Cabin имеют нулевые значения. Я имел дело с проблемой обращения со значениями АН в моем предыдущемблог, Пожалуйста, посмотрите на это.

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

sns.countplot(x='Survived',data=train)

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

sns.countplot(x='Survived',hue='Sex',data=train)

Здесь мы видим тенденцию, что выжило больше женщин, чем мужчин.

sns.countplot(x='Survived',hue='Pclass',data=train)

Из приведенного выше сюжета можно сделать вывод, что пассажиры, принадлежащие к классу 3, погибли больше всего.

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

Очистка данных

Мы хотим заполнить отсутствующие данные о возрасте, а не просто отбрасывать пропущенные строки данных о возрасте. Один из способов сделать это - указать средний возраст всех пассажиров (вменение). Тем не менее, мы можем быть умнее и проверить средний возраст по классу пассажиров. Например:

plt.figure(figsize=(12, 7))
sns.boxplot(x='Pclass',y='Age',data=train,palette='winter')

Мы можем видеть, что более состоятельные пассажиры в старших классах, как правило, старше, что имеет смысл. Мы будем использовать эти значения среднего возраста для вменения на основе Pclass for Age.

def impute_age(cols):
Age = cols[0]
Pclass = cols[1]

if pd.isnull(Age):if Pclass == 1:
return 37elif Pclass == 2:
return 29else:
return 24else:
return Age

Теперь примените эту функцию!

train['Age'] = train[['Age','Pclass']].apply(impute_age,axis=1)

Теперь давайте снова проверим эту тепловую карту.

sns.heatmap(train.isnull(),yticklabels=False,cbar=False)

Большой! Давайте продолжим и опустим колонну Каюты.

train.drop('Cabin',axis=1,inplace=True)

Преобразование категорических признаков

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

train.info()
sex = pd.get_dummies(train['Sex'],drop_first=True)
embark = pd.get_dummies(train['Embarked'],drop_first=True)

Здесь мы занимаемся сексом и занимаемся колоннами. После придумывания мы отбросим остальные столбцы, которые не нужны.

train.drop(['Sex','Embarked','Name','Ticket'],axis=1,inplace=True)

Мы объединим новый пол и введенные столбцы в фрейм данных

train = pd.concat([train,sex,embark],axis=1)

Теперь фрейм данных выглядит так:

Тестовый поезд Сплит

from sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test = train_test_split(train.drop('Survived',axis=1), 
train['Survived'], test_size=0.30,
random_state=101)

Обучение и прогнозирование

from sklearn.linear_model import LogisticRegression
logmodel = LogisticRegression()
logmodel.fit(X_train,y_train)
predictions = logmodel.predict(X_test)

оценка

Мы можем проверить точность, вспомнить, f1-счет, используя классификационный отчет

from sklearn.metrics import classification_report
print(classification_report(y_test,predictions))
Классификационный отчет

Оригинальная статья

Footer decor

© machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map