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