Квадратичный дискриминантный анализ в 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 наблюдений.

В этом примере мы построим модель квадратичного дискриминантного анализа для классификации видов, к которым принадлежит данный цветок.

В модели мы будем использовать следующие переменные-предикторы:

  • Длина чашелистика
  • Чашелистик.Ширина
  • Лепесток.Длина
  • Лепесток.Ширина

И мы будем использовать их для прогнозирования переменной ответа вида , которая поддерживает следующие три потенциальных класса:

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

Шаг 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, используемый в этом уроке, можно найти здесь .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *