Analyse du célèbre ensemble de données MNIST, qui comprend 70 000 images de chiffres manuscrits allant de 0 à 9. L’objectif principal est de développer des modèles de machine learning capables de classer ces chiffres avec précision.
L’analyse débute par une inspection du jeu de données, incluant la visualisation de plusieurs exemples de chiffres. Chaque chiffre est numérisé en une image de 28x28 pixels, où chaque pixel possède une valeur d’intensité variant de 0 à 255.
Nous divisons le jeu de données en ensembles d’entraînement et de test, et nous mélangeons les données d’entraînement pour assurer l'aléatoire. Par exemple, voici comment nous effectuons le mélange des données :
shuffle_index = np.random.permutation(60000)
X_train, y_train = X_train.loc[shuffle_index], y_train.loc[shuffle_index]
De plus, nous créons des vecteurs cibles pour identifier le chiffre 5, ainsi que des vecteurs pour tous les chiffres (0 à 9).
Nous entraînons un classificateur de descente de gradient stochastique (SGD) pour classer si un chiffre est un 5 ou non. Par exemple, voici comment nous entraînons ce classificateur :
sgd_clf = SGDClassifier(random_state=42)
sgd_clf.fit(X_train.values, y_train_5.values)
Le classificateur atteint un score de précision d’environ 96,4 % en utilisant une validation croisée. Nous évaluons également un classificateur "Jamais 5", qui prédit toujours que le chiffre n’est pas un 5, atteignant un score de précision d’environ 91 %.
Nous évaluons le classificateur SGD entraîné en utilisant des métriques telles que la précision, le rappel et la matrice de confusion. Par exemple, voici comment nous obtenons la matrice de confusion :
y_train_pred = cross_val_predict(sgd_clf, X_train, y_train_5, cv=3)
conf_matrix = confusion_matrix(y_train_5, y_train_pred)
print(conf_matrix)
Le score de précision est d’environ 84,9 % et le score de rappel est d’environ 77,5 %. La matrice de confusion fournit un aperçu de la performance du classificateur dans différentes classes.
Nous mettons en œuvre un classificateur multiclasse en utilisant le classificateur SGD, la stratégie "Un-contre-Un" (OvO) et le classificateur de forêt aléatoire. Par exemple, voici comment nous entraînons le classificateur OvO :
ovo_clf = OneVsOneClassifier(SGDClassifier(random_state=42))
ovo_clf.fit(X_train.values, y_train)
Chaque classificateur est entraîné et évalué en utilisant une validation croisée. Le classificateur de forêt aléatoire atteint le meilleur score de précision d’environ 96,9 %.
Pour conclure, une série de modèles de machine learning ont été formés et évalués sur l’ensemble de données MNIST pour la tâche de classification des chiffres. Le modèle de forêt aléatoire s’est révélé être le plus performant. Des travaux futurs pourraient se concentrer sur l’optimisation et le réglage fin des modèles pour améliorer encore leur précision et efficacité.
Les données ont été importées à partir du fichier train.csv
et les 10 premières lignes ont été affichées pour une première exploration.
print(train.head(10))
Les variables suivantes ont été analysées :
- Survived
- PClass
- Name
- Sex
- Age
- SibSp
- Parch
- Ticket
- Fare
- Cabin
- Embarked
- Survived
- Signification : Indique si un passager a survécu (1) ou non (0) au naufrage du Titanic.
- Type : Variable binaire ou catégorielle.
- Valeurs manquantes : Aucune.
- PClass
- Signification : Indique la classe du billet du passager (1ère, 2ème ou 3ème classe), un proxy pour la classe socio-économique.
- Type : Variable ordonnée ou catégorielle.
- Valeurs manquantes : Aucune.
- Name
- Signification : Nom complet du passager, incluant le titre et le nom de famille.
- Type : Variable textuelle ou nominale.
- Valeurs manquantes : Aucune.
- Sex
- Signification : Sexe du passager (male ou female).
- Type : Variable binaire ou catégorielle.
- Valeurs manquantes : Aucune.
- Age
- Signification : Âge du passager en années.
- Type : Variable numérique ou continue.
- Valeurs manquantes : 177 valeurs manquantes (environ 20% des données).
- SibSp
- Signification : Nombre de frères, sœurs ou conjoints à bord.
- Type : Variable numérique ou discrète.
- Valeurs manquantes : Aucune.
- Parch
- Signification : Nombre de parents ou d’enfants à bord.
- Type : Variable numérique ou discrète.
- Valeurs manquantes : Aucune.
- Ticket
- Signification : Numéro du billet du passager.
- Type : Variable textuelle ou nominale.
- Valeurs manquantes : Aucune.
- Fare
- Signification : Prix du billet du passager en livres sterling.
- Type : Variable numérique ou continue.
- Valeurs manquantes : 1 valeur manquante (moins de 1% des données).
- Cabin
- Signification : Numéro de cabine du passager.
- Type : Variable textuelle ou nominale.
- Valeurs manquantes : 687 valeurs manquantes (environ 77% des données).
- Embarked
- Signification : Port d’embarquement du passager (C = Cherbourg, Q = Queenstown, S = Southampton).
- Type : Variable catégorielle ou nominale.
- Valeurs manquantes : 2 valeurs manquantes (moins de 0.22% des données).
Les variables explicatives utilisées pour le premier modèle sont 'Fare', 'SibSp' et 'Parch'.
target = train[['Fare', 'SibSp', 'Parch']]
Les coefficients de la régression logistique permettent d’interpréter l’importance des variables explicatives dans le modèle. Plus un coefficient est grand en valeur absolue, plus la variable correspondante est importante dans le modèle. Les variables explicatives les plus importantes dans le modèle sont les variables Pclass 1 et Pclass 3, qui sont les variables indicatrices de la variable Pclass. Ces variables sont les plus importantes car elles ont les coefficients les plus grands en valeur absolue. Elles sont donc les variables les plus discriminantes pour prédire la survie des passagers du Titanic. Les variables SibSp, Parch et Fare sont moins importantes, car elles ont des coefficients plus petits en valeur absolue. Elles sont donc moins discriminantes pour prédire la survie des passagers du Titanic.
Une validation croisée à 5 plis a été utilisée pour évaluer la performance des modèles.
Un modèle de régression logistique a été utilisé comme premier modèle. Le score de validation croisée obtenu est de 0.676.
-
Ajout de la variable 'Pclass' : En ajoutant la variable 'Pclass' au modèle, le score de validation croisée a augmenté à 0.681. Les coefficients de la régression logistique ont montré que les variables indicatrices de 'Pclass' sont importantes pour prédire la survie.
-
Ajout des variables 'Sex' et 'Age' : En ajoutant les variables 'Sex' et 'Age' au modèle, le score de validation croisée a augmenté à 0.820. Les coefficients ont montré que 'Sex' est une variable très importante dans la prédiction de la survie.
-
Ajout de la variable 'is child' : En ajoutant la variable 'is child' (indicatrice si le passager est un enfant) au modèle, le score de validation croisée est resté à 0.820.
-
Random Forest : Un classifieur Random Forest a été utilisé pour construire un modèle alternatif. Le score obtenu était supérieur à celui de la régression logistique.
-
Gradient Boosting Classifier : Un Gradient Boosting Classifier a également été utilisé pour construire un modèle alternatif. Le score obtenu était de 0.837.
-
Support Vector Machine (SVM) : Les SVM sont des modèles d’apprentissage supervisé utilisés pour la classification et la régression. Ils cherchent à trouver un hyperplan optimal qui sépare les données en classes. Les SVM sont efficaces pour les problèmes de classification binaire et peuvent également être étendus à la classification multiclasse. Ils sont sensibles au choix du noyau (linéaire, polynomial, RBF, etc.). Un SVM avec un noyau linéaire a été utilisé pour construire un autre modèle alternatif. Le score obtenu était de 0.803.
Boosting (Renforcement) : Le boosting est une technique d’apprentissage automatique qui combine plusieurs modèles faibles (par exemple, des arbres de décision peu profonds) pour créer un modèle plus puissant. Il fonctionne en ajustant itérativement les poids des observations mal classées, ce qui permet d’améliorer la précision du modèle global. Les algorithmes de boosting populaires incluent AdaBoost, Gradient Boosting et XGBoost. Des nouvelles variables 'Title' (titre dans le nom) et 'Cabin' ont été créées à partir des données existantes. En les ajoutant au modèle, le score de validation croisée a augmenté à 0.820.
À partir de l’analyse des variables et de la modélisation des données du Titanic, plusieurs conclusions peuvent être tirées :
Les variables 'Sex' et 'Pclass' sont très importantes pour prédire la survie des passagers.
L’ajout de nouvelles variables telles que 'Title' et 'Cabin' peut améliorer la performance du modèle.
Les modèles de type Gradient Boosting Classifier ont donné les meilleurs scores de prédiction.
Des efforts supplémentaires pourraient être faits pour explorer d’autres variables potentiellement importantes et pour affiner les modèles existants afin d’obtenir de meilleures performances de prédiction.