Для дискриминантного анализа нужны данные, достаточные, чтобы соответствовать моделям Gaussian обратимыми ковариационными матрицами. Если ваши данные не достаточны, чтобы соответствовать такой модели исключительно, сбоям fitcdiscr
. Этот раздел показывает методы для отказов вследствие неправильного обращения.
Чтобы получить классификатор дискриминантного анализа без отказа, установите пару "имя-значение" DiscrimType
на 'pseudoLinear'
или 'pseudoQuadratic'
в fitcdiscr
.
“Псевдо” дискриминанты никогда не перестали работать, потому что они используют псевдоинверсию ковариационной матрицы Σk (см. pinv
).
Когда ковариационная матрица подходящего классификатора сингулярна, fitcdiscr
может перестать работать:
load popcorn X = popcorn(:,[1 2]); X(:,3) = 0; % a zero-variance column Y = popcorn(:,3); ppcrn = fitcdiscr(X,Y); Error using ClassificationDiscriminant (line 635) Predictor x3 has zero variance. Either exclude this predictor or set 'discrimType' to 'pseudoLinear' or 'diagLinear'. Error in classreg.learning.FitTemplate/fit (line 243) obj = this.MakeFitObject(X,Y,W,this.ModelParameters,fitArgs{:}); Error in fitcdiscr (line 296) this = fit(temp,X,Y);
Чтобы возобновить линейный дискриминантный анализ, используйте pseudoLinear
или тип дискриминанта diagLinear
:
ppcrn = fitcdiscr(X,Y,... 'discrimType','pseudoLinear'); meanpredict = predict(ppcrn,mean(X)) meanpredict = 3.5000
Существует шесть типов классификаторов дискриминантного анализа: линейный и квадратичный, с diagonal и вариантами pseudo каждого типа.
Видеть, сингулярна ли ваша ковариационная матрица, набор discrimType
к 'linear'
или 'quadratic'
. Если матрица сингулярна, сбои метода fitcdiscr
для 'quadratic'
, и свойство Gamma
является ненулевым для 'linear'
.
Получить квадратичный классификатор, даже когда ваша ковариационная матрица сингулярна, набор DiscrimType
к 'pseudoQuadratic'
или 'diagQuadratic'
.
obj = fitcdiscr(X,Y,'DiscrimType','pseudoQuadratic') % or 'diagQuadratic'
Выберите тип классификатора путем установки пары "имя-значение" discrimType
на один из:
'linear'
(значение по умолчанию) — Оценка одна ковариационная матрица для всех классов.
'quadratic'
— Оцените одну ковариационную матрицу для каждого класса.
'diagLinear'
— Используйте диагональ ковариационной матрицы 'linear'
и используйте ее псевдоинверсию при необходимости.
'diagQuadratic'
— Используйте диагонали ковариационных матриц 'quadratic'
и используйте их псевдоинверсии при необходимости.
'pseudoLinear'
— Используйте псевдоинверсию ковариационной матрицы 'linear'
при необходимости.
'pseudoQuadratic'
— Используйте псевдоинверсии ковариационных матриц 'quadratic'
при необходимости.
fitcdiscr
может перестать работать для классификаторов 'quadratic'
и 'linear'
. Когда это перестало работать, это возвращает объяснение, как показано в Соглашении с Сингулярными Данными.
fitcdiscr
всегда успешно справляется с диагональными и псевдо вариантами. Для получения информации о псевдоинверсиях смотрите pinv
.
Можно установить дискриминантный тип с помощью записи через точку после построения классификатора:
obj.DiscrimType = 'discrimType'
Вы можете измениться между линейными типами или между квадратичными типами, но не можете измениться между линейным и квадратичным типом.
resubstitution error является различием между данными тренировки ответа и прогнозами, которые классификатор делает из ответа на основе входных данных тренировки. Если ошибка перезамены будет высока, вы не можете ожидать, что прогнозы классификатора будут хороши. Однако наличие низкой ошибки перезамены не гарантирует хорошие прогнозы для новых данных. Ошибка перезамены часто является чрезмерно оптимистической оценкой прогнозирующей ошибки на новых данных.
confusion matrix показывает, сколько ошибок, и который вводит, возникает в перезамене. Когда существуют классы K
, матрица беспорядка, R
является K
-by-K
матрица с
R(i,j)
= количество наблюдений за классом i
, который классификатор предсказывает, чтобы быть класса j
.
Исследуйте ошибку перезамены классификатора дискриминантного анализа по умолчанию для ирисовых данных Фишера:
load fisheriris obj = fitcdiscr(meas,species); resuberror = resubLoss(obj) resuberror = 0.0200
Ошибка перезамены является очень низкой, означая, что obj
классифицирует почти все ирисовые данные Фишера правильно. Общее количество misclassifications:
resuberror * obj.NumObservations ans = 3.0000
Чтобы видеть детали трех misclassifications, исследуйте матрицу беспорядка:
R = confusionmat(obj.Y,resubPredict(obj)) R = 50 0 0 0 48 2 0 1 49 obj.ClassNames ans = 'setosa' 'versicolor' 'virginica'
R(1,:) = [50 0 0]
означает, что obj
классифицирует все 50 ирисовых диафрагм setosa правильно.
R(2,:) = [0 48 2]
означает, что obj
классифицирует 48 ирисовых диафрагм versicolor правильно и неправильно классифицирует две ирисовых диафрагмы versicolor как virginica.
R(3,:) = [0 1 49]
означает, что obj
классифицирует 49 ирисовых диафрагм virginica правильно и неправильно классифицирует одну ирисовую диафрагму virginica как versicolor.
Как правило, классификаторы дискриминантного анализа устойчивы и не показывают перетренировку, когда количество предикторов намного меньше, чем количество наблюдений. Тем не менее, это - хорошая практика, чтобы пересечься, подтверждают ваш классификатор, чтобы гарантировать его устойчивость.
Этот пример показывает, как выполнить пятикратную перекрестную проверку квадратичного классификатора дискриминантного анализа.
Загрузите выборочные данные.
load fisheriris
Создайте квадратичный классификатор дискриминантного анализа для данных.
quadisc = fitcdiscr(meas,species,'DiscrimType','quadratic');
Найдите ошибку перезамены классификатора.
qerror = resubLoss(quadisc)
qerror = 0.0200
Классификатор делает превосходное задание. Тем не менее, ошибка перезамены может быть оптимистической оценкой ошибки при классификации новых данных. Поэтому перейдите к перекрестной проверке.
Создайте модель перекрестной проверки.
cvmodel = crossval(quadisc,'kfold',5);
Найдите потерю перекрестной проверки для модели, имея в виду ошибку наблюдений из сгиба.
cverror = kfoldLoss(cvmodel)
cverror = 0.0200
Перекрестная подтвержденная потеря является настолько же низкой как исходная потеря перезамены. Поэтому можно быть уверены, что классификатор довольно точен.
Иногда вы хотите избежать определенных misclassification ошибок больше, чем другие. Например, может быть лучше иметь щепетильную диагностику рака вместо undersensitive диагностики рака. Щепетильное обнаружение дает более ложные положительные стороны (ненужное тестирование или обработка). Обнаружение Undersensitive дает более ложные отрицательные стороны (предотвратимые болезни или смертельные случаи). Последствия underdetection могут быть высокими. Поэтому вы можете хотеть установить затраты отражать последствия.
Точно так же Y
данных тренировки может иметь распределение классов, которое не представляет их истинную частоту. Если у вас есть лучшая оценка истинной частоты, можно включать это знание в свойство Prior
классификации.
Рассмотрите ирисовые данные Фишера. Предположим, что стоимость классификации ирисовой диафрагмы versicolor как virginica является в 10 раз более большой, чем совершающий любую другую ошибку классификации. Создайте классификатор из данных, затем включите эту стоимость и затем просмотрите получившийся классификатор.
Загрузите ирисовые данные Фишера и создайте (линейный) классификатор по умолчанию как в Примере: Ошибка перезамены Классификатора Дискриминантного анализа:
load fisheriris obj = fitcdiscr(meas,species); resuberror = resubLoss(obj) resuberror = 0.0200 R = confusionmat(obj.Y,resubPredict(obj)) R = 50 0 0 0 48 2 0 1 49 obj.ClassNames ans = 'setosa' 'versicolor' 'virginica'
R(2,:) = [0 48 2]
означает, что obj
классифицирует 48 ирисовых диафрагм versicolor правильно и неправильно классифицирует две ирисовых диафрагмы versicolor как virginica.
Измените матрицу стоимости, чтобы сделать меньше ошибок в классификации versicolor ирисовые диафрагмы как virginica:
obj.Cost(2,3) = 10; R2 = confusionmat(obj.Y,resubPredict(obj)) R2 = 50 0 0 0 50 0 0 7 43
obj
теперь классифицирует все ирисовые диафрагмы versicolor правильно, за счет увеличения числа misclassifications ирисовых диафрагм virginica от 1
до 7
.
Рассмотрите ирисовые данные Фишера. Существует 50 ирисовых диафрагм каждого вида в данных. Предположим, что в конкретной области у вас есть исторические данные, который показывает, что virginica в пять раз более распространены, чем другие виды. Создайте классификатор, который включает эту информацию.
Загрузите ирисовые данные Фишера и сделайте (линейный) классификатор по умолчанию как в Примере: Ошибка перезамены Классификатора Дискриминантного анализа:
load fisheriris obj = fitcdiscr(meas,species); resuberror = resubLoss(obj) resuberror = 0.0200 R = confusionmat(obj.Y,resubPredict(obj)) R = 50 0 0 0 48 2 0 1 49 obj.ClassNames ans = 'setosa' 'versicolor' 'virginica'
R(3,:) = [0 1 49]
означает, что obj
классифицирует 49 ирисовых диафрагм virginica правильно и неправильно классифицирует одну ирисовую диафрагму virginica как versicolor.
Измените до соответствия свои исторические данные и исследуйте матрицу беспорядка нового классификатора:
obj.Prior = [1 1 5]; R2 = confusionmat(obj.Y,resubPredict(obj)) R2 = 50 0 0 0 46 4 0 0 50
Новый классификатор классифицирует все ирисовые диафрагмы virginica правильно, за счет увеличения числа misclassifications ирисовых диафрагм versicolor от 2
до 4
.