Ce projet vise à analyser les signes vitaux humains pour prédire le risque médical (faible ou élevé) à l'aide de 3 Models réseau de neurones artificiel entraîné sur un jeu de données biométriques basé sur une classification bianire le Bute est de choisir le model avec les meilleures performances
Ce dépôt contient :
- Le notebook Jupyter développé sous Google Colab puis migré dans VS Code les fichier normaliser et dataset sont dans google drive
Créer un modèle de Deep Learning (DNN) pour prédire la variable Risk_Category (Low Risk ou High Risk) à partir de 14 données biométriques
Colonne | Description
0. Heart_Rate | Fréquence cardiaque : nombre de battements de cœur par minute. Normal : entre 60 et 100 bpm chez l'adulte.
- Respiratory_Rate | Fréquence respiratoire : nombre de respirations par minute. Normal : 12–20 pour un adulte.
- Body Temperature | Température corporelle en °C. Normal : environ 36.5–37.5°C. Trop basse = hypothermie, trop haute = fièvre.
- Oxygen_Saturation | Saturation en oxygène du sang (SpO₂) en %. Normal > 95%. En dessous = possible problème respiratoire.
- Systolic_Blood_Pressure | Tension artérielle systolique (le chiffre du haut). Pression lorsque le cœur se contracte. Normal ~120 mmHg.
- Diastolic_Blood_Pressure | Tension diastolique (le chiffre du bas). Pression quand le cœur est au repos. Normal ~80 mmHg.
- Age | Âge de la personne. Peut influencer tous les autres paramètres (ex : un senior aura des risques différents).
- Gender | Sexe de la personne (Male, Female, etc.). Peut jouer sur certains indicateurs médicaux.
- Weight | Poids en kg. Important pour le calcul de l’IMC (Indice de Masse Corporelle).
- Height | Taille en mètres. Utilisée avec le poids pour calculer l’IMC.
- Derived_HRV | Variabilité de la fréquence cardiaque (HRV) : indicateur de stress, de fatigue ou de bon état de santé cardiovasculaire. Plus c’est élevé, mieux c’est (en général).
- Derived_Pulse_Pressure | Pression pulsée = Systolique - Diastolique. Un indicateur de rigidité artérielle ou de problème cardiaque potentiel.
- Derived_BMI | Indice de masse corporelle : poids / (taille²). Permet de savoir si la personne est en sous-poids, normal, en surpoids ou obèse.
- Derived_MAP | Pression artérielle moyenne (MAP) : reflète la perfusion sanguine des organes. Calcul : (2*diastolique + systolique) /3
- Risk_Category | Catégorie de risque : High ou Low. Étiquette finale pour la classification binaire (1 = High Risk, 0 = Low Risk).
-
Chargement et exploration du dataset
human_vital_signs_dataset_2024.csv -
Nettoyage : suppression des colonnes inutiles (
Patient ID,Timestamp) -
Encodage : transformation de
Genderen valeurs numériques (Male → 1, Female → 0) -
Mélange du dataset pour éviter tout biais d’ordre
-
Séparation en 3 fichiers :
train.csv,val.csv,test.csv -
Normalisation des données avec
StandardScaler(sklearn)- Enregistrement du scaler dans un fichier
.pkl - Sauvegarde des fichiers normalisés :
train_normalized.csv,val_normalized.csv,test_normalized.csv
- Enregistrement du scaler dans un fichier
-
Construction du modèle DNN avec TensorFlow/Keras : nombre de couche cachées : 5 nombre de noeurones par couche : entré : 14 paramètre normalisé couche1 couche2 couche3 couche4 couche5 couche 6 (sortie soit 0 soit 1)
- les couches 1-5 Dense avec
ReLU - Couches
Dropoutpour éviter le surapprentissage - Dernière couche en
sigmoidpour une sortie binaire
- les couches 1-5 Dense avec
-
Compilation du modèle :
- Optimiseur : Adam
- Fonction de perte : Binary Crossentropy
- Métrique : Accuracy
-
Nombre d’épochs :
20 -
Batch size :
32 -
Données d'entraînement :
train_normalized.csv -
taille de données d'entrainement : 80% ( exactement 160016 echontillons)
-
Données de test :
test_normalized.csv-taille de données de test : 10% (exactement 20002) -
Données de Validation :
val_normalized.csv-taille de données de validation : 10% --> les valeurs ici seront utilisé pour les test de API au moment du sign up on prend les valeur du poid , taille , age et gender dici (exactement 20002)
Architecture 1 : 14 - 32 - 16 - 8 - 8 - 4 - 1 (Dropout 0.3 sur les couches 32 et 16) • Forme : réseau profond avec décroissance progressive des dimensions, permettant une hiérarchie d’abstractions successives. • Dropout : appliqué sur les couches 32 et 16 avec un taux de 0.3. • Avantage : capacité d’apprentissage élevée tout en restant régularisé grâce au dropout. Justification : La séquence de taille décroissante (32 → 4) favorise l’apprentissage de représentations de plus en plus compactes. Le taux de 0.3 permet de casser les coadaptations sans trop réduire la capacité du modèle.
Architecture 2 : 14 - 32 - 16 - 8 - 4 - 1 (Dropout 0.4 sur les couches 32 et 16 ) • Forme : plus compacte que la première, sans redondance de couche 8. • Dropout : 0.4 sur les couches 32 et 16, renforçant l’effet de régularisation. • Avantage : structure plus légère avec une régularisation plus agressive. Justification : Le taux plus élevé de dropout permet de compenser la perte de capacité causée par la suppression d’une couche, tout en maintenant la profondeur suffisante pour apprendre des patterns complexes.
Architecture 3 : 14 - 16 - 12 -8 - 4 - 1 (Dropout 0.29 sur les couches 16 et 12) • Forme : architecture simple, peu profonde, adaptée à des données peu bruitées ou moins complexes. • Dropout : 0.19 appliqué sur les couches 16 et 12. • Avantage : moins coûteuse en calcul, meilleure généralisation si les données sont peu redondantes. Justification ::En réduisant la taille du réseau, on limite naturellement l’overfitting. Le dropout complète cette stratégie pour forcer le réseau à apprendre des représentations robustes.
noublié pas d'activer le GPU sur google collab