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

Работа с сингулярными данными

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

R(i,j) = количество наблюдений за классом i что классификатор прогнозирует принадлежность к классу j.

Пример: Ошибка реституции классификатора дискриминантного анализа

Исследуйте ошибку реституции классификатора дискриминантного анализа по умолчанию для данных радужной оболочки глаза Фишера:

load fisheriris
obj = fitcdiscr(meas,species);
resuberror = resubLoss(obj)

resuberror =
    0.0200

Ошибка реституции очень низкая, что означает obj классифицирует почти все данные радужки Фишера правильно. Общее число неправильных классификаций:

resuberror * obj.NumObservations

ans =
    3.0000

Чтобы увидеть детали трех неправильных классификаций, исследуйте матрицу неточностей:

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 сетоса irise правильно.

  • R(2,:) = [0 48 2] означает obj классифицирует 48 versicolor irises правильно, и неправильно классифицирует две versicolor irises как virginica.

  • R(3,:) = [0 1 49] означает obj правильно классифицирует 49 виргинийских ирисов и неправильно классифицирует одну ирису виргиники как версиколор.

Перекрестная валидация

Как правило, классификаторы дискриминантного анализа являются устойчивыми и не показывают переобучения, когда количество предикторов намного меньше, чем количество наблюдений. Тем не менее, это хорошая практика, чтобы перекрестно подтвердить ваш классификатор, чтобы гарантировать его стабильность.

Перекрестная проверка классификатора дискриминантного анализа

В этом примере показано, как выполнить пятикратную перекрестную валидацию квадратичного классификатора дискриминантного анализа.

Загрузите выборочные данные.

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

Перекрестная подтвержденная потеря является такой же низкой, как и первоначальная потеря при реституции. Поэтому можно иметь доверие в том, что классификатор достаточно точен.

Изменение затрат и приоритетов

Иногда вы хотите избежать некоторых ошибок неправильной классификации больше, чем другие. Для примера может быть лучше иметь чрезмерно чувствительное выявление рака вместо недостаточно чувствительного выявления рака. Сверхчувствительное обнаружение дает больше ложных срабатываний (ненужная проверка или лечение). Недостаточное обнаружение дает больше ложных негативов (предотвратимые заболевания или смерти). Последствия недоопределения могут быть высокими. Поэтому может потребоваться установить затраты, чтобы отразить последствия.

Точно так же обучающие данные Y может иметь распределение классов, которое не представляет их истинную частоту. Если у вас есть лучшая оценка истинной частоты, можно включить эти знания в классификацию Prior свойство.

Пример: Установка пользовательских затрат на неправильную классификацию

Рассмотрим данные ириса Фишера. Предположим, что стоимость классификации orsicolor iris как 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 irises правильно, и неправильно классифицирует две versicolor irises как virginica.

  2. Измените матрицу затрат, чтобы сделать меньше ошибок в классификации версиколор-ирисов как virginica:

    obj.Cost(2,3) = 10;
    R2 = confusionmat(obj.Y,resubPredict(obj))
    
    R2 =
        50     0     0
         0    50     0
         0     7    43

    obj теперь классифицирует все версиколорные ирисы правильно, за счет увеличения количества неправильных классификаций ирисов 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 виргинийских ирисов и неправильно классифицирует одну ирису виргиники как версиколор.

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

    obj.Prior = [1 1 5];
    R2 = confusionmat(obj.Y,resubPredict(obj))
    
    R2 =
        50     0     0
         0    46     4
         0     0    50

    Новый классификатор классифицирует все ирисы virginica правильно, за счет увеличения количества неправильных классификаций ирисов versicolor от 2 на 4.

См. также

Функции

Объекты

Похожие темы