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

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

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

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

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

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

axis([0 .1 0 1000])

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

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

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

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

Найдите индексы err создание минимальной ошибки.

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

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

idx = sub2ind(size(delta),p,q);
[gamma(p) delta(idx)]
ans = 4×2

    0.7202    0.1145
    0.7602    0.1131
    0.8001    0.1128
    0.8001    0.1410

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

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

Вам нужны 195 предикторов, чтобы достигнуть коэффициента ошибок 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 вычисление к этому в Го, 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.

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

Функции

Объекты

Похожие темы