exponenta event banner

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

Сделка с сингулярными данными

Дискриминантный анализ требует данных, достаточных для соответствия гауссовым моделям с обратимыми ковариационными матрицами. Если ваших данных недостаточно для уникального соответствия такой модели, fitcdiscr не удается. В этом разделе представлены методы обработки отказов.

Совет

Чтобы получить классификатор анализа дискриминанта без сбоев, установите DiscrimType пара имя-значение к 'pseudoLinear' или 'pseudoQuadratic' в fitcdiscr.

Дискриминанты «Pseudo» никогда не терпят неудачу, поскольку используют псевдоинверсию ковариационной матрицы Startk (см. 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

Выбор типа дискриминанта

Существует шесть типов классификаторов дискриминантного анализа: линейный и квадратичный, с диагональными и псевдоповторами каждого типа.

Совет

Чтобы увидеть, является ли ваша ковариационная матрица сингулярной, установите 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'

Можно изменять между линейными типами или между квадратичными типами, но нельзя изменять между линейными и квадратичными типами.

Анализ матрицы ошибок и путаницы при повторном замещении

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

Матрица путаницы показывает, сколько ошибок и какие типы возникают при повторном замещении. Когда есть K классы, матрица путаницы R является Kоколо-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 сетозных ирисов.

  • 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

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

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

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

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

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

Рассмотрим данные радужки Фишера. Предположим, что стоимость классификации диафрагмы 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 за счет увеличения числа ошибочных классификаций ирисов 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, за счет увеличения числа неправильных классификаций ирисов versicolor от 2 кому 4.

См. также

Функции

Объекты

Связанные темы