ML | Прогнозирование сердечных заболеваний с использованием логистической регрессии.
По оценкам Всемирной организации здравоохранения, четыре из пяти смертей от сердечно-сосудистых заболеваний (ССЗ) вызваны сердечными приступами. Все это исследование направлено на то, чтобы точно определить соотношение пациентов, у которых есть хорошие шансы на поражение сердечно-сосудистыми заболеваниями, а также предсказать общий риск с помощью логистической регрессии.
Что такое логистическая регрессия?
Логистическая регрессия - это статистические методы и методы машинного обучения, классифицирующие записи набора данных на основе значений входных полей. Он прогнозирует зависимую переменную на основе одного или нескольких наборов независимых переменных для прогнозирования результатов. Его можно использовать как для двоичной классификации, так и для мультиклассовой классификации. Чтобы узнать больше об этом, нажмите здесь.
import pandas as pdimport pylab as plimport numpy as npimport scipy.optimize as optimport statsmodels.api as smfrom preprocessing import sklearn'exec(% matplotlib inline)'import matplotlib.pyplot as pltimport matplotlib.mlab as mlabimport seaborn as sn |
Подготовка данных:
Набор данных публично доступен на веб-сайте Kaggle и взят из продолжающегося исследования сердечно-сосудистой системы, проведенного среди жителей города Фрамингем, штат Массачусетс. Цель классификации - предсказать, есть ли у пациента 10-летний риск ишемической болезни сердца (ИБС) в будущем. Набор данных предоставляет информацию о пациентах. Он включает более 4000 записей и 15 атрибутов .
Загрузка набора данных.
# datasetdisease_df = pd.read_csv( "../input / framingham.csv" )disease_df.drop([ 'education' ], inplace = True , axis = 1 )disease_df.rename(columns = { 'male' : 'Sex_male' }, inplace = True ) # removing NaN / NULL valuesdisease_df.dropna(axis = 0 , inplace = True )print (disease_df.head(), disease_df.shape)print (disease_df.TenYearCHD.value_counts()) |
Выход :
Пол_мужской возраст Текущий Курильщик ... сердечный ритм глюкоза Десять лет CHD
0 1 39 0 ... 80,0 77,0 0
1 0 46 0 ... 95,0 76,0 0
2 1 48 1 ... 75,0 70,0 0
3 0 61 1 ... 65,0 103,0 1
4 0 46 1 ... 85,0 85,0 0
[5 рядов x 15 столбцов] (3751, 15)
0 3179
1 572
Имя: TenYearCHD, dtype: int64
Код: Десятилетняя история болезни ИБС для всех пациентов, доступных в наборе данных:
# counting no. of patients affected with CHDplt.figure(figsize = ( 7 , 5 ))sn.countplot(x = 'TenYearCHD' , data = disease_df, palette = "BuGn_r" )plt.show() |
Вывод: Графический дисплей: 
Код: Подсчет числа пациентов, страдающих ИБС, где (0 = не затронуты; 1 = затронуты):
laste = disease_df[ 'TenYearCHD' ].plot()plt.show(laste) |
Вывод: Графический дисплей: 
Код: Наборы для обучения и тестирования: Разделение данных | Нормализация набора данных
X = np.asarray(disease_df[[ 'age' , 'Sex_male' , 'cigsPerDay' , 'totChol' , 'sysBP' , 'glucose' ]])y = np.asarray(disease_df[ 'TenYearCHD' ]) # normalization of the datsetX = preprocessing.StandardScaler().fit(X).transform(X) # Train-and-Test -Splitfrom sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test = train_test_split( X, y, test_size = 0.3 , random_state = 4 )print ( 'Train set:' , X_train.shape, y_train.shape)print ( 'Test set:' , X_test.shape, y_test.shape) |
Выход :
Набор поездов: (2625, 6) (2625,) Набор тестов: (1126, 6) (1126,)
Код: Моделирование набора данных | Оценка и точность:
from sklearn.linear_model import LogisticRegressionlogreg = LogisticRegression()logreg.fit(X_train, y_train)y_pred = logreg.predict(X_test) # Evaluation and accuracyfrom sklearn.metrics import jaccard_similarity_scoreprint ('')print ( 'Accuracy of the model in jaccard similarity score is = ' , jaccard_similarity_score(y_test, y_pred)) |
Выход :
Точность модели по шкале сходства жаккара = 0,8490230905861457.
Код: Использование матрицы неточностей для определения точности модели:
# Confusion matrixfrom sklearn.metrics import confusion_matrix, classification_report cm = confusion_matrix(y_test, y_pred)conf_matrix = pd.DataFrame(data = cm, columns = [ 'Predicted:0' , 'Predicted:1' ], index = [ 'Actual:0' , 'Actual:1' ])plt.figure(figsize = ( 8 , 5 ))sn.heatmap(conf_matrix, annot = True , fmt = 'd' , cmap = "Greens" )plt.show() print ( 'The details for confusion matrix is =' )print (classification_report(y_test, y_pred)) # This code is contributed by parna_28 . |
Выход :
Детали для матрицы неточностей: =
точный отзыв поддержка f1-score
0 0,85 0,99 0,92 951
1 0,61 0,08 0,14 175
точность 0,85 1126
макрос среднем 0,73 0,54 0,53 1126
средневзвешенная 0,82 0,85 0,80 1126
Матрица неточностей: 
Внимание компьютерщик! Укрепите свои основы с помощью базового курса программирования Python и изучите основы.
Для начала подготовьтесь к собеседованию. Расширьте свои концепции структур данных с помощью курса Python DS. А чтобы начать свое путешествие по машинному обучению, присоединяйтесь к курсу Машинное обучение - базовый уровень.