Analyse discriminante quadratique dans R (étape par étape)
L’analyse discriminante quadratique est une méthode que vous pouvez utiliser lorsque vous disposez d’un ensemble de variables prédictives et que vous souhaitez classer une variable de réponse en deux classes ou plus. Elle est considérée comme l’équivalent non linéaire de l’analyse discriminante linéaire .
Ce didacticiel fournit un exemple étape par étape de la façon d’effectuer une analyse discriminante quadratique dans R.
Étape 1 : Charger les bibliothèques nécessaires
Tout d’abord, nous allons charger les bibliothèques nécessaires pour cet exemple :
library(MASS)
library(ggplot2)
Étape 2 : Charger les données
Pour cet exemple, nous utiliserons l’ensemble de données iris intégré dans R. Le code suivant montre comment charger et afficher cet ensemble de données :
#attach iris dataset to make it easy to work with attach(iris) #view structure of dataset str(iris) 'data.frame': 150 obs. of 5 variables: $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ... $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ... $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ... $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ... $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 ...
Nous pouvons voir que l’ensemble de données contient 5 variables et 150 observations au total.
Pour cet exemple, nous allons construire un modèle d’analyse discriminante quadratique pour classer les espèces auxquelles appartient une fleur donnée.
Nous utiliserons les variables prédictives suivantes dans le modèle :
- Sépale.longueur
- Sépale.Largeur
- Pétale.Longueur
- Pétale.Largeur
Et nous les utiliserons pour prédire la variable de réponse Species , qui prend en charge les trois classes potentielles suivantes :
- sétosa
- versicolor
- virginie
Étape 3 : Créer des échantillons de formation et de test
Ensuite, nous diviserons l’ensemble de données en un ensemble d’entraînement sur lequel entraîner le modèle et un ensemble de test sur lequel tester le modèle :
#make this example reproducible set.seed(1) #Use 70% of dataset as training set and remaining 30% as testing set sample <- sample(c(TRUE, FALSE), nrow(iris), replace=TRUE, prob=c(0.7,0.3)) train <- iris[sample, ] test <- iris[!sample, ]
Étape 4 : Ajuster le modèle QDA
Ensuite, nous utiliserons la fonction qda() du package MASS pour adapter le modèle QDA à nos données :
#fit QDA model model <- qda(Species~., data=train) #view model output model Call: qda(Species ~ ., data = train) Prior probabilities of groups: setosa versicolor virginica 0.3207547 0.3207547 0.3584906 Group means: Sepal.Length Sepal.Width Petal.Length Petal.Width setosa 4.982353 3.411765 1.482353 0.2411765 versicolor 5.994118 2.794118 4.358824 1.3676471 virginica 6.636842 2.973684 5.592105 2.0552632
Voici comment interpréter les résultats du modèle :
Probabilités antérieures de groupe : celles-ci représentent les proportions de chaque espèce dans l’ensemble d’entraînement. Par exemple, 35,8 % de toutes les observations de l’ensemble d’entraînement concernaient l’espèce virginica .
Moyennes de groupe : elles affichent les valeurs moyennes de chaque variable prédictive pour chaque espèce.
Étape 5 : Utiliser le modèle pour faire des prédictions
Une fois que nous avons ajusté le modèle à l’aide de nos données d’entraînement, nous pouvons l’utiliser pour faire des prédictions sur nos données de test :
#use QDA model to make predictions on test data predicted <- predict(model, test) names(predicted) [1] "class" "posterior" "x"
Cela renvoie une liste avec deux variables :
- class : la classe prédite
- postérieur : Laprobabilité a posteriori qu’une observation appartienne à chaque classe
Nous pouvons visualiser rapidement chacun de ces résultats pour les six premières observations de notre ensemble de données de test :
#view predicted class for first six observations in test set head(predicted$class) [1] setosa setosa setosa setosa setosa setosa Levels: setosa versicolor virginica #view posterior probabilities for first six observations in test set head(predicted$posterior) setosa versicolor virginica 4 1 7.224770e-20 1.642236e-29 6 1 6.209196e-26 8.550911e-38 7 1 1.248337e-21 8.132700e-32 15 1 2.319705e-35 5.094803e-50 17 1 1.396840e-29 9.586504e-43 18 1 7.581165e-25 8.611321e-37
Étape 6 : évaluer le modèle
Nous pouvons utiliser le code suivant pour voir pour quel pourcentage d’observations le modèle QDA a correctement prédit l’espèce :
#find accuracy of model
mean(predicted$class==test$Species)
[1] 1
Il s’avère que le modèle a correctement prédit l’espèce pour 100 % des observations de notre ensemble de données de test.
Dans le monde réel, un modèle QDA prédit rarement correctement les résultats de chaque classe, mais cet ensemble de données sur l’iris est simplement construit de manière à ce que les algorithmes d’apprentissage automatique aient tendance à très bien fonctionner.
Vous pouvez trouver le code R complet utilisé dans ce tutoriel ici .