R'de i̇kinci dereceden diskriminant analizi (adım adım)
İkinci dereceden diskriminant analizi, bir dizi öngörücü değişkeniniz olduğunda ve bir yanıt değişkenini iki veya daha fazla sınıfa sınıflandırmak istediğinizde kullanabileceğiniz bir yöntemdir. Doğrusal diskriminant analizinin doğrusal olmayan eşdeğeri olarak kabul edilir.
Bu eğitimde R’de ikinci dereceden diskriminant analizinin nasıl gerçekleştirileceğine ilişkin adım adım bir örnek sunulmaktadır.
Adım 1: Gerekli Kitaplıkları Yükleyin
Öncelikle bu örnek için gerekli kütüphaneleri yükleyeceğiz:
library (MASS)
library (ggplot2)
2. Adım: Verileri yükleyin
Bu örnek için, R’de yerleşik olan iris veri kümesini kullanacağız. Aşağıdaki kod, bu veri kümesinin nasıl yüklenip görüntüleneceğini gösterir:
#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 ...
Veri setinin toplamda 5 değişken ve 150 gözlem içerdiğini görüyoruz.
Bu örnekte, belirli bir çiçeğin ait olduğu türleri sınıflandırmak için ikinci dereceden bir diskriminant analiz modeli oluşturacağız.
Modelde aşağıdaki tahmin değişkenlerini kullanacağız:
- Sepal uzunluğu
- Sepal.Genişlik
- Petal.Uzunluk
- Yaprak Genişliği
Bunları, aşağıdaki üç potansiyel sınıfı destekleyen Tür yanıt değişkenini tahmin etmek için kullanacağız:
- setosa
- çok renkli
- Virjinya
3. Adım: Eğitim ve test örnekleri oluşturun
Daha sonra veri setini, modeli eğitmek için bir eğitim setine ve modeli test etmek için bir test setine böleceğiz:
#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, ]
4. Adım: QDA modelini ayarlayın
Daha sonra, QDA modelini verilerimize uyarlamak için MASS paketindeki qda() fonksiyonunu kullanacağız:
#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
Model sonuçlarını nasıl yorumlayacağınız aşağıda açıklanmıştır:
Grup ön olasılıkları: Bunlar eğitim setindeki her türün oranlarını temsil eder. Örneğin, eğitim setindeki tüm gözlemlerin %35,8’i virginica türü içindi.
Grup ortalamaları: Bunlar, her tür için her yordayıcı değişkenin ortalama değerlerini gösterir.
Adım 5: Tahminlerde bulunmak için modeli kullanın
Eğitim verilerimizi kullanarak modeli yerleştirdikten sonra bunu test verilerimiz üzerinde tahminlerde bulunmak için kullanabiliriz:
#use QDA model to make predictions on test data predicted <- predict (model, test) names(predicted) [1] "class" "posterior" "x"
Bu, iki değişkenli bir liste döndürür:
- sınıf: tahmin edilen sınıf
- posterior: Bir gözlemin her bir sınıfa ait olmasının sonsal olasılığı
Test veri setimizdeki ilk altı gözlem için bu sonuçların her birini hızlı bir şekilde görselleştirebiliyoruz:
#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
Adım 6: Modeli değerlendirin
QDA modelinin gözlemlerin yüzde kaçının türleri doğru şekilde tahmin ettiğini görmek için aşağıdaki kodu kullanabiliriz:
#find accuracy of model
mean(predicted$class==test$Species)
[1] 1
Modelin, test veri setimizdeki gözlemlerin %100’ü için türleri doğru şekilde tahmin ettiği ortaya çıktı.
Gerçek dünyada, bir QDA modeli her sınıfın sonuçlarını nadiren doğru bir şekilde tahmin eder, ancak bu iris veri seti, makine öğrenimi algoritmalarının çok iyi performans gösterme eğiliminde olacağı şekilde basitçe oluşturulmuştur.
Bu eğitimde kullanılan R kodunun tamamını burada bulabilirsiniz.