Дискриминантный анализ принимает, что данные поступают из Смешанной гауссовской модели (см. Создание дискриминантной модели анализа). Если данные, по-видимому, получены из смешанной гауссовской модели, можно ожидать, что дискриминантный анализ будет хорошим классификатором. Кроме того, линейный дискриминантный анализ по умолчанию принимает, что все ковариационные матрицы классов равны. В этом разделе показаны методы проверки этих допущений:
Тест Бартлетта (см. Рамку [1]) проверяет равенство ковариационных матриц различных классов. Если ковариационные матрицы равны, тест указывает, что линейный дискриминантный анализ подходит. Если нет, рассмотрите использование квадратичного дискриминантного анализа, установку DiscrimType
аргумент пары "имя-значение" в 'quadratic'
в fitcdiscr
.
Тест Бартлетта принимает нормальные (Гауссовы) выборки, где не известны ни средства, ни ковариационные матрицы. Чтобы определить, равны ли ковариации, вычислите следующие величины:
Матрицы выборочной ковариации за класс Σi, 1 ≤ <reservedrangesplaceholder2> ≤ <reservedrangesplaceholder1> , где k количество классов.
Объединенный ковариационный матричный Σ.
Тестируйте статистические V:
где n - общее количество наблюдений, ni - количество наблюдений в классе i, и |Σ| означает определяющего матрицы
Асимптотически, когда количество наблюдений в каждом классе ni становится большим, V распределяется приблизительно χ2 с kd ( d + 1 )/2 степенями свободы, где d - количество предикторов (количество размерностей в данных ).
Тест Бартлетта состоит в том, чтобы проверить, превышает ли V заданный процентиль χ2 распределение с kd ( d + 1 )/2 степенями свободы. Если это так, то отвергните гипотезу о том, что ковариации равны.
Проверьте, хорошо ли данные радужной оболочки глаза Фишера смоделированы одной Гауссовой ковариацией, или же она лучше смоделирована как смесь Гауссова, выполнив тест Бартлетта с равными ковариационными матрицами.
Загрузите fisheriris
набор данных.
load fisheriris; prednames = {'SepalLength','SepalWidth','PetalLength','PetalWidth'};
Когда все ковариационные матрицы классов равны, подходящим является линейный дискриминантный анализ.
Обучите линейную дискриминантную модель анализа (тип по умолчанию) с помощью данных радужной оболочки глаза Фишера.
L = fitcdiscr(meas,species,'PredictorNames',prednames);
Когда ковариационные матрицы классов не равны, подходящим является квадратичный дискриминантный анализ.
Обучите квадратичную модель дискриминантного анализа с помощью данных радужной оболочки глаза Фишера и вычислите статистику
Q = fitcdiscr(meas,species,'PredictorNames',prednames,'DiscrimType','quadratic');
Сохраните как переменные количество наблюдений N
, размерность набора данных D
, количество классов K
, и количество наблюдений в каждом классе Nclass
.
[N,D] = size(meas)
N = 150
D = 4
K = numel(unique(species))
K = 3
Nclass = grpstats(meas(:,1),species,'numel')'
Nclass = 1×3
50 50 50
Вычислите тестовую статистическую V
.
SigmaL = L.Sigma; SigmaQ = Q.Sigma; V = (N-K)*log(det(SigmaL)); for k=1:K V = V - (Nclass(k)-1)*log(det(SigmaQ(:,:,k))); end V
V = 146.6632
Вычислите значение p.
nu = K*D*(D+1)/2;
pval1 = chi2cdf(V,nu,'upper')
pval1 = 2.6091e-17
Потому что pval1
меньше 0,05, тест Бартлетта отвергает гипотезу о равных ковариационных матрицах. Результат указывает на использование квадратичного дискриминантного анализа в отличие от линейного дискриминантного анализа.
Q-Q график графически показывает, близко ли эмпирическое распределение к теоретическому распределению. Если эти два значения равны, Q-Q график лежит на линии 45 °. Если нет, график Q-Q отклоняется от линии 45 °.
Проанализируйте Q-Q графиков, чтобы проверить, лучше ли данные радужки Фишера смоделированы одной Гауссовой ковариацией или как смесь Гауссова.
Загрузите fisheriris
набор данных.
load fisheriris; prednames = {'SepalLength','SepalWidth','PetalLength','PetalWidth'};
Когда все ковариационные матрицы классов равны, подходящим является линейный дискриминантный анализ.
Обучите линейную дискриминантную модель анализа.
L = fitcdiscr(meas,species,'PredictorNames',prednames);
Когда ковариационные матрицы классов не равны, подходящим является квадратичный дискриминантный анализ.
Обучите квадратичную дискриминантную модель анализа с использованием данных радужной оболочки глаза Фишера.
Q = fitcdiscr(meas,species,'PredictorNames',prednames,'DiscrimType','quadratic');
Вычислите количество наблюдений, размерность набора данных и ожидаемые величины.
[N,D] = size(meas); expQuant = chi2inv(((1:N)-0.5)/N,D);
Вычислите наблюдаемые квантования для линейной дискриминантной модели.
obsL = mahal(L,L.X,'ClassLabels',L.Y);
[obsL,sortedL] = sort(obsL);
Постройте график Q-Q для линейного дискриминанта.
figure; gscatter(expQuant,obsL,L.Y(sortedL),'bgr',[],[],'off'); legend('virginica','versicolor','setosa','Location','NW'); xlabel('Expected quantile'); ylabel('Observed quantile for LDA'); line([0 20],[0 20],'color','k');
Ожидаемые и наблюдаемые количества несколько согласуются. Отклонение графика от линии 45 ° вверх указывает, что данные имеют более тяжелые хвосты, чем нормальное распределение. График показывает три возможных выброса в верхней части: два наблюдения от 'setosa'
класса и одно наблюдение от
'virginica' классов
.
Вычислите наблюдаемые квантили для квадратичной дискриминантной модели.
obsQ = mahal(Q,Q.X,'ClassLabels',Q.Y);
[obsQ,sortedQ] = sort(obsQ);
Постройте график Q-Q для квадратичного дискриминанта.
figure; gscatter(expQuant,obsQ,Q.Y(sortedQ),'bgr',[],[],'off'); legend('virginica','versicolor','setosa','Location','NW'); xlabel('Expected quantile'); ylabel('Observed quantile for QDA'); line([0 20],[0 20],'color','k');
Q-Q график для квадратичного дискриминанта показывает лучшее согласие между наблюдаемым и ожидаемым квантилями. В график показан только один возможный выброс из класса 'setosa'
. Данные ириса Фишера лучше смоделированы как смесь Гауссов с ковариационными матрицами, которые не требуются для равенства между классами.
Тест на куртоз Мардии (см. Mardia [2]) является альтернативой исследованию Q-Q- графика. Это дает численный подход к решению, совпадают ли данные с Смешанной гауссовской моделью.
В тесте Mardia kurtosis вы вычисляете M, среднее значение четвертой степени расстояния Махаланобиса от данных о класс средствах. Если данные обычно распределены с постоянной ковариационной матрицей (и, таким образом, подходят для линейного дискриминантного анализа), M асимптотически распределена как нормальная со средним d ( d + 2) и дисперсией 8 d ( d + 2 )/ n, где
d - количество предикторов (количество размерностей в данных).
n - общее количество наблюдений.
Тест Мардии является двусторонним: проверяйте, достаточно ли M близко, чтобы d ( d + 2) относительно нормального распределения дисперсии 8 d ( d + 2 )/ n.
Выполните тесты на куртоз Мардии, чтобы проверить, распределены ли данные радужной оболочки глаза Фишера приблизительно обычно как для линейного, так и для квадратичного дискриминантного анализа.
Загрузите fisheriris
набор данных.
load fisheriris; prednames = {'SepalLength','SepalWidth','PetalLength','PetalWidth'};
Когда все ковариационные матрицы классов равны, подходящим является линейный дискриминантный анализ.
Обучите линейную дискриминантную модель анализа.
L = fitcdiscr(meas,species,'PredictorNames',prednames);
Когда ковариационные матрицы классов не равны, подходящим является квадратичный дискриминантный анализ.
Обучите квадратичную дискриминантную модель анализа с использованием данных радужной оболочки глаза Фишера.
Q = fitcdiscr(meas,species,'PredictorNames',prednames,'DiscrimType','quadratic');
Вычислите среднее значение и отклонение асимптотического распределения.
[N,D] = size(meas); meanKurt = D*(D+2)
meanKurt = 24
varKurt = 8*D*(D+2)/N
varKurt = 1.2800
Вычислите значение p для теста Mardia kurtosis на линейной дискриминантной модели.
mahL = mahal(L,L.X,'ClassLabels',L.Y);
meanL = mean(mahL.^2);
[~,pvalL] = ztest(meanL,meanKurt,sqrt(varKurt))
pvalL = 0.0208
Потому что pvalL
меньше 0,05, тест Mardia kurtosis отклоняет гипотезу о том, что данные обычно распределяются с помощью постоянной ковариационной матрицы.
Вычислите значение p для теста Mardia kurtosis на квадратичной дискриминантной модели.
mahQ = mahal(Q,Q.X,'ClassLabels',Q.Y);
meanQ = mean(mahQ.^2);
[~,pvalQ] = ztest(meanQ,meanKurt,sqrt(varKurt))
pvalQ = 0.7230
Потому что pvalQ
больше 0,05, данные согласуются с многомерным нормальным распределением.
Результаты указывают на использование квадратичного дискриминантного анализа в отличие от линейного дискриминантного анализа.
[1] Коробка, Г. Е. П. «Общая теория распределения для класса критериев правдоподобия». Биометрика 36, № 3-4 (1949): 317-46. https://doi.org/10.1093/biomet/36.3-4.317.
[2] Mardia, K. V. «Measures of Multivariate Skewness and Kurtosis with Applications». Биометрика 57, № 3 (1970): 519-30. https://doi.org/10.1093/biomet/57.3.519.