Этот пример показывает, как оптимизировать гиперпараметры повышенного ансамбля регрессии. Оптимизация минимизирует потерю перекрестной проверки модели.
Проблема состоит в том, чтобы смоделировать эффективность в милях на галлон автомобиля, на основе его ускорения, объема двигателя, лошадиной силы и веса. Загрузите данные carsmall, которые содержат эти и другие предикторы.
load carsmall
X = [Acceleration Displacement Horsepower Weight];
Y = MPG;Соответствуйте ансамблю регрессии к данным с помощью алгоритма LSBoost, и с помощью суррогатных разделений. Оптимизируйте получившуюся модель путем варьирования количества изучения циклов, максимального количества суррогатных разделений и изучить уровня. Кроме того, позвольте оптимизации повторно делить перекрестную проверку между каждой итерацией.
Для воспроизводимости, набор случайный seed и использование функция приобретения 'expected-improvement-plus'.
rng default Mdl = fitrensemble(X,Y,... 'Method','LSBoost',... 'Learner',templateTree('Surrogate','on'),... 'OptimizeHyperparameters',{'NumLearningCycles','MaxNumSplits','LearnRate'},... 'HyperparameterOptimizationOptions',struct('Repartition',true,... 'AcquisitionFunctionName','expected-improvement-plus'))

|====================================================================================================================|
| Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | NumLearningC-| LearnRate | MaxNumSplits |
| | result | | runtime | (observed) | (estim.) | ycles | | |
|====================================================================================================================|
| 1 | Best | 3.5411 | 11.08 | 3.5411 | 3.5411 | 383 | 0.51519 | 4 |
| 2 | Best | 3.4755 | 0.58129 | 3.4755 | 3.479 | 16 | 0.66503 | 7 |
| 3 | Best | 3.1893 | 0.99491 | 3.1893 | 3.1893 | 33 | 0.2556 | 92 |
| 4 | Accept | 6.3077 | 0.41169 | 3.1893 | 3.1898 | 13 | 0.0053227 | 5 |
| 5 | Accept | 3.4482 | 7.2195 | 3.1893 | 3.1897 | 302 | 0.50394 | 99 |
| 6 | Accept | 4.2638 | 0.3518 | 3.1893 | 3.1897 | 10 | 0.11317 | 93 |
| 7 | Accept | 3.2449 | 0.29776 | 3.1893 | 3.1898 | 10 | 0.34912 | 93 |
| 8 | Accept | 3.4495 | 0.36121 | 3.1893 | 3.19 | 14 | 0.99651 | 98 |
| 9 | Accept | 5.8544 | 6.8997 | 3.1893 | 3.1904 | 308 | 0.0010002 | 2 |
| 10 | Accept | 3.1985 | 0.28893 | 3.1893 | 3.1876 | 10 | 0.27825 | 96 |
| 11 | Accept | 3.3339 | 10.76 | 3.1893 | 3.1886 | 447 | 0.28212 | 97 |
| 12 | Best | 2.9764 | 0.33911 | 2.9764 | 3.1412 | 11 | 0.26217 | 98 |
| 13 | Accept | 3.1958 | 0.28967 | 2.9764 | 3.1537 | 10 | 0.26754 | 12 |
| 14 | Accept | 3.2951 | 12.284 | 2.9764 | 3.1458 | 487 | 0.022491 | 57 |
| 15 | Accept | 5.8041 | 0.29876 | 2.9764 | 3.1653 | 10 | 0.032877 | 11 |
| 16 | Accept | 3.4128 | 12.493 | 2.9764 | 3.1677 | 500 | 0.065337 | 19 |
| 17 | Accept | 3.2357 | 0.63492 | 2.9764 | 3.1653 | 24 | 0.30654 | 7 |
| 18 | Accept | 3.2848 | 3.2373 | 2.9764 | 3.1605 | 129 | 0.22496 | 91 |
| 19 | Accept | 3.1073 | 0.52902 | 2.9764 | 3.1408 | 16 | 0.29063 | 97 |
| 20 | Accept | 6.422 | 0.33719 | 2.9764 | 3.1415 | 10 | 0.0010038 | 76 |
|====================================================================================================================|
| Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | NumLearningC-| LearnRate | MaxNumSplits |
| | result | | runtime | (observed) | (estim.) | ycles | | |
|====================================================================================================================|
| 21 | Accept | 3.2146 | 0.53137 | 2.9764 | 3.157 | 18 | 0.27208 | 96 |
| 22 | Accept | 3.0515 | 0.28428 | 2.9764 | 3.1365 | 10 | 0.29884 | 66 |
| 23 | Accept | 3.3721 | 12.212 | 2.9764 | 3.1357 | 500 | 0.0042631 | 84 |
| 24 | Accept | 3.1053 | 12.465 | 2.9764 | 3.136 | 499 | 0.0093964 | 13 |
| 25 | Accept | 3.1303 | 12.322 | 2.9764 | 3.1357 | 499 | 0.0092601 | 73 |
| 26 | Accept | 3.1956 | 11.799 | 2.9764 | 3.1354 | 500 | 0.0074991 | 6 |
| 27 | Accept | 3.2926 | 12.564 | 2.9764 | 3.1366 | 500 | 0.011141 | 69 |
| 28 | Accept | 4.4567 | 1.7648 | 2.9764 | 3.1372 | 74 | 0.015189 | 1 |
| 29 | Accept | 3.4466 | 4.2533 | 2.9764 | 3.1383 | 186 | 0.99992 | 4 |
| 30 | Accept | 6.1348 | 1.6981 | 2.9764 | 3.137 | 68 | 0.0023006 | 12 |
__________________________________________________________
Optimization completed.
MaxObjectiveEvaluations of 30 reached.
Total function evaluations: 30
Total elapsed time: 192.9234 seconds.
Total objective function evaluation time: 139.5846
Best observed feasible point:
NumLearningCycles LearnRate MaxNumSplits
_________________ _________ ____________
11 0.26217 98
Observed objective function value = 2.9764
Estimated objective function value = 3.137
Function evaluation time = 0.33911
Best estimated feasible point (according to models):
NumLearningCycles LearnRate MaxNumSplits
_________________ _________ ____________
10 0.29884 66
Estimated objective function value = 3.137
Estimated function evaluation time = 0.31123
Mdl =
classreg.learning.regr.RegressionEnsemble
ResponseName: 'Y'
CategoricalPredictors: []
ResponseTransform: 'none'
NumObservations: 94
HyperparameterOptimizationResults: [1×1 BayesianOptimization]
NumTrained: 10
Method: 'LSBoost'
LearnerNames: {'Tree'}
ReasonForTermination: 'Terminated normally after completing the requested number of training cycles.'
FitInfo: [10×1 double]
FitInfoDescription: {2×1 cell}
Regularization: []
Properties, Methods
Сравните потерю для той из повышенной, неоптимизированной модели, и тому из ансамбля по умолчанию.
loss = kfoldLoss(crossval(Mdl,'kfold',10))loss = 23.3445
Mdl2 = fitrensemble(X,Y,... 'Method','LSBoost',... 'Learner',templateTree('Surrogate','on')); loss2 = kfoldLoss(crossval(Mdl2,'kfold',10))
loss2 = 37.0534
Mdl3 = fitrensemble(X,Y);
loss3 = kfoldLoss(crossval(Mdl3,'kfold',10))loss3 = 38.4890
Для различного способа оптимизировать этот ансамбль, смотрите, Оптимизируют Ансамбль Регрессии Используя Перекрестную проверку.