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

Этот пример показывает, как сделать более устойчивую и более простую модель, пытаясь удалить предикторы, не вредя прогностической степени модели. Это особенно важно, когда у вас есть много предикторов в данных. Линейный дискриминантный анализ использует два параметра регуляризации, Гамма и Дельта, чтобы идентифицировать и удалить избыточные предикторы. The 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 вычисление по таковому в Guo, Hastie и Tibshirani [1], график тепловых карт ошибки и количества предикторов против Gamma и индекс Delta параметр. (The 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] Guo, Y., T. Hastie, and R. Tibshirani. «Упорядоченный дискриминантный анализ и его применение в микромассиве». Биостатистика, том 8, № 1, стр. 86-100, 2007.

См. также

Функции

Объекты

Похожие темы