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