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

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

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

Пример: установка пользовательских затрат 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.

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

Функции

Объекты

Похожие темы