exponenta event banner

LPBoost и TotalBoost для небольших ансамблей

В этом примере показано, как получить преимущества LPBoost и TotalBoost алгоритмы. Эти алгоритмы имеют две полезные характеристики:

  • Они самоустанавливаются, что означает, что вам не нужно выяснять, сколько членов включить.

  • Они производят ансамбли с очень маленькими весами, что позволяет безопасно удалять участников ансамбля.

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

Загрузить ionosphere набор данных.

load ionosphere

Создание классификационных ансамблей

Создание ансамблей для классификации ionosphere данные с использованием LPBoost, TotalBoost, и, для сравнения, AdaBoostM1 алгоритмы. Трудно знать, сколько участников включить в ансамбль. Для LPBoost и TotalBoost, попробуйте использовать 500. Для сравнения также используйте 500 для AdaBoostM1.

Слабыми учениками по умолчанию для методов повышения являются деревья принятия решений с MaxNumSplits свойство имеет значение 10. Эти деревья, как правило, подходят лучше, чем пни деревьев (с 1 максимальное разбиение) и может превысить больше. Поэтому, чтобы предотвратить переоснащение, используйте пни деревьев как слабых учеников для ансамблей.

rng('default') % For reproducibility
T = 500;
treeStump = templateTree('MaxNumSplits',1);
adaStump = fitcensemble(X,Y,'Method','AdaBoostM1','NumLearningCycles',T,'Learners',treeStump);
totalStump = fitcensemble(X,Y,'Method','TotalBoost','NumLearningCycles',T,'Learners',treeStump);
lpStump = fitcensemble(X,Y,'Method','LPBoost','NumLearningCycles',T,'Learners',treeStump);

figure
plot(resubLoss(adaStump,'Mode','Cumulative'));
hold on
plot(resubLoss(totalStump,'Mode','Cumulative'),'r');
plot(resubLoss(lpStump,'Mode','Cumulative'),'g');
hold off
xlabel('Number of stumps');
ylabel('Training error');
legend('AdaBoost','TotalBoost','LPBoost','Location','NE');

Figure contains an axes. The axes contains 3 objects of type line. These objects represent AdaBoost, TotalBoost, LPBoost.

Все три алгоритма достигают идеального прогнозирования на тренировочных данных через некоторое время.

Проверьте количество членов всех трех ансамблей.

[adaStump.NTrained totalStump.NTrained lpStump.NTrained]
ans = 1×3

   500    52    79

AdaBoostM1 обучены все 500 членов. Два других алгоритма рано перестали тренироваться.

Перекрестная проверка ансамблей

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

cvlp = crossval(lpStump,'KFold',5);
cvtotal = crossval(totalStump,'KFold',5);
cvada = crossval(adaStump,'KFold',5);

figure
plot(kfoldLoss(cvada,'Mode','Cumulative'));
hold on
plot(kfoldLoss(cvtotal,'Mode','Cumulative'),'r');
plot(kfoldLoss(cvlp,'Mode','Cumulative'),'g');
hold off
xlabel('Ensemble size');
ylabel('Cross-validated error');
legend('AdaBoost','TotalBoost','LPBoost','Location','NE');

Figure contains an axes. The axes contains 3 objects of type line. These objects represent AdaBoost, TotalBoost, LPBoost.

Результаты показывают, что каждый алгоритм повышения достигает потери 10% или ниже при 50 участниках ансамбля.

Компактность и удаление участников ансамбля

Чтобы уменьшить размеры ансамбля, скомпонуйте их, а затем используйте removeLearners. Вопрос в том, сколько учеников вы должны удалить? Перекрестно проверенные кривые потерь дают одну меру. В другом случае изучите веса учащихся для LPBoost и TotalBoost после уплотнения.

cada = compact(adaStump);
clp = compact(lpStump);
ctotal = compact(totalStump);

figure
subplot(2,1,1)
plot(clp.TrainedWeights)
title('LPBoost weights')
subplot(2,1,2)
plot(ctotal.TrainedWeights)
title('TotalBoost weights')

Figure contains 2 axes. Axes 1 with title LPBoost weights contains an object of type line. Axes 2 with title TotalBoost weights contains an object of type line.

Оба LPBoost и TotalBoost показать четкие точки, где веса участников ансамбля становятся незначительными.

Удалите неважных участников ансамбля.

cada = removeLearners(cada,150:cada.NTrained);
clp = removeLearners(clp,60:clp.NTrained);
ctotal = removeLearners(ctotal,40:ctotal.NTrained);

Убедитесь, что удаление этих учеников не влияет на точность набора данных обучения.

[loss(cada,X,Y) loss(clp,X,Y) loss(ctotal,X,Y)]
ans = 1×3

     0     0     0

Проверьте полученные размеры компактного ансамбля.

s(1) = whos('cada');
s(2) = whos('clp');
s(3) = whos('ctotal');
s.bytes
ans = 590844
ans = 236030
ans = 157190

Размеры компактных ансамблей примерно пропорциональны количеству членов в каждом.

См. также

| | | | | |

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