ML | Прогнозирование сердечных заболеваний с использованием логистической регрессии.

Опубликовано: 22 Июля, 2021

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

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

Код: загрузка библиотек.




import pandas as pd
import pylab as pl
import numpy as np
import scipy.optimize as opt
import statsmodels.api as sm
from preprocessing import sklearn
'exec(% matplotlib inline)'
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
import seaborn as sn

Подготовка данных:
Набор данных публично доступен на веб-сайте Kaggle и взят из продолжающегося исследования сердечно-сосудистой системы, проведенного среди жителей города Фрамингем, штат Массачусетс. Цель классификации - предсказать, есть ли у пациента 10-летний риск ишемической болезни сердца (ИБС) в будущем. Набор данных предоставляет информацию о пациентах. Он включает более 4000 записей и 15 атрибутов .


Загрузка набора данных.




# dataset
disease_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 values
disease_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 CHD
plt.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 datset
X = preprocessing.StandardScaler().fit(X).transform(X)
# Train-and-Test -Split
from sklearn.model_selection import train_test_split
X_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 LogisticRegression
logreg = LogisticRegression()
logreg.fit(X_train, y_train)
y_pred = logreg.predict(X_test)
# Evaluation and accuracy
from sklearn.metrics import jaccard_similarity_score
print ('')
print ( 'Accuracy of the model in jaccard similarity score is = ' ,
jaccard_similarity_score(y_test, y_pred))

Выход :

Точность модели по шкале сходства жаккара = 0,8490230905861457.

Код: Использование матрицы неточностей для определения точности модели:




# Confusion matrix
from 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. А чтобы начать свое путешествие по машинному обучению, присоединяйтесь к курсу Машинное обучение - базовый уровень.

Рекомендуемые статьи
Страница :