В этом примере показано, как получить преимущества 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');

Все три алгоритма достигают идеального прогнозирования на тренировочных данных через некоторое время.
Проверьте количество членов всех трех ансамблей.
[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');

Результаты показывают, что каждый алгоритм повышения достигает потери 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')

Оба 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
Размеры компактных ансамблей примерно пропорциональны количеству членов в каждом.
compact | crossval | fitcensemble | kfoldLoss | loss | removeLearners | resubLoss