The RobustBoost
алгоритм может сделать хорошую классификацию предсказаний даже когда обучающие данные имеют шум. Однако значение по умолчанию RobustBoost
параметры могут создать ансамбль, который плохо предсказывает. Этот пример показывает один из способов настройки параметров для лучшей точности прогноза.
Сгенерируйте данные с меткой шума. Этот пример имеет двадцать равномерных случайных чисел на наблюдение и классифицирует наблюдение как 1
если сумма первых пяти чисел превышает 2,5 (так больше среднее значение), и 0
в противном случае:
rng(0,'twister') % for reproducibility Xtrain = rand(2000,20); Ytrain = sum(Xtrain(:,1:5),2) > 2.5;
Чтобы добавить шум, случайным образом переключите 10% классификаций:
idx = randsample(2000,200); Ytrain(idx) = ~Ytrain(idx);
Создайте ансамбль с AdaBoostM1
для целей сравнения:
ada = fitcensemble(Xtrain,Ytrain,'Method','AdaBoostM1', ... 'NumLearningCycles',300,'Learners','Tree','LearnRate',0.1);
Создайте ансамбль с RobustBoost
. Поскольку данные имеют 10% неправильной классификации, возможно, цель ошибки 15% является разумной.
rb1 = fitcensemble(Xtrain,Ytrain,'Method','RobustBoost', ... 'NumLearningCycles',300,'Learners','Tree','RobustErrorGoal',0.15, ... 'RobustMaxMargin',1);
Обратите внимание, что если вы задаете достаточно высокое значение цели ошибки, то программное обеспечение возвращает ошибку.
Создайте ансамбль с очень оптимистической целью ошибки, 0.01
:
rb2 = fitcensemble(Xtrain,Ytrain,'Method','RobustBoost', ... 'NumLearningCycles',300,'Learners','Tree','RobustErrorGoal',0.01);
Сравните ошибку реституции трех ансамблей:
figure plot(resubLoss(rb1,'Mode','Cumulative')); hold on plot(resubLoss(rb2,'Mode','Cumulative'),'r--'); plot(resubLoss(ada,'Mode','Cumulative'),'g.'); hold off; xlabel('Number of trees'); ylabel('Resubstitution error'); legend('ErrorGoal=0.15','ErrorGoal=0.01',... 'AdaBoostM1','Location','NE');
Все RobustBoost
кривые показывают более низкую ошибку восстановления, чем AdaBoostM1
кривая. Цель ошибки 0.01
кривая показывает самую низкую ошибку повторного замещения в большей части области значений.
Xtest = rand(2000,20); Ytest = sum(Xtest(:,1:5),2) > 2.5; idx = randsample(2000,200); Ytest(idx) = ~Ytest(idx); figure; plot(loss(rb1,Xtest,Ytest,'Mode','Cumulative')); hold on plot(loss(rb2,Xtest,Ytest,'Mode','Cumulative'),'r--'); plot(loss(ada,Xtest,Ytest,'Mode','Cumulative'),'g.'); hold off; xlabel('Number of trees'); ylabel('Test error'); legend('ErrorGoal=0.15','ErrorGoal=0.01',... 'AdaBoostM1','Location','NE');
Кривая ошибки для цели ошибки 0.15 самая низкая (лучшая) в нанесённой области значений. AdaBoostM1
имеет более высокую ошибку, чем кривая для цели ошибки 0.15. Кривая для слишком оптимистичной цели ошибки 0.01 остается значительно выше (хуже), чем другие алгоритмы для большей части построенной области значений.
fitcensemble
| loss
| resubLoss