Quadratische diskriminanzanalyse in r (schritt für schritt)
Die quadratische Diskriminanzanalyse ist eine Methode, die Sie verwenden können, wenn Sie über eine Reihe von Prädiktorvariablen verfügen und eine Antwortvariable in zwei oder mehr Klassen klassifizieren möchten. Sie gilt als nichtlineares Äquivalent der linearen Diskriminanzanalyse .
Dieses Tutorial bietet ein schrittweises Beispiel für die Durchführung einer quadratischen Diskriminanzanalyse in R.
Schritt 1: Laden Sie die erforderlichen Bibliotheken
Zuerst laden wir die notwendigen Bibliotheken für dieses Beispiel:
library (MASS)
library (ggplot2)
Schritt 2: Daten laden
Für dieses Beispiel verwenden wir den in R integrierten Iris- Datensatz. Der folgende Code zeigt, wie dieser Datensatz geladen und angezeigt wird:
#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 ...
Wir können sehen, dass der Datensatz insgesamt 5 Variablen und 150 Beobachtungen enthält.
Für dieses Beispiel erstellen wir ein quadratisches Diskriminanzanalysemodell, um die Art zu klassifizieren, zu der eine bestimmte Blume gehört.
Wir werden die folgenden Prädiktorvariablen im Modell verwenden:
- Kelchblattlänge
- Kelchblattbreite
- Blütenblattlänge
- Blütenblattbreite
Und wir werden sie verwenden, um die Antwortvariable „Species“ vorherzusagen, die die folgenden drei möglichen Klassen unterstützt:
- setosa
- versicolor
- Virginia
Schritt 3: Erstellen Sie Trainings- und Testbeispiele
Als Nächstes teilen wir den Datensatz in einen Trainingssatz zum Trainieren des Modells und einen Testsatz zum Testen des Modells auf:
#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, ]
Schritt 4: Passen Sie das QDA-Modell an
Als nächstes verwenden wir die Funktion qda() aus dem MASS- Paket, um das QDA-Modell an unsere Daten anzupassen:
#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
So interpretieren Sie die Modellergebnisse:
Gruppen-A-priori-Wahrscheinlichkeiten: Diese repräsentieren die Anteile jeder Art im Trainingssatz. Beispielsweise betrafen 35,8 % aller Beobachtungen im Trainingssatz die Art virginica .
Gruppendurchschnitte: Diese zeigen die Durchschnittswerte jeder Prädiktorvariablen für jede Art an.
Schritt 5: Verwenden Sie das Modell, um Vorhersagen zu treffen
Sobald wir das Modell mithilfe unserer Trainingsdaten angepasst haben, können wir damit Vorhersagen zu unseren Testdaten treffen:
#use QDA model to make predictions on test data predicted <- predict (model, test) names(predicted) [1] "class" "posterior" "x"
Dies gibt eine Liste mit zwei Variablen zurück:
- Klasse: die vorhergesagte Klasse
- Posterior: Die Posterior-Wahrscheinlichkeit , dass eine Beobachtung zu jeder Klasse gehört
Wir können jedes dieser Ergebnisse für die ersten sechs Beobachtungen in unserem Testdatensatz schnell visualisieren:
#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
Schritt 6: Bewerten Sie das Modell
Mit dem folgenden Code können wir sehen, für wie viel Prozent der Beobachtungen das QDA-Modell die Art korrekt vorhergesagt hat:
#find accuracy of model
mean(predicted$class==test$Species)
[1] 1
Es stellt sich heraus, dass das Modell die Art für 100 % der Beobachtungen in unserem Testdatensatz korrekt vorhergesagt hat.
In der realen Welt sagt ein QDA-Modell die Ergebnisse jeder Klasse selten richtig voraus, aber dieser Iris-Datensatz ist einfach so aufgebaut, dass Algorithmen für maschinelles Lernen tendenziell sehr gut funktionieren.
Den vollständigen R-Code, der in diesem Tutorial verwendet wird, finden Sie hier .