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

Этот пример показывает, как сделать более устойчивую и более простую модель путем попытки удалить предикторы, не повреждая предсказательную силу модели. Это особенно важно, когда у вас есть много предикторов в ваших данных. Линейный дискриминантный анализ использует два параметра регуляризации, Гамму и Delta (см. Определения), чтобы идентифицировать и удалить избыточные предикторы. Метод cvshrink помогает идентифицировать соответствующие настройки для этих параметров.

Загрузите данные и создайте классификатор.

Создайте классификатор линейного дискриминантного анализа для данных ovariancancer. Установите аргументы пары "имя-значение" SaveMemory и FillCoeffs сохранять получившуюся модель довольно маленькой. Для вычислительной простоты этот пример использует случайное подмножество приблизительно одной трети предикторов, чтобы обучить классификатор.

load ovariancancer
rng(1); % For reproducibility
numPred = size(obs,2);
obs = obs(:,randsample(numPred,ceil(numPred/3)));
Mdl = fitcdiscr(obs,grp,'SaveMemory','on','FillCoeffs','off');

Крест подтверждает классификатор.

Используйте 25 уровней Gamma и 25 уровней Delta, чтобы искать хорошие параметры. Этот поиск является трудоемким. Установите Verbose на 1 просматривать прогресс.

[err,gamma,delta,numpred] = cvshrink(Mdl,...
    'NumGamma',24,'NumDelta',24,'Verbose',1);
Done building cross-validated model.
Processing Gamma step 1 out of 25.
Processing Gamma step 2 out of 25.
Processing Gamma step 3 out of 25.
Processing Gamma step 4 out of 25.
Processing Gamma step 5 out of 25.
Processing Gamma step 6 out of 25.
Processing Gamma step 7 out of 25.
Processing Gamma step 8 out of 25.
Processing Gamma step 9 out of 25.
Processing Gamma step 10 out of 25.
Processing Gamma step 11 out of 25.
Processing Gamma step 12 out of 25.
Processing Gamma step 13 out of 25.
Processing Gamma step 14 out of 25.
Processing Gamma step 15 out of 25.
Processing Gamma step 16 out of 25.
Processing Gamma step 17 out of 25.
Processing Gamma step 18 out of 25.
Processing Gamma step 19 out of 25.
Processing Gamma step 20 out of 25.
Processing Gamma step 21 out of 25.
Processing Gamma step 22 out of 25.
Processing Gamma step 23 out of 25.
Processing Gamma step 24 out of 25.
Processing Gamma step 25 out of 25.

Исследуйте качество упорядоченных классификаторов.

Постройте количество предикторов против ошибки.

figure;
plot(err,numpred,'k.')
xlabel('Error rate');
ylabel('Number of predictors');

Исследуйте нижнюю левую часть графика более тесно.

axis([0 .1 0 1000])

Существует ясный компромисс между более низким количеством предикторов и более низкой ошибкой.

Выберите оптимальный компромисс между размером модели и точностью.

Несколько пар Gamma и значений Delta производят о той же минимальной ошибке. Отобразите индексы этих пар и их значений.

minerr = min(min(err))
[p,q] = find(err < minerr + 1e-4); % Subscripts of err producing minimal error
numel(p)
idx = sub2ind(size(delta),p,q); % Convert from subscripts to linear indices
[gamma(p) delta(idx)]
minerr =

    0.0139


ans =

     4


ans =

    0.7202    0.1145
    0.7602    0.1131
    0.8001    0.1128
    0.8001    0.1410

Эти точки имеют только 20% общих предикторов, которые имеют ненулевые коэффициенты в модели.

numpred(idx)/ceil(numPred/3)*100
ans =

   39.8051
   38.9805
   36.8066
   28.7856

Чтобы далее понизить количество предикторов, необходимо принять большие коэффициенты ошибок. Например, чтобы выбрать Gamma и Delta, которые дают самый низкий коэффициент ошибок с 200 или меньшим количеством предикторов.

low200 = min(min(err(numpred <= 200)));
lownum = min(min(numpred(err == low200)));
[low200 lownum]
ans =

    0.0185  173.0000

Вам нужны 195 предикторов, чтобы достигнуть коэффициента ошибок 0,0185, и это - самый низкий коэффициент ошибок среди тех, которые имеют 200 предикторов или меньше.

Отобразите Gamma и Delta, которые достигают этой ошибки/номера предикторов.

[r,s] = find((err == low200) & (numpred == lownum));
[gamma(r); delta(r,s)]
ans =

    0.6403
    0.2399

Установите параметры регуляризации.

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

Mdl.Gamma = gamma(r);
Mdl.Delta = delta(r,s);

Нагрейте график карты

Чтобы сравнить вычисление cvshrink с этим в Го, Hastie и Tibshirani [1], строят карты тепла ошибки и количество предикторов против Gamma и индекса параметра Delta. (Область значений параметра Delta зависит от значения параметра Gamma. Таким образом, чтобы получить прямоугольный график, используйте индекс Delta, не сам параметр.)

% Create the Delta index matrix
indx = repmat(1:size(delta,2),size(delta,1),1);
figure
subplot(1,2,1)
imagesc(err);
colorbar;
colormap('jet')
title 'Classification error';
xlabel 'Delta index';
ylabel 'Gamma index';

subplot(1,2,2)
imagesc(numpred);
colorbar;
title 'Number of predictors in the model';
xlabel 'Delta index' ;
ylabel 'Gamma index' ;

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

Ссылки

[1] Го, Y., Т. Хэсти и Р. Тибширэни. Упорядоченный Дискриминантный анализ и Его Приложение в Микромассиве. Биостатистика, Издание 8, № 1, стр 86–100, 2007.

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

Функции

Объекты

Похожие темы