Meilleur projet de prédiction des maladies cardiaques en 2022
Publié: 2021-05-26Bienvenue dans ce didacticiel étape par étape de notre projet de prédiction des maladies cardiaques. Ici, vous allez créer un modèle d'apprentissage automatique qui prédit si un patient peut être diagnostiqué avec une maladie cardiaque ou non.
Vous devez être familiarisé avec les bases de l'apprentissage automatique et de l'analyse de données pour travailler sur ce projet. Ce projet nécessite que vous soyez familiarisé avec plusieurs algorithmes ML, notamment Random Forest, K-NN (K-plus proche voisin) et bien d'autres.
Nous effectuerons le traitement des données, le filtrage et testerons six algorithmes ML différents pour trouver celui qui offre les résultats optimaux pour notre ensemble de données. Commençons:
Table des matières
L'objectif du projet de prédiction des maladies cardiaques
L'objectif de notre projet de prédiction des maladies cardiaques est de déterminer si un patient doit être diagnostiqué avec une maladie cardiaque ou non, ce qui est un résultat binaire, donc :
Résultat positif = 1, le patient recevra un diagnostic de maladie cardiaque.
Résultat négatif = 0, le patient ne sera pas diagnostiqué avec une maladie cardiaque.
Nous devons trouver quel modèle de classification a la plus grande précision et identifier les corrélations dans nos données. Enfin, nous devons également déterminer quelles caractéristiques sont les plus influentes dans notre diagnostic de maladie cardiaque.
Caractéristiques
Nous utilisons les 13 caractéristiques suivantes (X) pour déterminer notre prédicteur (Y) :
- Âge.
- Sexe : 1 = Masculin, 0 = Féminin.
- (cp) type de douleur thoracique (4 valeurs – Ordinal), 1ère valeur : angine typique, 2ème valeur : angine atypique, 3ème valeur : douleur non angineuse, 4ème valeur : asymptomatique.
- (trestbps) tension artérielle au repos.
- (chol) cholestérol sérique.
- (Fbs) – glycémie à jeun > 120 mg/dl.
- (restecg) – résultats d'électrocardiographie au repos.
- (thalach) – fréquence cardiaque maximale atteinte.
- (exang) - angine induite par l'exercice.
- (oldpeak) - Dépression ST causée par l'exercice par rapport au repos.
- (pente) - la pente du segment ST d'exercice maximal.
- (ca) – le nombre de gros vaisseaux colorés par fluoroscopie.
- (thal) – fréquence cardiaque maximale atteinte (Ordinal), 3 = normal, 6 = défaut fixe, 7 = défaut réversible.
Étape 1 : Analyse des données
Nous allons d'abord examiner le jeu de données avec lequel nous travaillons en le convertissant dans un format plus simple et plus compréhensible. Cela nous aiderait à mieux utiliser les données.
importer numpy en tant que np
importer des pandas en tant que pd
importer matplotlib en tant que plt
importer seaborn en tant que sns
importer matplotlib.pyplot en tant que plt
filePath = '/Users/upgrad/Downloads/datasets-33180-43520-heart.csv'
données = pd.read_csv(filePath)
data.head(5)
âge | sexe | CP | trestbps | chol | fbs | restecg | thalakh | échange | vieux pic | pente | Californie | tal | cible | |
0 | 63 | 1 | 3 | 145 | 233 | 1 | 0 | 150 | 0 | 2.3 | 0 | 0 | 1 | 1 |
1 | 37 | 1 | 2 | 130 | 250 | 0 | 1 | 187 | 0 | 3.5 | 0 | 0 | 2 | 1 |
2 | 41 | 0 | 1 | 130 | 204 | 0 | 0 | 172 | 0 | 1.4 | 2 | 0 | 2 | 1 |
3 | 56 | 1 | 1 | 120 | 236 | 0 | 1 | 178 | 0 | 0,8 | 2 | 0 | 2 | 1 |
4 | 57 | 0 | 0 | 120 | 354 | 0 | 1 | 163 | 1 | 0,6 | 2 | 0 | 2 | 1 |
Tout comme le code ci-dessus nous a aidés à afficher nos données sous forme de tableau, nous utiliserons le code suivant pour un traitement ultérieur des données :
print(“(Lignes, colonnes): ” + str(data.shape))
données.colonnes
Le code ci-dessus affichera le nombre total de lignes et de colonnes et les noms de colonnes dans notre ensemble de données. Le nombre total de lignes et de colonnes dans nos données est respectivement de 303 et 14. Nous allons maintenant trouver le nombre de valeurs uniques pour chaque variable en utilisant la fonction suivante :
data.nunique(axe=0
De même, la fonction suivante résume la moyenne, le nombre, l'écart type, le minimum et le maximum des variables numériques :
data.describe()
Étape 2 : Conduite de l'EDA
Maintenant que nous avons terminé le traitement des données, nous pouvons effectuer une analyse exploratoire des données. Voici les principales tâches que nous effectuerons à cette étape de notre projet de prédiction des maladies cardiaques :
Trouver des corrélations
Nous allons créer une matrice de corrélation qui nous aide à voir les corrélations entre différentes variables :
corr = data.corr()
plt.subplots(figsize=(15,10))
sns.heatmap(corr, xticklabels=corr.columns, yticklabels=corr.columns, annot=True, cmap=sns.diverging_palette(220, 20, as_cmap=True))
sns.heatmap(corr, xticklabels=corr.columns,
yticklabels=corr.columns,
annot=Vrai,
cmap=sns.diverging_palette(220, 20, as_cmap=True))
Pour trouver des corrélations immédiates entre les caractéristiques, nous pouvons également créer des paires. Nous utiliserons de petits diagrammes de paires avec uniquement les variables continues pour approfondir les relations :
subData = data[['age','trestbps','chol','thalach','oldpeak']]
sns.pairplot(subData)
Utilisation du violon et des boîtes à moustaches
Avec Violin et Box plots, nous pouvons voir les statistiques de base et la distribution de nos données. Vous pouvez l'utiliser pour comparer la distribution d'une variable spécifique dans différentes catégories. Cela nous aidera également à identifier les valeurs aberrantes dans les données. Utilisez le code suivant :
plt.figure(figsize=(12,8))
sns.violinplot(x= 'target', y= 'oldpeak',hue=”sex”, inner='quartile',data= data )
plt.title ("Niveau de Thalach vs Maladie Cardiaque", fontsize=20)
plt.xlabel ("Cible de maladie cardiaque", taille de police = 16)
plt.ylabel("Thalach Level", fontsize=16)
Dans le premier Violin and Box plot, nous constatons que les patients positifs ont une médiane inférieure pour la dépression ST que les patients négatifs. Nous allons donc utiliser un graphique pour comparer le niveau de dépression ST et les maladies cardiaques.
plt.figure(figsize=(12,8))
sns.boxplot(x= 'cible', y= 'thalach',hue=”sexe”, data=data )
plt.title ("Niveau de dépression ST vs maladie cardiaque", taille de police = 20)
plt.xlabel("Cible de maladie cardiaque",fontsize=16)
plt.ylabel("Dépression ST induite par l'exercice par rapport au repos", fontsize=16)
Ici, les patients positifs avaient une médiane plus élevée pour le niveau de dépression ST par rapport aux patients négatifs.
Filtrage des données
Nous allons maintenant filtrer les données en fonction des patients cardiaques positifs et négatifs. Nous commencerons par filtrer les données par patients cardiaques positifs :
pos_data = données[données['cible']==1]
pos_data.describe()
De même, nous filtrerons les données en fonction des patients cardiaques négatifs :
pos_data = données[données['cible']==0]
pos_data.describe()
Étape 3 : Utiliser des algorithmes d'apprentissage automatique
Préparation
Ici, nous allons préparer les données pour la formation en attribuant les caractéristiques à X et la dernière colonne au prédicteur Y :
X = data.iloc[:, :-1].values
Y = data.iloc[:, -1}.values
Ensuite, nous diviserons les données en deux ensembles, ensemble d'apprentissage et ensemble de test :
depuis sklearn.model_selection importer train_test_split
x_train, x_test, y_train, y_test = train_test_split(X,y,test_size = 0.2, random_state = 1)
Enfin, nous normaliserons les données afin que leur distribution ait une moyenne de 0 :
depuis sklearn.preprocessing importer StandardScaler
sc = Échelle Standard()
x_train = sc.fit_transform(x_train)
x_test = sc.transform(x_test)
Formation du modèle
Dans cette section, nous utiliserons plusieurs algorithmes d'apprentissage automatique et trouverons celui qui offre la plus grande précision :
1er modèle : régression logistique
de sklearn.metrics importer classification_report
de sklearn.linear_model importer LogisticRegression
model1 = LogisticRegression(random_state=1) # obtenir une instance du modèle
model1.fit(x_train, y_train) # Entraîner/Ajuster le modèle
y_pred1 = model1.predict(x_test) # obtenir y prédictions
print(classification_report(y_test, y_pred1)) # précision de sortie
La précision de ce modèle était de 74 %.
2e modèle : K-NN (K-Nearest Neighbours)
de sklearn.metrics importer classification_report
de sklearn.voisins importer KNeighboursClassifier
model2 = KNeighboursClassifier() # obtenir une instance du modèle
model2.fit(x_train, y_train) # Entraîner/Ajuster le modèle
y_pred2 = model2.predict(x_test) # obtenir y prédictions
print(classification_report(y_test, y_pred2)) # précision de sortie
La précision de ce modèle était de 75 %.
3ème modèle : Support Vector Machine (SVM)
de sklearn.metrics importer classification_report
depuis sklearn.svm importer SVC
model3 = SVC(random_state=1) # obtenir une instance du modèle
model3.fit(x_train, y_train) # Entraîner/Ajuster le modèle
y_pred3 = model3.predict(x_test) # obtenir y prédictions
print(classification_report(y_test, y_pred3)) # précision de sortie
La précision de ce modèle était de 75 %.
4e modèle : classificateur naïf de Bayes
de sklearn.metrics importer classification_report
de sklearn.naive_bayes importer GaussianNB
model4 = GaussianNB() # obtenir une instance du modèle
model4.fit(x_train, y_train) # Entraîner/Ajuster le modèle
y_pred4 = model4.predict(x_test) # obtenir y prédictions
print(classification_report(y_test, y_pred4)) # précision de sortie
La précision de ce modèle était de 77 %.
5e modèle : Forêt aléatoire
de sklearn.metrics importer classification_report
de sklearn.ensemble importer RandomForestClassifier
model6 = RandomForestClassifier(random_state=1)# obtenir l'instance du modèle
model6.fit(x_train, y_train) # Entraîner/Ajuster le modèle
y_pred6 = model6.predict(x_test) # obtenir y prédictions
print(classification_report(y_test, y_pred6)) # précision de sortie
Ce modèle avait la précision la plus élevée de 80 %.
6ème modèle : XGBoost
depuis xgboost importer XGBClassifier
model7 = XGBClassifier(random_state=1)
modèle7.fit(x_train, y_train)
y_pred7 = model7.predict(x_test)
print(classification_report(y_test, y_pred7))
La précision de ce modèle était de 69 %.
Après avoir testé différents algorithmes ML, nous avons constaté que le meilleur était Random Forest, car il nous offrait une précision optimale de 80 %.
Gardez à l'esprit que tout pourcentage de précision supérieur à 80 % est trop beau pour être vrai, et cela peut être dû à un surajustement. C'est pourquoi 80% est le nombre optimal à atteindre.
Étape 4 : Trouver le score de fonctionnalité
Ici, nous trouverons le score de fonctionnalité, qui nous aide à prendre des décisions importantes en nous indiquant quelle fonctionnalité a été la plus utile pour notre modèle :
# obtenir de l'importance
importance = model6.feature_importances_
# résumer l'importance des fonctionnalités
pour i,v dans énumérer(importance):
print('Fonction : %0d, Score : %.5f' % (i,v))
Nous avons constaté que les quatre principales caractéristiques étaient le type de douleur thoracique (cp), la fréquence cardiaque maximale atteinte (thalach), le nombre de vaisseaux principaux (ca) et la dépression du segment ST causée par l'exercice par rapport au repos (oldpeak).
Conclusion
Félicitations, vous avez maintenant terminé avec succès le projet de prédiction des maladies cardiaques. Nous avions 13 caractéristiques, parmi lesquelles nous avons constaté que les plus importantes étaient le type de douleur thoracique et la fréquence cardiaque maximale atteinte.
Nous avons testé six algorithmes ML différents et avons constaté que l'algorithme le plus précis était Random Forest. Vous devriez tester ce modèle avec l'ensemble de test et voir si ce modèle fonctionne bien.
D'autre part, si vous souhaitez en savoir plus sur l'apprentissage automatique et l'IA, nous vous recommandons de consulter nos cours sur l'IA . Vous étudierez directement auprès d'experts de l'industrie et travaillerez sur des projets industriels qui vous permettront de tester vos connaissances. Consultez-les si vous êtes intéressé par une carrière dans l'apprentissage automatique et l'IA.
Si vous souhaitez en savoir plus sur l'apprentissage automatique, consultez le programme Executive PG d'IIIT-B & upGrad en apprentissage automatique et IA, conçu pour les professionnels en activité et offrant plus de 450 heures de formation rigoureuse, plus de 30 études de cas et missions, IIIT -B Statut d'anciens élèves, 5+ projets de synthèse pratiques et aide à l'emploi avec les meilleures entreprises.
Comment l'apprentissage automatique aide-t-il le secteur de la santé ?
Il existe aujourd'hui de nombreuses utilisations intéressantes de l'apprentissage automatique dans le secteur de la santé. Parmi tous, l'une de ses principales utilisations est la détection et le diagnostic des maladies. De la détection de maladies génétiques rares aux premiers stades du cancer, l'apprentissage automatique s'est avéré d'une grande aide à cet égard. Il existe de nombreuses autres utilisations, telles que la découverte de médicaments, le diagnostic par imagerie, la tenue de dossiers de santé intelligents, la médecine préventive comme la modification du comportement, la prévision des épidémies et des récidives de maladies, l'amélioration de la radiothérapie, la recherche clinique efficace et les essais de patients, etc.
Comment puis-je devenir un scientifique des données de santé ?
Étant donné que l'industrie de la santé est l'une des sources de données les plus massives au monde, la demande de spécialistes des données de santé devrait augmenter. La fusion des soins de santé et de la science des données est une voie prometteuse et fructueuse, et les aspirants scientifiques des données sur la santé peuvent tirer parti de cette situation. La science des données dans le domaine de la santé est un domaine relativement nouveau ; c'est un mélange de statistiques, de mathématiques, de bioinformatique, d'informatique et d'épidémiologie. Les bases et les compétences nécessaires pour devenir un scientifique des données sont les mêmes, mais vous vous concentrerez uniquement sur les données et les applications de santé. Une connaissance de la programmation informatique utilisant Python, R et SAS sera utile. Les meilleures universités mondiales proposent des programmes de troisième cycle spécialisés en science des données de santé.
Les médecins doivent-ils connaître la science des données ?
Avec l'IA et la science des données qui gagnent rapidement en popularité, ce ne sont pas que des mots à la mode dans le secteur de la santé. L'immense importance de ces technologies dans l'extraction d'informations cliniquement utiles à partir d'énormes ensembles de données encourage les médecins et les médecins à s'intéresser de nouveau à ces domaines. La connaissance de la science des données offre un avantage supplémentaire aux médecins, car ils peuvent diagnostiquer rapidement et avec précision les maladies rares à l'aide d'informations multiparamètres et d'énormes ensembles de données obtenus grâce à une surveillance continue. L'IA facilite le diagnostic grâce à des techniques efficaces de visualisation des données et les aide à apprécier l'importance statistique des études cliniques.