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 :

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 .

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *