ML | Predicción de enfermedades cardíacas mediante regresión logística.

La Organización Mundial de la Salud ha estimado que cuatro de cada cinco muertes por enfermedades cardiovasculares (ECV) se deben a ataques cardíacos. Toda esta investigación tiene la intención de identificar la proporción de pacientes que tienen una buena probabilidad de verse afectados por ECV y también de predecir el riesgo general utilizando la regresión logística.

¿Qué es la regresión logística?  
La regresión logística es una técnica estadística y de aprendizaje automático que clasifica los registros de un conjunto de datos en función de los valores de los campos de entrada. Predice una variable dependiente basada en uno o más conjuntos de variables independientes para predecir resultados. Se puede utilizar tanto para la clasificación binaria como para la clasificación multiclase. Para saber más al respecto, haz clic aquí. 

Código: Cargando las bibliotecas.

Python3

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

Preparación de datos: 
el conjunto de datos está disponible públicamente en el sitio web de Kaggle y proviene de un estudio cardiovascular en curso en los residentes de la ciudad de Framingham, Massachusetts. El objetivo de la clasificación es predecir si el paciente tiene un riesgo de 10 años de enfermedad coronaria (CHD) en el futuro. El conjunto de datos proporciona la información de los pacientes. Incluye más de 4.000 registros y 15 atributos .
  
Cargando el conjunto de datos. 

Python3

# 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())

Producción : 

    Sex_male  age  currentSmoker  ...  heartRate  glucose  TenYearCHD
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 rows x 15 columns] (3751, 15)
0    3179
1     572
Name: TenYearCHD, dtype: int64

Código: CHD de diez años Registro de todos los pacientes disponibles en el conjunto de datos:

Python3

# counting no. of patients affected with CHD
plt.figure(figsize = (7, 5))
sn.countplot(x ='TenYearCHD', data = disease_df,
             palette ="BuGn_r" )
plt.show()

Salida: Pantalla gráfica: 
 

Código: Contando el número de pacientes afectados por CHD donde (0= No Afectado; 1= Afectado) : 
 

Python3

laste = disease_df['TenYearCHD'].plot()
plt.show(laste)

Salida: Visualización gráfica: 
 

Código: Conjuntos de entrenamiento y prueba: División de datos | Normalización del conjunto de datos 

Python3

X = np.asarray(disease_df[['age', 'Sex_male', 'cigsPerDay',
                           'totChol', 'sysBP', 'glucose']])
y = np.asarray(disease_df['TenYearCHD'])
 
# normalization of the dataset
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)

Producción : 

Train Set :
(2625, 6) (2625, )

Test Set : 
(1126, 6) (1126, )

Código: Modelado del Dataset | Evaluación y precisión: 

Python3

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))

Producción : 

Accuracy of the model in jaccard similarity score is = 0.8490230905861457

Código: uso de la array de confusión para encontrar la precisión del modelo: 

Python3

# 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 .

Producción : 

The details for confusion matrix is =
              precision    recall  f1-score   support

           0       0.85      0.99      0.92       951
           1       0.61      0.08      0.14       175

    accuracy                           0.85      1126
   macro avg       0.73      0.54      0.53      1126
weighted avg       0.82      0.85      0.80      1126

Array de confusión : 
 

Publicación traducida automáticamente

Artículo escrito por parna_28 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *