Введение в квадратичный дискриминантный анализ
Когда у нас есть набор переменных-предикторов и мы хотим классифицировать переменную отклика в один из двух классов, мы обычно используем логистическую регрессию .
Однако, когда переменная ответа имеет более двух возможных классов, мы обычно используем линейный дискриминантный анализ , часто называемый LDA.
LDA предполагает, что (1) наблюдения в каждом классе нормально распределены и (2) наблюдения в каждом классе имеют одну и ту же ковариационную матрицу. Используя эти предположения, LDA затем находит следующие значения:
- μ k : Среднее значение всех обучающих наблюдений k- го класса.
- σ 2 : Средневзвешенное значение выборочных дисперсий для каждого из k классов.
- π k : доля обучающих наблюдений, принадлежащих k- му классу.
Затем LDA подставляет эти числа в следующую формулу и присваивает каждому наблюдению X = x класс, для которого формула дает наибольшее значение:
d k (x) = x * (μ k /σ 2 ) – (μ k 2 /2σ 2 ) + log(π k )
В названии LDA присутствует линейное , поскольку значение, полученное вышеуказанной функцией, получается в результате линейной функции от x.
Расширением линейного дискриминантного анализа является квадратичный дискриминантный анализ , часто называемый QDA.
Этот метод аналогичен LDA и также предполагает, что наблюдения каждого класса нормально распределены, но не предполагает, что каждый класс имеет одну и ту же ковариационную матрицу. Вместо этого QDA предполагает, что каждый класс имеет свою собственную ковариационную матрицу.
Другими словами, предполагается, что наблюдение k -го класса имеет вид X ~ N( μk , Σk ).
Используя это предположение, QDA затем находит следующие значения:
- μ k : Среднее значение всех обучающих наблюдений k-го класса.
- Σ k : Ковариационная матрица k-го класса.
- π k : доля обучающих наблюдений, принадлежащих k- му классу.
Затем QDA подставляет эти числа в следующую формулу и присваивает каждому наблюдению X = x класс, для которого формула дает наибольшее значение:
D k (x) = -1/2*(x-μ k ) T Σ k -1 (x-μ k ) – 1/2*log|Σ k | + журнал( πk )
Обратите внимание, что в названии QDA есть квадратичная функция , поскольку значение, полученное с помощью вышеуказанной функции, получается из результата квадратичной функции от x.
LDA против QDA: когда использовать тот или другой
Основное различие между LDA и QDA заключается в том, что LDA предполагает, что каждый класс имеет общую ковариационную матрицу, что делает его гораздо менее гибким классификатором, чем QDA.
По своей сути это означает, что он имеет низкую дисперсию, то есть он будет работать одинаково на разных наборах обучающих данных. Обратной стороной является то, что если предположение о том, что классы K имеют одинаковую ковариацию, неверно, то LDA может страдать от высокой систематической ошибки .
QDA обычно предпочтительнее LDA в следующих ситуациях:
(1) Обучающий набор большой.
(2) Маловероятно, что K- классы имеют общую ковариационную матрицу.
Когда эти условия соблюдаются, QDA имеет тенденцию работать лучше, поскольку он более гибок и может лучше адаптироваться к данным.
Как подготовить данные для QDA
Прежде чем применять к ним модель QDA, убедитесь, что ваши данные соответствуют следующим требованиям:
1. Переменная ответа является категориальной . Модели QDA предназначены для использования в задачах классификации , то есть когда переменную ответа можно поместить в классы или категории.
2. Наблюдения в каждом классе подчиняются нормальному распределению . Сначала проверьте, что распределение значений в каждом классе примерно нормально. Если нет, вы можете сначала преобразовать данные , чтобы сделать распределение более нормальным.
3. Учитывайте крайние выбросы. Прежде чем применять LDA, обязательно проверьте набор данных на наличие экстремальных выбросов. Обычно вы можете проверить наличие выбросов визуально, просто используя коробчатые диаграммы или диаграммы рассеяния.
QDA в R и Python
В следующих руководствах представлены пошаговые примеры выполнения квадратичного дискриминантного анализа в R и Python:
Квадратичный дискриминантный анализ в R (шаг за шагом)
Квадратичный дискриминантный анализ в Python (шаг за шагом)