这个示例展示了如何使用分位数误差实现贝叶斯优化来调优回归树的随机森林的超参数。如果您计划使用模型来预测条件分位数而不是条件方法,那么使用分位数误差而不是均方误差来优化模型是合适的。
加载carsmall
数据集。考虑一个模型,它可以根据汽车的加速度、汽缸数、发动机排量、马力、制造商、车型年份和重量来预测汽车的燃油经济性中值。考虑气瓶
那制造行业
,Model_Year
作为分类变量。
加载carsmall汽缸=分类(圆柱);MFG =分类(CellStr(MFG));model_year =分类(model_year);X =表(加速,圆柱,位移,马力,MFG,......Model_Year、重量、MPG);rng (“默认”);%的再现性
考虑调整:
森林里的树木的复杂性(深度)。深树木倾向于过度合适,但浅树倾向于疲惫不堪。因此,指定每叶的最小观察数至多20。
在生长树木时,在每个节点处采样的预测器数量。从所有预测器指定从1中的抽样。
Bayesopt.
,实现贝叶斯优化的功能,要求您将这些规范传递为优化的不变性
对象。
maxMinLS = 20;minLS = optimizableVariable (“minLS”,[1,maxminls],'类型'那“整数”);numPTS = optimizableVariable (“numPTS”,[1,尺寸(x,2)-1],'类型'那“整数”);hyperparametersrf = [minls;numpts];
hyperparametersrf.
是一个2×1阵列OptimizableVariable
对象。
您还应该考虑调整集合中的树木数量。Bayesopt.
倾向于选择包含许多树木的随机森林,因为有更多学习者的集合更准确。如果可用的计算资源是考虑因素,并且您更喜欢用较少的树木融合,然后考虑与其他参数或包含许多学习者的惩罚模型分开调整树数。
定义贝叶斯优化算法的目标函数以优化。该功能应该:
接受作为输入调谐的参数。
使用随机森林使用treebagger
。在里面treebagger
调用,指定要调整的参数和指定返回袋卸索引的参数。
基于中位数估计袋袋的量子误差。
返回袋子外分号错误。
函数Ooberr = Ooberrrf(params,x)%Ooberrrf培训随机森林并估计袋袋定量误差% oobErr训练一个由300棵回归树组成的随机森林X中的%预测数据和参数中的参数规范,然后%返回基于中位数的袋袋数量误差。x是一张桌子%和Params是一个与之相对应的优化物体数组在每个节点处采样的最小叶子大小和预测器数量的%。randomforest = treebagger(300,x,'mpg'那'方法'那'回归'那......'Oobprediction'那'在'那'minleafsize',params.minls,......'numpredictorstosample',params.numpts);Ooberr = OobquantileError(randomforest);结尾
找到使用贝叶斯型优化在每个节点上对每个节点进行采样的树木复杂性和预测器数的最小,惩罚,袋袋分位数误差的模型。指定预期的改进加上函数作为采集函数并抑制打印优化信息。
结果= bayesopt (@ (params) oobErrRF (params, X), hyperparametersRF,......'获取功能名称'那“expected-improvement-plus”那'verbose', 0);
结果
是A.BayesianOptimization
对象,其中包括目标函数的最小值和优化的超参数值。
显示观测到的目标函数的最小值和优化后的超参数值。
bestooberr =结果.minobjective besthyperparameters = equestion.xatminobjective
Bestooberr = 1.0890 BesthyperParameters = 1×2表Minls Numpts _____ ______ 7 7
使用整个数据集和优化的超参数值训练随机森林。
Mdl = TreeBagger (300 X,'mpg'那'方法'那'回归'那......'minleafsize'bestHyperparameters.minLS,......'numpredictorstosample',besthyperparameters.numpts);
Mdl
是treebagger
对位预测优化的对象。您可以通过传递给出预测器数据的中位燃料经济性Mdl
和新的数据standilepredict.
。
Bayesopt.
|OOBQUANTILEERROR.
|优化的不变性
|treebagger
|treebagger