На второй день я буду внедрять логистическую регрессию, используя научный набор для изучения набора данных от Kaggle, чтобы предсказать вероятность сердечных заболеваний на основе нескольких факторов здоровья людей.

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

Шаг первый: Импортируйте библиотеки и набор данных.

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix, accuracy_score
%matplotlib inline
dataframe= pd.read_csv("framingham.csv")

Шаг второй: проверка и очистка данных

dataframe.isna().sum()  #sum of null values in columns
dataframe =dataframe.drop(['education','glucose'], axis='columns') #drop columns with most null values

Шаг третий: заполните нулевые значения для столбца в наборе данных средним значением каждого столбца.

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

mean_value=dataframe['BMI'].mean()
dataframe['BMI'].fillna(value=mean_value, inplace=True)

mean_value1=dataframe['cigsPerDay'].mean()
dataframe['cigsPerDay'].fillna(value=mean_value, inplace=True)

mean_value2=dataframe['heartRate'].mean()
dataframe['heartRate'].fillna(value=mean_value, inplace=True)

mean_value3=dataframe['BPMeds'].mean()
dataframe['BPMeds'].fillna(value=mean_value, inplace=True)

mean_value4=dataframe['totChol'].mean()
dataframe['totChol'].fillna(value=mean_value, inplace=True)

Шаг четвертый: разделите данные на функции и метки

X = dataframe[['male', 'age', 'currentSmoker', 'cigsPerDay', 'BPMeds',
       'prevalentStroke', 'prevalentHyp', 'diabetes', 'totChol', 'sysBP',
       'diaBP', 'BMI', 'heartRate']]
y = dataframe['TenYearCHD']

Шаг пятый: разделите данные на обучающие и тестовые наборы, используя функцию sklearn train_test_split.

X_train, x_test, y_train, y_test = train_test_split(X, y,test_size=0.20,random_state=18)

Шаг шестой: Создайте и обучите модель.

logreg_model = LogisticRegression(solver='lbfgs', max_iter=1000)
logreg_model.fit(X_train,y_train)

Шаг седьмой: сделайте прогнозы и оцените модель с помощью матрицы путаницы

# make predictions
y_pred = logreg_model.predict(x_test)
#get accuracy in percentage
accuracy = accuracy_score(y_test,y_pred)*100
confusion_mat = confusion_matrix(y_test,y_pred)
print("Accuracy is",accuracy)
print("Confusion Matrix")
print(confusion_mat)

Точность 85,49528301886792.

Матрица путаницы [[717 8] [115 8]]

from sklearn import metrics
print("Mean Absolute Error: ", metrics.mean_absolute_error(y_test,y_pred))
print('Mean Squared Error:', metrics.mean_squared_error(y_test,y_pred))
print('Root Mean Squared Error:', np.sqrt(metrics.mean_squared_error(y_test,y_pred)))

Средняя абсолютная ошибка: 0,14504716981132076

Среднеквадратическая ошибка: 0,14504716981132076

Среднеквадратическая ошибка: 0,38085058725348025

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

Отражение

Учебники, которым я следовал, здесь и здесь. Я смог понять основы логистической регрессии и понять, как ее использовать самостоятельно с помощью Sci-kit Learn. Гитхаб

Спасибо за чтение! ❤

Мой LinkedIn