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

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

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

Загрузите 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

Задайте настраивающиеся параметры

Рассмотрите настройку:

  • Сложность (глубина) деревьев в лесу. Глубокие деревья имеют тенденцию сверхсоответствовать, но мелкие деревья стремятся к underfit. Поэтому укажите, что минимальное количество наблюдений на лист самое большее 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.

Смотрите также

| | | |

Похожие темы