exponenta event banner

Настройка случайного леса с использованием ошибки квантования и байесовской оптимизации

В этом примере показано, как реализовать байесовскую оптимизацию для настройки гиперпараметров случайного леса деревьев регрессии с помощью ошибки квантиля. Настройка модели с использованием ошибки квантиля, а не среднеквадратической ошибки, подходит, если планируется использовать модель для прогнозирования условных квантилей, а не условных средств.

Загрузка и предварительная обработка данных

Загрузить carsmall набор данных. Рассмотрим модель, которая предсказывает среднюю экономию топлива автомобиля с учетом его ускорения, количества цилиндров, рабочего объема двигателя, лошадиных сил, производителя, модельного года и веса. Рассмотреть Cylinders, Mfg, и Model_Year в качестве категориальных переменных.

load carsmall
Cylinders = categorical(Cylinders);
Mfg = categorical(cellstr(Mfg));
Model_Year = categorical(Model_Year);
X = table(Acceleration,Cylinders,Displacement,Horsepower,Mfg,...
    Model_Year,Weight,MPG);
rng('default'); % For reproducibility

Задать параметры настройки

Рассмотрите возможность настройки:

  • Сложность (глубина) деревьев в лесу. Глубокие деревья имеют тенденцию к чрезмерной посадке, но неглубокие деревья имеют тенденцию к недостижению. Поэтому укажите, что минимальное число наблюдений на лист должно быть не более 20.

  • При выращивании деревьев количество предикторов для выборки на каждом узле. Укажите выборку от 1 до всех предикторов.

bayesopt, функция, которая реализует байесовскую оптимизацию, требует, чтобы вы передали эти спецификации как optimizableVariable объекты.

maxMinLS = 20;
minLS = optimizableVariable('minLS',[1,maxMinLS],'Type','integer');
numPTS = optimizableVariable('numPTS',[1,size(X,2)-1],'Type','integer');
hyperparametersRF = [minLS; numPTS];

hyperparametersRF является массивом 2 на 1 OptimizableVariable объекты.

Также следует рассмотреть возможность настройки количества деревьев в ансамбле. bayesopt обычно выбирают случайные леса, содержащие много деревьев, потому что ансамбли с большим количеством обучающихся более точны. Если существуют вычислительные ресурсы, и вы предпочитаете ансамбли с меньшим количеством деревьев, то попробуйте настроить количество деревьев отдельно от других параметров или наказать модели, содержащие много учеников.

Определение целевой функции

Определите целевую функцию для алгоритма байесовской оптимизации для оптимизации. Функция должна:

  • Примите параметры для настройки в качестве входных данных.

  • Обучение случайного леса с помощью TreeBagger. В TreeBagger , укажите параметры для настройки и укажите возврат индексов вне пакета.

  • Оценка ошибки квантиля вне пакета на основе медианы.

  • Возвращает ошибку квантиля вне пакета.

function oobErr = oobErrRF(params,X)
%oobErrRF Trains random forest and estimates out-of-bag quantile error
%   oobErr trains a random forest of 300 regression trees using the
%   predictor data in X and the parameter specification in params, and then
%   returns the out-of-bag quantile error based on the median. X is a table
%   and params is an array of OptimizableVariable objects corresponding to
%   the minimum leaf size and number of predictors to sample at each node.
randomForest = TreeBagger(300,X,'MPG','Method','regression',...
    'OOBPrediction','on','MinLeafSize',params.minLS,...
    'NumPredictorstoSample',params.numPTS);
oobErr = oobQuantileError(randomForest);
end


Минимизация цели с помощью байесовской оптимизации

Найдите модель, достигающую минимальной, пенализированной ошибки квантиля вне пакета в отношении сложности дерева и количества предикторов для выборки в каждом узле с использованием байесовской оптимизации. Укажите ожидаемую функцию улучшения плюс в качестве функции сбора данных и подавьте печать информации об оптимизации.

results = bayesopt(@(params)oobErrRF(params,X),hyperparametersRF,...
    'AcquisitionFunctionName','expected-improvement-plus','Verbose',0);

results является BayesianOptimization объект, содержащий, среди прочего, минимум целевой функции и оптимизированные значения гиперпараметров.

Отображение наблюдаемого минимума целевой функции и значений оптимизированного гиперпараметра.

bestOOBErr = results.MinObjective
bestHyperparameters = results.XAtMinObjective
bestOOBErr =

    1.0890


bestHyperparameters =

  1×2 table

    minLS    numPTS
    _____    ______

      7        7   

Модель поезда, использующая оптимизированные гиперпараметры

Обучите случайный лес, используя весь набор данных и оптимизированные значения гиперпараметров.

Mdl = TreeBagger(300,X,'MPG','Method','regression',...
    'MinLeafSize',bestHyperparameters.minLS,...
    'NumPredictorstoSample',bestHyperparameters.numPTS);

Mdl является TreeBagger объект, оптимизированный для медианного прогнозирования. Вы можете предсказать медианную экономию топлива, учитывая данные предиктора, передав Mdl и новые данные для quantilePredict.

См. также

| | | |

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