Улучшение моделей дискриминантного анализа

Имейте дело с сингулярными данными

Для дискриминантного анализа нужны данные, достаточные, чтобы соответствовать моделям 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 классификации.

Пример: установка пользовательских затрат Misclassification

Рассмотрите ирисовые данные Фишера. Предположим, что стоимость классификации ирисовой диафрагмы versicolor как virginica является в 10 раз более большой, чем совершающий любую другую ошибку классификации. Создайте классификатор из данных, затем включите эту стоимость и затем просмотрите получившийся классификатор.

  1. Загрузите ирисовые данные Фишера и создайте (линейный) классификатор по умолчанию как в Примере: Ошибка перезамены Классификатора Дискриминантного анализа:

    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.

  2. Измените матрицу стоимости, чтобы сделать меньше ошибок в классификации 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 в пять раз более распространены, чем другие виды. Создайте классификатор, который включает эту информацию.

  1. Загрузите ирисовые данные Фишера и сделайте (линейный) классификатор по умолчанию как в Примере: Ошибка перезамены Классификатора Дискриминантного анализа:

    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.

  2. Измените до соответствия свои исторические данные и исследуйте матрицу беспорядка нового классификатора:

    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.

Смотрите также

Функции

Объекты

Похожие темы