Kwadratowa analiza dyskryminacyjna w r (krok po kroku)
Kwadratowa analiza dyskryminacyjna to metoda, której można użyć, gdy masz zestaw zmiennych predykcyjnych i chcesz sklasyfikować zmienną odpowiedzi na dwie lub więcej klas. Uważa się ją za nieliniowy odpowiednik liniowej analizy dyskryminacyjnej .
W tym samouczku przedstawiono krok po kroku przykład przeprowadzania kwadratowej analizy dyskryminacyjnej w języku R.
Krok 1: Załaduj niezbędne biblioteki
Najpierw załadujemy niezbędne biblioteki dla tego przykładu:
library (MASS)
library (ggplot2)
Krok 2: Załaduj dane
W tym przykładzie użyjemy zestawu danych iris wbudowanego w R. Poniższy kod pokazuje, jak załadować i wyświetlić ten zestaw danych:
#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 ...
Widzimy, że zbiór danych zawiera w sumie 5 zmiennych i 150 obserwacji.
Na potrzeby tego przykładu zbudujemy kwadratowy model analizy dyskryminacyjnej w celu sklasyfikowania gatunku, do którego należy dany kwiat.
W modelu wykorzystamy następujące zmienne predykcyjne:
- Długość rozdzielacza
- Szerokość oddzielna
- Płatek.Długość
- Płatek.Szerokość
Wykorzystamy je do przewidzenia zmiennej odpowiedzi Gatunek , która obsługuje następujące trzy potencjalne klasy:
- setosa
- wielokolorowy
- Wirginia
Krok 3: Utwórz próbki szkoleniowe i testowe
Następnie podzielimy zbiór danych na zbiór uczący, na którym będziemy trenować model, oraz zbiór testowy, na którym będziemy testować model:
#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, ]
Krok 4: Dostosuj model QDA
Następnie skorzystamy z funkcji qda() z pakietu MASS , aby dostosować model QDA do naszych danych:
#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
Oto jak interpretować wyniki modelu:
Prawdopodobieństwa a priori grupowe: reprezentują proporcje każdego gatunku w zbiorze uczącym. Na przykład 35,8% wszystkich obserwacji w zbiorze uczącym dotyczyło gatunku virginica .
Średnie grupowe: wyświetlają średnie wartości każdej zmiennej predykcyjnej dla każdego gatunku.
Krok 5: Użyj modelu do przewidywania
Po dopasowaniu modelu przy użyciu naszych danych treningowych możemy go użyć do przewidywania danych testowych:
#use QDA model to make predictions on test data predicted <- predict (model, test) names(predicted) [1] "class" "posterior" "x"
Zwraca to listę z dwiema zmiennymi:
- class: przewidywana klasa
- posterior: Prawdopodobieństwo późniejsze , że obserwacja należy do każdej klasy
Możemy szybko zwizualizować każdy z tych wyników dla pierwszych sześciu obserwacji w naszym testowym zbiorze danych:
#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
Krok 6: Oceń model
Możemy użyć poniższego kodu, aby sprawdzić, dla jakiego procentu obserwacji model QDA poprawnie przewidział gatunek:
#find accuracy of model
mean(predicted$class==test$Species)
[1] 1
Okazuje się, że model poprawnie przewidział gatunek dla 100% obserwacji w naszym testowym zbiorze danych.
W prawdziwym świecie model QDA rzadko poprawnie przewiduje wyniki każdej klasy, ale ten zbiór danych tęczówki jest po prostu skonstruowany w taki sposób, że algorytmy uczenia maszynowego zwykle działają bardzo dobrze.
Pełny kod R użyty w tym samouczku znajdziesz tutaj .