exponenta event banner

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

В этом примере показано, как сделать модель более надежной и простой, пытаясь удалить предикторы без ущерба для прогнозирующей силы модели. Это особенно важно, когда в данных много предикторов. Линейный дискриминантный анализ использует два параметра регуляризации, Гамма и Дельта, для идентификации и удаления избыточных предикторов. 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.

Проверьте качество регуляризованных классификаторов.

Постройте график количества предикторов по отношению к ошибке.

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

Figure contains an axes. The axes contains 25 objects of type line.

Более внимательно изучите левую нижнюю часть графика.

axis([0 .1 0 1000])

Figure contains an axes. The axes contains 25 objects of type line.

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

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

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

Сначала найдите минимальное значение ошибки.

minerr = min(min(err))
minerr = 0.0139

Найти подстрочные значения err получение минимальной погрешности.

[p,q] = find(err < minerr + 1e-4);

Преобразование из подстрочных индексов в линейные индексы.

idx = sub2ind(size(delta),p,q);

Отображение Gamma и Delta значения.

[gamma(p) delta(idx)]
ans = 4×2

    0.7202    0.1145
    0.7602    0.1131
    0.8001    0.1128
    0.8001    0.1410

Эти точки имеют всего 29% от общего числа предикторов с ненулевыми коэффициентами в модели.

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

   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 = 1×2

    0.0185  173.0000

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

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

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

    0.6403
    0.2399

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

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

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

График тепловой карты

Чтобы сравнить cvshrink расчет с таковым в Го, Хасти и Тибширани [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')

Figure contains 2 axes. Axes 1 with title Classification error contains an object of type image. Axes 2 with title Number of predictors in the model contains an object of type image.

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

Ссылки

[1] Го, Я., Т. Хасти и Р. Тибширани. «Регуляризованный дискриминантный анализ и его применение в микрочипе». Биостатистика, том 8, № 1, стр. 86-100, 2007.

См. также

Функции

Объекты

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