exponenta event banner

Мелодия RobustBoost

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 остается существенно выше (хуже), чем другие алгоритмы для большей части построенного диапазона.

См. также

| |

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