Настройка RobustBoost

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');

Figure contains an axes. The axes contains 3 objects of type line. These objects represent ErrorGoal=0.15, ErrorGoal=0.01, AdaBoostM1.

Все 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');

Figure contains an axes. The axes contains 3 objects of type line. These objects represent ErrorGoal=0.15, ErrorGoal=0.01, AdaBoostM1.

Кривая ошибки для цели ошибки 0.15 самая низкая (лучшая) в нанесённой области значений. AdaBoostM1 имеет более высокую ошибку, чем кривая для цели ошибки 0.15. Кривая для слишком оптимистичной цели ошибки 0.01 остается значительно выше (хуже), чем другие алгоритмы для большей части построенной области значений.

См. также

| |

Похожие темы