Analisi discriminante quadratica in r (passo dopo passo)


L’analisi discriminante quadratica è un metodo che è possibile utilizzare quando si dispone di un insieme di variabili predittive e si desidera classificare una variabile di risposta in due o più classi. È considerato l’equivalente non lineare dell’analisi discriminante lineare .

Questo tutorial fornisce un esempio passo passo di come eseguire l’analisi discriminante quadratica in R.

Passaggio 1: caricare le librerie necessarie

Innanzitutto, caricheremo le librerie necessarie per questo esempio:

 library (MASS)
library (ggplot2)

Passaggio 2: caricare i dati

Per questo esempio, utilizzeremo il set di dati dell’iride integrato in R. Il codice seguente mostra come caricare e visualizzare questo set di dati:

 #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 ...

Possiamo vedere che il set di dati contiene 5 variabili e 150 osservazioni in totale.

Per questo esempio, costruiremo un modello di analisi discriminante quadratica per classificare la specie a cui appartiene un dato fiore.

Utilizzeremo le seguenti variabili predittive nel modello:

  • Lunghezza.sepalo
  • Sepalo.Larghezza
  • Petalo.Lunghezza
  • Petalo.Larghezza

E li useremo per prevedere la variabile di risposta Specie , che supporta le seguenti tre classi potenziali:

  • setosa
  • versicolor
  • Virginia

Passaggio 3: creare campioni di formazione e test

Successivamente, divideremo il set di dati in un set di training su cui addestrare il modello e un set di test su cui testare il modello:

 #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, ] 

Passaggio 4: modificare il modello QDA

Successivamente, utilizzeremo la funzione qda() del pacchetto MASS per adattare il modello QDA ai nostri dati:

 #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 

Ecco come interpretare i risultati del modello:

Probabilità a priori del gruppo: rappresentano le proporzioni di ciascuna specie nel set di addestramento. Ad esempio, il 35,8% di tutte le osservazioni nel training set riguardavano la specie virginica .

Medie di gruppo: mostrano i valori medi di ciascuna variabile predittrice per ciascuna specie.

Passaggio 5: utilizzare il modello per fare previsioni

Una volta adattato il modello utilizzando i nostri dati di addestramento, possiamo utilizzarlo per fare previsioni sui nostri dati di test:

 #use QDA model to make predictions on test data
predicted <- predict (model, test)

names(predicted)

[1] "class" "posterior" "x"   

Ciò restituisce una lista con due variabili:

Possiamo visualizzare rapidamente ciascuno di questi risultati per le prime sei osservazioni nel nostro set di dati di 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

Passaggio 6: valutare il modello

Possiamo usare il seguente codice per vedere per quale percentuale di osservazioni il modello QDA ha predetto correttamente la specie:

 #find accuracy of model
mean(predicted$class==test$Species)

[1] 1

Si scopre che il modello ha predetto correttamente la specie per il 100% delle osservazioni nel nostro set di dati di test.

Nel mondo reale, un modello QDA raramente prevede correttamente i risultati di ciascuna classe, ma questo set di dati dell’iride è semplicemente costruito in modo tale che gli algoritmi di apprendimento automatico tendono a funzionare molto bene.

Puoi trovare il codice R completo utilizzato in questo tutorial qui .

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *