Для дискриминантного анализа нужны данные, достаточные, чтобы подбирать модели 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
может перестать работать для 'linear'
и 'quadratic'
классификаторы. Когда это перестало работать, это возвращает объяснение, как показано в Соглашении с Сингулярными Данными.
fitcdiscr
всегда успешно справляется с диагональными и псевдо вариантами. Для получения информации о псевдоинверсиях смотрите pinv
.
Можно установить дискриминантный тип с помощью записи через точку после построения классификатора:
obj.DiscrimType = 'discrimType'
Вы можете измениться между линейными типами или между квадратичными типами, но не можете измениться между линейным и квадратичным типом.
resubstitution error является различием между обучающими данными ответа и предсказаниями, которые классификатор делает из ответа на основе входных обучающих данных. Если ошибка перезамены будет высока, вы не можете ожидать, что предсказания классификатора будут хороши. Однако наличие низкой ошибки перезамены не гарантирует хорошие предсказания для новых данных. Ошибка перезамены часто является чрезмерно оптимистической оценкой прогнозирующей ошибки на новых данных.
confusion matrix показывает, сколько ошибок, и который вводит, возникает в перезамене. Когда существует K
классы, матрица беспорядка R
K
- 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
.