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

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

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

Загрузите 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 вызовите, укажите параметры для настройки и задайте возврат индексов вне сумки.

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

  • Верните ошибку quantle out-of-bag.

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.

См. также

| | | |

Похожие темы