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.

Yorum ekle

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir