Случайная классификация подпространств

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

Загрузите данные

Загрузите ionosphere данные. Эти данные имеют 351 бинарный ответ на 34 предиктора.

load ionosphere;
[N,D] = size(X)
N = 351
D = 34
resp = unique(Y)
resp = 2x1 cell
    {'b'}
    {'g'}

Выберите количество самых близких соседей

Найдите хороший выбор для k, количество самых близких соседей в классификаторе, перекрестной проверкой. Выберите количество соседей, приблизительно равномерно расположенных с интервалами на логарифмическом масштабе.

rng(8000,'twister') % for reproducibility
K = round(logspace(0,log10(N),10)); % number of neighbors 
cvloss = zeros(numel(K),1);
for k=1:numel(K)
    knn = fitcknn(X,Y,...
        'NumNeighbors',K(k),'CrossVal','On');
    cvloss(k) = kfoldLoss(knn);
end
figure; % Plot the accuracy versus k
semilogx(K,cvloss);
xlabel('Number of nearest neighbors');
ylabel('10 fold classification error');
title('k-NN classification');

Figure contains an axes object. The axes object with title k-NN classification contains an object of type line.

Самая низкая ошибка перекрестной проверки происходит для k = 2.

Создайте ансамбли

Создайте ансамбли для 2- самая близкая соседняя классификация с различными количествами размерностей, и исследует перекрестную подтвержденную утрату получившихся ансамблей.

Этот шаг занимает много времени. Чтобы отслеживать прогресс, распечатайте сообщение, когда каждая размерность заканчивается.

NPredToSample = round(linspace(1,D,10)); % linear spacing of dimensions
cvloss = zeros(numel(NPredToSample),1);
learner = templateKNN('NumNeighbors',2);
for npred=1:numel(NPredToSample)
   subspace = fitcensemble(X,Y,'Method','Subspace','Learners',learner, ...
       'NPredToSample',NPredToSample(npred),'CrossVal','On');
   cvloss(npred) = kfoldLoss(subspace);
   fprintf('Random Subspace %i done.\n',npred);
end
Random Subspace 1 done.
Random Subspace 2 done.
Random Subspace 3 done.
Random Subspace 4 done.
Random Subspace 5 done.
Random Subspace 6 done.
Random Subspace 7 done.
Random Subspace 8 done.
Random Subspace 9 done.
Random Subspace 10 done.
figure; % plot the accuracy versus dimension
plot(NPredToSample,cvloss);
xlabel('Number of predictors selected at random');
ylabel('10 fold classification error');
title('k-NN classification with Random Subspace');

Figure contains an axes object. The axes object with title k-NN classification with Random Subspace contains an object of type line.

У ансамблей, которые используют пять и восемь предикторов на ученика, есть самая низкая перекрестная подтвержденная ошибка. Коэффициент ошибок для этих ансамблей - приблизительно 0,06, в то время как другие ансамбли перекрестный подтвердили коэффициенты ошибок, которые являются приблизительно 0.1 или больше.

Найдите хороший размер ансамбля

Найдите самое маленькое количество учеников в ансамбле, которые все еще дают хорошую классификацию.

ens = fitcensemble(X,Y,'Method','Subspace','Learners',learner, ...
       'NPredToSample',5,'CrossVal','on');
figure; % Plot the accuracy versus number in ensemble
plot(kfoldLoss(ens,'Mode','Cumulative'))
xlabel('Number of learners in ensemble');
ylabel('10 fold classification error');
title('k-NN classification with Random Subspace');

Figure contains an axes object. The axes object with title k-NN classification with Random Subspace contains an object of type line.

Кажется, нет никакого преимущества в ансамбле больше чем с приблизительно 50 учениками. Возможно, что 25 учеников дают хорошие предсказания.

Создайте итоговый ансамбль

Создайте итоговый ансамбль с 50 учениками. Уплотните ансамбль и смотрите, сохраняет ли уплотненная версия заметный объем памяти.

ens = fitcensemble(X,Y,'Method','Subspace','NumLearningCycles',50,...
    'Learners',learner,'NPredToSample',5);
cens = compact(ens);
s1 = whos('ens');
s2 = whos('cens');
[s1.bytes s2.bytes] % si.bytes = size in bytes
ans = 1×2

     1748675     1518820

Компактный ансамбль приблизительно на 10% меньше, чем полный ансамбль. Оба дают те же предсказания.

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

| | | |

Похожие темы