Квадратичний дискримінантний аналіз в r (покроково)


Квадратичний дискримінантний аналіз — це метод, який можна використовувати, якщо у вас є набір змінних-прогнозів і ви хочете класифікувати змінну відповіді на два або більше класів. Він вважається нелінійним еквівалентом лінійного дискримінантного аналізу .

Цей підручник надає покроковий приклад того, як виконувати квадратичний дискримінантний аналіз у R.

Крок 1: Завантажте необхідні бібліотеки

Спочатку ми завантажимо необхідні бібліотеки для цього прикладу:

 library (MASS)
library (ggplot2)

Крок 2. Завантажте дані

У цьому прикладі ми будемо використовувати набір даних райдужної оболонки ока, вбудований у R. Наступний код показує, як завантажити та відобразити цей набір даних:

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

Ми бачимо, що набір даних містить 5 змінних і загалом 150 спостережень.

Для цього прикладу ми створимо модель квадратичного дискримінантного аналізу, щоб класифікувати види, до яких належить дана квітка.

У моделі ми будемо використовувати наступні змінні предиктора:

  • Чашолисток.довж
  • Чашолисток.Шир
  • Пелюстка. Довжина
  • Пелюстка. Ширина

І ми використаємо їх, щоб передбачити змінну відповіді Species , яка підтримує такі три потенційні класи:

  • сетоза
  • лишай
  • Вірджинія

Крок 3: Створення навчальних і тестових зразків

Далі ми розділимо набір даних на навчальний набір для навчання моделі та тестовий набір для перевірки моделі:

 #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: Налаштуйте модель QDA

Далі ми використаємо функцію qda() з пакету MASS , щоб адаптувати модель QDA до наших даних:

 #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 

Ось як інтерпретувати результати моделі:

Групові попередні ймовірності: вони представляють пропорції кожного виду в навчальному наборі. Наприклад, 35,8% усіх спостережень у навчальному наборі були для виду virginica .

Середні значення групи: вони відображають середні значення кожної змінної предиктора для кожного виду.

Крок 5. Використовуйте модель для прогнозування

Після того, як ми підібрали модель, використовуючи наші навчальні дані, ми можемо використовувати її для прогнозування наших тестових даних:

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

names(predicted)

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

Це повертає список із двома змінними:

Ми можемо швидко візуалізувати кожен із цих результатів для перших шести спостережень у нашому тестовому наборі даних:

 #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

Крок 6: Оцініть модель

Ми можемо використати наступний код, щоб побачити, для якого відсотка спостережень модель QDA правильно передбачила вид:

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

[1] 1

Виявилося, що модель правильно передбачила вид для 100% спостережень у нашому тестовому наборі даних.

У реальному світі модель QDA рідко правильно прогнозує результати кожного класу, але цей набір даних райдужної оболонки просто побудований таким чином, що алгоритми машинного навчання, як правило, працюють дуже добре.

Ви можете знайти повний код R, використаний у цьому посібнику, тут .

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *