На второй день я буду внедрять логистическую регрессию, используя научный набор для изучения набора данных от 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. Гитхаб
Спасибо за чтение! ❤