В этом примере показано, как реализовать Байесовую оптимизацию, чтобы настроить гиперпараметры случайного леса деревьев регрессии с помощью ошибки квантиля. Настройка модели с помощью ошибки квантиля, а не среднеквадратической ошибки, является соответствующей, если вы планируете использовать модель, чтобы предсказать условные квантили, а не условные средние значения.
Загрузите 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
.
bayesopt
| oobQuantileError
| optimizableVariable
| TreeBagger
| TreeBagger