Квадратичный дискриминантный анализ в R (шаг за шагом)


Квадратичный дискриминантный анализ — это метод, который вы можете использовать, когда у вас есть набор переменных-предикторов, и вы хотите классифицировать переменную ответа по двум или более классам. Он считается нелинейным эквивалентом линейного дискриминантного анализа .

В этом руководстве представлен пошаговый пример выполнения квадратичного дискриминантного анализа в R.

Шаг 1: Загрузите необходимые библиотеки

Во-первых, мы загрузим необходимые библиотеки для этого примера:

library (MASS)
library (ggplot2)

Шаг 2: Загрузите данные

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

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.