Kwadratische discriminantanalyse in r (stap voor stap)


Kwadratische discriminantanalyse is een methode die u kunt gebruiken als u over een reeks voorspellende variabelen beschikt en u een responsvariabele in twee of meer klassen wilt indelen. Het wordt beschouwd als het niet-lineaire equivalent van lineaire discriminantanalyse .

Deze tutorial biedt een stapsgewijs voorbeeld van het uitvoeren van kwadratische discriminantanalyse in R.

Stap 1: Laad de benodigde bibliotheken

Eerst laden we de benodigde bibliotheken voor dit voorbeeld:

 library (MASS)
library (ggplot2)

Stap 2: Gegevens laden

Voor dit voorbeeld gebruiken we de irisgegevensset die in R is ingebouwd. De volgende code laat zien hoe u deze gegevensset laadt en weergeeft:

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

We kunnen zien dat de dataset in totaal 5 variabelen en 150 observaties bevat.

Voor dit voorbeeld zullen we een kwadratisch discriminantanalysemodel bouwen om de soort te classificeren waartoe een bepaalde bloem behoort.

We zullen de volgende voorspellende variabelen in het model gebruiken:

  • Kelkbladlengte
  • Kelkbladbreedte
  • Bloemblaadje. Lengte
  • Bloemblaadje.Breedte

En we zullen ze gebruiken om de responsvariabele Species te voorspellen, die de volgende drie potentiële klassen ondersteunt:

  • setosa
  • veelkleurig
  • Virginia

Stap 3: Maak trainings- en testvoorbeelden

Vervolgens splitsen we de dataset op in een trainingsset om het model op te trainen en een testset om het model op te testen:

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

Stap 4: Pas het QDA-model aan

Vervolgens zullen we de functie qda() uit het MASS- pakket gebruiken om het QDA-model aan onze gegevens aan te passen:

 #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 

Zo interpreteert u de modelresultaten:

Groepsvoorafgaande kansen: deze vertegenwoordigen de verhoudingen van elke soort in de trainingsset. Zo had 35,8% van alle waarnemingen in de trainingsset betrekking op de soort virginica .

Groepsgemiddelden: deze geven de gemiddelde waarden weer van elke voorspellende variabele voor elke soort.

Stap 5: Gebruik het model om voorspellingen te doen

Zodra we het model hebben aangepast met behulp van onze trainingsgegevens, kunnen we het gebruiken om voorspellingen te doen op basis van onze testgegevens:

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

names(predicted)

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

Dit retourneert een lijst met twee variabelen:

We kunnen elk van deze resultaten snel visualiseren voor de eerste zes waarnemingen in onze testdataset:

 #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

Stap 6: Evalueer het model

We kunnen de volgende code gebruiken om te zien voor welk percentage waarnemingen het QDA-model de soort correct voorspelde:

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

[1] 1

Het blijkt dat het model de soort correct voorspelde voor 100% van de waarnemingen in onze testdataset.

In de echte wereld voorspelt een QDA-model zelden correct de resultaten van elke klasse, maar deze iris-dataset is eenvoudigweg zo opgebouwd dat machine learning-algoritmen de neiging hebben zeer goed te presteren.

De volledige R-code die in deze tutorial wordt gebruikt, vindt u hier .

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert