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

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

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

Загрузите набор данных 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.

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

| | | |

Похожие темы