fitrensemble
为回归拟合学习器集合
语法
描述
返回训练好的回归集成模型对象(Mdl
= fitrensemble (资源描述
,ResponseVarName
)Mdl
),其中包含了使用LSBoost提升100棵回归树的结果以及表中的预测器和响应数据资源描述
.ResponseVarName
响应变量的名称在吗资源描述
.
例子
列车回归集合
创建一个回归集合,在给定气缸数量、气缸置换的体积、马力和重量的情况下预测汽车的燃油经济性。然后,用更少的预测器训练另一个集合。比较集合的样本内预测精度。
加载carsmall
数据集。将训练中使用的变量存储在表中。
负载carsmallTbl =表(气缸,排量,马力,重量,MPG);
训练一个回归集合。
Mdl1 = fitrensemble(Tbl,“英里”);
Mdl1
是一个RegressionEnsemble
模型。一些值得注意的特点Mdl1
是:
集成聚合算法为
“LSBoost”
.由于集成聚合方法是一种增强算法,因此允许最多10个分割的回归树组成集成。
一百棵树组成了这个整体。
因为英里/加仑
是MATLAB®工作区中的一个变量,您可以通过输入
Mdl1 = fitrensemble(Tbl,MPG);
使用训练过的回归集合来预测一辆排量为200立方英寸、150马力、重量为3000磅的四缸汽车的燃油经济性。
pMPG = predict(Mdl1,[4 200 150 3000])
pMPG = 25.6467
训练一个使用所有预测器的新集合资源描述
除了位移
.
公式=“MPG ~气缸+马力+重量”;Mdl2 = fitrensemble(Tbl,公式);
比较两者之间的再置换mseMdl1
而且Mdl2
.
mse1 = resubLoss(Mdl1)
Mse1 = 0.3096
mse2 = resubLoss(Mdl2)
Mse2 = 0.5861
在所有预测器上训练的集合的样本内MSE更低。
通过对数值预测值进行分组加速训练
通过使用训练增强回归树的集合fitrensemble
.减少培训时间“NumBins”
bin数值预测器的名值对参数。训练后,可以使用BinEdges
属性离散化
函数。
生成一个示例数据集。
rng (“默认”)%用于再现性N = 1e6;X1 = randi([-1,5],[N,1]);X2 = randi([5,10],[N,1]);X3 = randi([0,5],[N,1]);X4 = randi([1,10],[N,1]);X = [x1 x2 x3 x4];y = X1 + X2 + X3 + X4 + normrnd(0,1,[N,1]);
使用最小二乘增强训练增强回归树集合(LSBoost
为默认值)。计算函数的时间以进行比较。
tic Mdl1 = fitrensemble(X,y);toc
运行时间为78.662954秒。
,加快培训速度“NumBins”
名称-值对参数。如果您指定“NumBins”
值为正整数标量,然后软件将每个数值预测器放入指定数量的等概率容器中,然后在容器索引上生长树,而不是原始数据。该软件不bin分类预测器。
tic Mdl2 = fitrensemble(X,y,“NumBins”, 50);toc
运行时间为43.353208秒。
使用二进制数据而不是原始数据时,该过程大约快两倍。注意,经过的时间可能因操作系统而异。
通过再置换比较回归误差。
rsLoss = resubLoss(Mdl1)
rsLoss = 1.0134
rsLoss2 = resubLoss(Mdl2)
rsLoss2 = 1.0133
在这个例子中,对预测器值进行分类可以减少训练时间,而不会显著损失准确性。一般来说,当您拥有像本例中这样的大型数据集时,使用装箱选项可以加快训练速度,但可能会导致准确性下降。如果希望进一步减少训练时间,请指定较小数量的箱子。
方法重新生成已分箱的预测器数据BinEdges
属性离散化
函数。
X = Mdl2.X;预测数据Xbinned = 0(大小(X));edges = Mdl2.BinEdges;查找已分类预测符的索引。idxNumeric = find(~cellfun(@isempty,edges));如果iscolumn(idxNumeric) idxNumeric = idxNumeric';结束为j = idxNumeric x = x (:,j);如果x是一个表,则将x转换为数组。如果stable(x) x = table2array(x);结束使用离散化函数将x分组到箱子中。Xbinned =离散化(x,[-inf;边缘{};正]);Xbinned(:,j) = Xbinned;结束
Xbinned
包含数值预测器的容器索引,范围从1到容器数。Xbinned
值是0
对于分类预测器。如果X
包含南
S,然后是对应的Xbinned
值是南
年代。
提振集成的概化误差估计
估计增强回归树集合的泛化误差。
加载carsmall
数据集。选择气缸的数量、气缸置换的体积、马力和重量作为燃油经济性的预测指标。
负载carsmallX =[气缸排量马力重量];
使用10倍交叉验证对回归树集合进行交叉验证。使用决策树模板,指定每棵树应该只分割一次。
rng (1);%用于再现性t = templateTree(“MaxNumSplits”1);Mdl = fitrensemble(X,MPG,“学习者”t“CrossVal”,“上”);
Mdl
是一个RegressionPartitionedEnsemble
模型。
绘制累计,10倍交叉验证,均方误差(MSE)。显示集成估计的泛化误差。
kflc = kfoldLoss(Mdl,“模式”,“累积”);图;情节(kflc);ylabel (“10倍交叉验证MSE”);包含(“学习周期”);
estGenError = kflc(end)
estGenError = 26.2356
kfoldLoss
默认情况下返回泛化错误。然而,绘制累积损失可以让您监视损失如何随着弱学习器在集成中累积而变化。
在累积了大约30个弱学习器后,集成达到了大约23.5的MSE。
如果您对集成的泛化误差感到满意,那么,要创建一个预测模型,请使用除交叉验证之外的所有设置再次训练集成。然而,调优超参数是一个很好的实践,比如每棵树的最大决策分割数量和学习周期的数量。
优化回归集成
这个例子展示了如何使用自动优化超参数fitrensemble
.该示例使用carsmall
数据。
加载数据。
负载carsmall
通过使用自动超参数优化,可以找到将5倍交叉验证损失最小化的超参数。
Mdl = fitrensemble([马力,重量],MPG,“OptimizeHyperparameters”,“汽车”)
在本例中,为了重现性,设置随机种子并使用“expected-improvement-plus”
采集功能。另外,为了随机森林算法的再现性,指定“复制”
名-值对参数为真正的
对于树型学习者。
rng (“默认”) t = templateTree(“复制”,真正的);Mdl = fitrensemble([马力,重量],MPG,“OptimizeHyperparameters”,“汽车”,“学习者”t...“HyperparameterOptimizationOptions”结构(“AcquisitionFunctionName”,“expected-improvement-plus”))
|===================================================================================================================================| | Iter | Eval |目的:| |目的BestSoFar | BestSoFar | |方法NumLearningC - | LearnRate | MinLeafSize | | | |结果日志(1 +损失)运行时| |(观察)| (estim) | |永昌龙 | | | |===================================================================================================================================| | 最好1 | | 2.9726 | 18.836 | 2.9726 | 2.9726 |袋| 413 | - | 1 | | 2 |接受| 6.2619 | 1.2012 | 2.9726 | 3.6133 | LSBoost 57 | | 0.0016067 | 6 | | 3 |接受| 2.9975 | 0.89686 | 2.9726 | 2.9852 |32袋| | - | 2 | | 4 |接受| 4.1897 | 0.85009 | 2.9726 | 2.972 |包55 40 | | - - - | | | 5 |接受| 6.3321 | 1.4404 | 2.9726 | 2.9715 | LSBoost 55 | | 0.001005 | 2 | | 6 |的| 2.9714 | 1.5425 | 2.9714 | 2.9715 |袋| 39 | - | 1 | | 7最好| | 2.9615 | 0.93139 | 2.9615 | 2.9681 | 55袋| | - | 1 | | |接受8 | 3.017 | 0.30345 | 2.9615 | 2.98 | 17袋| | - | 1 | | | 9日接受| 4.1881 | 3.8999 | 2.9615 | 2.9801 | LSBoost | 164 | 0.93989 | 50 | | |接受10 | 3.6972 | 0.39524 | 2.9615| 2.98 | LSBoost | 12 | 0.99469 | 1 | | | 11日接受| 3.3742 | 0.36752 | 2.9615 | 2.9801 | LSBoost 15 | 0.13227 | 1 | | | | 12日接受| 4.1881 | 5.7079 | 2.9615 | 2.9799 | LSBoost | 205 | 0.083595 | 48 | | | 13日接受| 5.0943 | 1.062 | 2.9615 | 2.9799 | LSBoost 48 | 0.014581 | 1 | | | | 14日接受| 5.5926 | 1.2931 | 2.9615 | 2.9796 | LSBoost 47 50 | 0.010771 | | | | | 15日接受| 6.39 | 0.82105 | 2.9615 | 2.9793 | LSBoost 27 50 | 0.0010688 | | | | | 16日接受| 3.3304 | 1.5532 | 2.9615 | 2.9793|LSBoost|78 | 0.32479 | 7 | | 17 | Accept | 4.6487 | 0.45441 | 2.9615 | 2.9795 | LSBoost | 17 | 0.055039 | 5 | | 18 | Accept | 3.264 | 0.30135 | 2.9615 | 2.9796 | LSBoost | 11 | 0.29878 | 1 | | 19 | Accept | 4.1904 | 0.34713 | 2.9615 | 2.9621 | LSBoost | 13 | 0.26663 | 50 | | 20 | Accept | 3.5279 | 9.2767 | 2.9615 | 2.9626 | LSBoost | 499 | 0.25522 | 1 | |===================================================================================================================================| | Iter | Eval | Objective: | Objective | BestSoFar | BestSoFar | Method | NumLearningC-| LearnRate | MinLeafSize | | | result | log(1+loss) | runtime | (observed) | (estim.) | | ycles | | | |===================================================================================================================================| | 21 | Best | 2.9162 | 6.2861 | 2.9162 | 2.9178 | Bag | 423 | - | 2 | | 22 | Best | 2.9009 | 7.7541 | 2.9009 | 2.9043 | Bag | 499 | - | 3 | | 23 | Accept | 2.9064 | 8.4512 | 2.9009 | 2.9053 | Bag | 499 | - | 3 | | 24 | Accept | 2.909 | 7.0667 | 2.9009 | 2.9065 | Bag | 494 | - | 3 | | 25 | Accept | 2.9011 | 7.1287 | 2.9009 | 2.9051 | Bag | 499 | - | 3 | | 26 | Accept | 3.1863 | 0.25665 | 2.9009 | 2.9048 | LSBoost | 10 | 0.99529 | 10 | | 27 | Accept | 3.5444 | 8.9491 | 2.9009 | 2.9049 | LSBoost | 476 | 0.97599 | 5 | | 28 | Accept | 3.2334 | 0.53672 | 2.9009 | 2.9048 | LSBoost | 12 | 0.55679 | 4 | | 29 | Best | 2.8547 | 6.8756 | 2.8547 | 2.8575 | Bag | 487 | - | 5 | | 30 | Best | 2.84 | 7.3158 | 2.84 | 2.8436 | Bag | 499 | - | 6 |
__________________________________________________________ 优化完成。最大目标达到30个。总函数评估:30总运行时间:127.9461秒总目标函数评估时间:112.102最佳观测可行点:Method NumLearningCycles LearnRate MinLeafSize ______ _________________ _________ ___________ Bag 499 NaN 6观测目标函数值= 2.84估计目标函数值= 2.8436函数评估时间= 7.3158最佳估计可行点(根据模型):方法NumLearningCycles LearnRate MinLeafSize ______ _________________ _________ ___________ Bag 499 NaN 6估计目标函数值= 2.8436估计函数评估时间= 7.6476
Mdl = RegressionBaggedEnsemble ResponseName: 'Y' CategoricalPredictors: [] ResponseTransform: 'none' NumObservations: 94 HyperparameterOptimizationResults: [1x1 BayesianOptimization] NumTrained: 499 Method: 'Bag' LearnerNames: {'Tree'} reasonforterminate: '完成所要求的训练周期数后正常终止。'FitInfo: [] FitInfoDescription: 'None'正则化:[]FResample: 1 Replace: 1 UseObsForLearner: [94x499 logical]属性,方法
优化搜索回归方法(袋
而且LSBoost
),在NumLearningCycles
,在LearnRate
为LSBoost
,和过树的学习者MinLeafSize
.输出是估计交叉验证损失最小的集合回归。
使用交叉验证优化回归集合
创建具有令人满意的预测性能的增强回归树集合的一种方法是使用交叉验证来调整决策树的复杂性级别。在寻找最优的复杂度级别时,调整学习速率以最小化学习周期的数量。
此示例通过使用交叉验证选项“KFold”
名称-值对参数)和kfoldLoss
函数。或者,您可以使用“OptimizeHyperparameters”
名称-值对参数自动优化超参数。看到优化回归集成.
加载carsmall
数据集。选择气缸的数量、气缸置换的体积、马力和重量作为燃油经济性的预测指标。
负载carsmallTbl =表(气缸,排量,马力,重量,MPG);
提升回归树的树深度控制器的默认值是:
10
为MaxNumSplits
.5
为MinLeafSize
10
为MinParentSize
搜索最优的树复杂度级别:
交叉验证一组集成。从决策桩(一次分裂)开始,将后续集成的树复杂度指数级增加到最多n- 1次。n是样本容量。同样,每个集成的学习率在0.1到1之间变化。
估计每个集合的交叉验证均方误差(MSE)。
对于树的复杂度级别 , ,通过绘制它们与学习周期数的关系,比较累积的、交叉验证的集合的MSE。在同一图表上为每种学习率绘制单独的曲线。
选择MSE最小的曲线,并记下相应的学习周期和学习率。
交叉验证深度回归树和树桩。因为数据包含缺失值,所以使用代理分割。这些回归树作为基准。
rng (1)%用于再现性MdlDeep = fitrtree(Tbl,“英里”,“CrossVal”,“上”,“MergeLeaves”,“关闭”,...“MinParentSize”,1,“代孕”,“上”);MdlStump = fitrtree(Tbl,“英里”,“MaxNumSplits”,1,“CrossVal”,“上”,...“代孕”,“上”);
使用5倍交叉验证交叉验证150个增强回归树的集合。使用树模板:
使用序列中的值改变最大分割数 .米是这样的 并不比n- 1。
打开代理分割。
对于每个变量,使用集合{0.1,0.25,0.5,1}中的每个值调整学习率。
n = size(Tbl,1);M = floor(log2(n - 1));learnRate = [0.1 0.25 0.5 1];numLR = numel(learnRate);maxnumsplitting = 2.^(0:m);numMNS = nummel (maxnumsplitting);numTrees = 150;Mdl = cell(numMNS,numLR);为k = 1:numLR为j = 1:numMNS t =模板树(“MaxNumSplits”maxNumSplits (j),“代孕”,“上”);Mdl{j,k} = fitrensemble(Tbl,“英里”,“NumLearningCycles”numTrees,...“学习者”t“KFold”5,“LearnRate”, learnRate (k));结束结束
估计每个集合的累积的、交叉验证的MSE。
kflAll = @(x)kfoldLoss(x,“模式”,“累积”);errorCell = cellfun(kflAll,Mdl,“统一”、假);error =重塑(cell2mat(errorCell),[numTrees nummel (maxnumsplitting) nummel (learnRate)]);errorDeep = kfoldLoss(MdlDeep);errorStump = kfoldLoss(MdlStump);
绘制交叉验证的MSE如何随着集合中树的数量的增加而表现。在同一图上绘制有关学习率的曲线,并为不同的树复杂性级别绘制单独的图。选择要绘制的树复杂度级别的子集。
mnsPlot = [1 round(数字(maxnumsplitting)/2)数字(maxnumsplitting)];图;为k = 1:3次要情节(2 2 k)情节(挤压(错误(:,mnsPlot (k):)),“线宽”2)轴紧持有在H = gca;情节(h。XLim,[errorDeep errorDeep],“。b”,“线宽”, 2)情节(h。XLim,[errorStump errorStump],“r”,“线宽”2)图(h.XLim min(最低(错误(:,mnsPlot (k):)))。* [1],“——k”) h.YLim = [10 50];包含(“树的数量”) ylabel (“旨在MSE”)标题(sprintf (' maxnumsplitting = %0.3g', maxnumsplitting (mnsPlot(k)))) hold从结束hL = legend([cellstr(num2str(learnRate','学习率= %0.2f'));...“深树”;“树桩”;“最小MSE。”]);hL.Position(1) = 0.6;
每条曲线都包含一个最小的交叉验证MSE,该MSE发生在集合中最优的树数处。
确定最大的分割数量,树的数量,以及产生最低总体MSE的学习率。
[miner,minErrIdxLin] = min(error(:)));[idxNumTrees,idxMNS,idxLR] = ind2sub(size(error),minErrIdxLin);流(“\ nMin。MSE = %0.5f'minErr)
最小MSE = 16.77593
流('\ nooptimal参数值:\nNum. '树木= %d', idxNumTrees);
最优参数值:Num. Trees = 78
流('\ nmaxnumsplitting = %d\nLearning Rate = %0.2f\n',...maxNumSplits (idxMNS) learnRate (idxLR))
maxnumsplitting = 1学习率= 0.25
基于最优超参数和整个训练集创建一个预测集合。
tFinal = templateTree(“MaxNumSplits”maxNumSplits (idxMNS),“代孕”,“上”);final = fitrensemble(Tbl,“英里”,“NumLearningCycles”idxNumTrees,...“学习者”tFinal,“LearnRate”learnRate (idxLR))
MdlFinal = RegressionEnsemble PredictorNames: {1x4 cell} ResponseName: 'MPG' CategoricalPredictors: [] ResponseTransform: 'none' NumObservations: 94 NumTrained: 78 Method: 'LSBoost' LearnerNames: {'Tree'} reasonforterminate: '完成所要求的训练周期数量后正常终止。'FitInfo: [78x1 double] FitInfoDescription: {2x1 cell}正则化:[]属性,方法
MdlFinal
是一个RegressionEnsemble
.要根据汽车的气缸数量、气缸置换的体积、马力和重量来预测汽车的燃油经济性,您可以传递预测数据和MdlFinal
来预测
.
不再使用交叉验证选项手动搜索最优值(“KFold”
)及kfoldLoss
函数,可以使用“OptimizeHyperparameters”
名称-值对参数。当你指定“OptimizeHyperparameters”
,软件采用贝叶斯优化方法自动找到最优参数。得到的最优值“OptimizeHyperparameters”
可能与使用手动搜索获得的结果不同。
t = templateTree(“代孕”,“上”);mdl = fitrensemble(Tbl,“英里”,“学习者”t...“OptimizeHyperparameters”, {“NumLearningCycles”,“LearnRate”,“MaxNumSplits”})
|====================================================================================================================| | Iter | Eval |目的:| |目的BestSoFar | BestSoFar | NumLearningC - | LearnRate | MaxNumSplits | | | |结果日志(1 +损失)运行时| |(观察)| (estim) |永昌龙 | | | |====================================================================================================================| | 最好1 | | 3.3955 | 1.0391 | 3.3955 | 3.3955 | 26 | 0.072054 | 3 | | 2 |接受| 6.0976 | 3.5032 | 3.3955 | 3.5549 | 170 | 70 | 0.0010295 | | 3 |最好| 3.2914 | 5.5499 | 3.2914 | 3.2917 | 273 | 0.61026 | 6 | | 4 | |6.1839 | 1.5001 | 3.2914 | 3.2915 | 80 | 0.0016871 | 1 | | 5 |的| 2.9298 | 0.6582 | 2.9298 | 2.9307 | 32 | 0.21324 | 1 | | 6 |接受| 2.9641 | 0.85101 | 2.9298 | 2.9367 | 35 | 0.18385 | 5 | | | 7日接受| 2.9385 | 0.81574 | 2.9298 | 2.9373 | 35 | 0.25593 | 2 | | |接受8 | 3.0375 | 0.86511 | 2.9298 | 2.9371 | 37 | 0.23767 | 6 | | 9最好| | 2.9246 | 0.84288 | 2.9246 | 2.9267 | 37 | 0.20324 | 1 | | 10最好| | 2.924 | 0.64314 | 2.924 | 2.9243 | 31日| 0.19969 | 1 | | | 11日接受| 2.9273 |31 | 0.93158 | 2.924 | 2.9237 | 0.19701 | 1 | | | 12日接受| 5.6933 | 1.4692 | 2.924 | 2.9234 | 34 | 0.011228 | 98 | | | 13日接受| 2.9253 | 0.69086 | 2.924 | 2.925 | 35 | 0.18696 | 1 | | | 14日接受| 2.9307 | 0.69125 | 2.924 | 2.9242 | 35 | 0.18443 | 2 | |最好15 | | 2.9216 | 0.74979 | 2.9216 | 2.9208 | 38 | 0.31653 | 1 | | 16 |接受| 3.0748 | 0.866 | 2.9216 | 2.9205 | 43 | 0.98259 | 1 | | | 17日接受| 2.9328 | 0.90027 | 2.9216 | 2.9237 | 37 | 0.2568 | 1 | | | 18日接受| 2.924 | 0.6974|2.9216 | 2.9246 | 35 | 0.45579 | 1 | | 19 | Best | 2.9146 | 0.63378 | 2.9146 | 2.9187 | 32 | 0.37565 | 1 | | 20 | Best | 2.9007 | 0.63013 | 2.9007 | 2.9115 | 31 | 0.36781 | 1 | |====================================================================================================================| | Iter | Eval | Objective: | Objective | BestSoFar | BestSoFar | NumLearningC-| LearnRate | MaxNumSplits | | | result | log(1+loss) | runtime | (observed) | (estim.) | ycles | | | |====================================================================================================================| | 21 | Best | 2.8895 | 0.25113 | 2.8895 | 2.8919 | 10 | 0.36556 | 1 | | 22 | Best | 2.8862 | 0.33802 | 2.8862 | 2.889 | 10 | 0.37005 | 1 | | 23 | Best | 2.8833 | 0.27242 | 2.8833 | 2.8868 | 10 | 0.34125 | 1 | | 24 | Accept | 2.898 | 0.52443 | 2.8833 | 2.8894 | 10 | 0.39081 | 1 | | 25 | Accept | 2.8954 | 1.1699 | 2.8833 | 2.8906 | 10 | 0.34777 | 1 | | 26 | Accept | 6.2168 | 0.26447 | 2.8833 | 2.8908 | 10 | 0.011709 | 1 | | 27 | Accept | 2.9462 | 0.27046 | 2.8833 | 2.8986 | 10 | 0.31727 | 1 | | 28 | Accept | 5.4869 | 0.40364 | 2.8833 | 2.8984 | 10 | 0.04809 | 98 | | 29 | Accept | 4.1711 | 0.25055 | 2.8833 | 2.8879 | 10 | 0.12381 | 1 | | 30 | Accept | 2.9018 | 0.35968 | 2.8833 | 2.8881 | 15 | 0.37071 | 1 |
__________________________________________________________ 优化完成。最大目标达到30个。总函数评估:30总运行时间:44.529秒总目标函数评估时间:28.6333最佳观测可行点:NumLearningCycles LearnRate MaxNumSplits _________________ _________ ____________ 10 0.34125 1观测目标函数值= 2.8833估计目标函数值= 2.903函数评估时间= 0.27242最佳估计可行点(根据模型):NumLearningCycles LearnRate maxnum_________________ _________ ____________ 10 0.37005 1估计目标函数值= 2.8881估计函数评估时间= 0.35088
mdl = RegressionEnsemble PredictorNames: {1x4 cell} ResponseName: 'MPG' CategoricalPredictors: [] ResponseTransform: 'none' NumObservations: 94 HyperparameterOptimizationResults: [1x1 BayesianOptimization] NumTrained: 10 Method: 'LSBoost' LearnerNames: {'Tree'} reasonforterminate: '完成所要求的训练周期数后正常终止。'FitInfo: [10x1 double] FitInfoDescription: {2x1 cell}正则化:[]属性,方法
输入参数
资源描述
- - - - - -样本数据
表格
用于训练模型的示例数据,指定为表。每行资源描述
对应一个观测值,每一列对应一个预测变量。资源描述
可以为响应变量包含一个额外的列。不允许使用字符向量的单元格数组以外的多列变量和单元格数组。
如果
资源描述
包含响应变量,并且希望使用所有剩余变量作为预测器,然后使用指定响应变量ResponseVarName
.如果
资源描述
包含响应变量,并且您希望仅使用剩余变量的子集作为预测器,然后使用指定公式公式
.如果
资源描述
不包含响应变量,则指定响应数据使用Y
.响应变量的长度和的行数资源描述
必须是相等的。
请注意
为节省内存和执行时间,提供X
而且Y
而不是资源描述
.
数据类型:表格
ResponseVarName
- - - - - -响应变量名
响应变量的名称资源描述
响应变量名,指定为响应变量的名称资源描述
.
您必须指定ResponseVarName
作为字符向量或字符串标量。例如,如果资源描述。Y
是响应变量,然后指定ResponseVarName
作为“Y”
.否则,fitrensemble
处理的所有列资源描述
作为预测变量。
数据类型:字符
|字符串
公式
- - - - - -响应变量的解释模型和预测变量的子集
特征向量|字符串标量
响应变量和预测变量子集的解释模型,在表单中指定为字符向量或字符串标量“Y ~ x1 + x2 + x3”
.在这种形式下,Y
表示响应变量,和x1
,x2
,x3
表示预测变量。
中指定变量的子集资源描述
使用公式作为训练模型的预测因子。如果您指定了一个公式,那么该软件不使用任何变量资源描述
没有出现在公式
.
公式中的变量名必须同时为资源描述
(Tbl.Properties.VariableNames
)和有效的MATLAB®标识符。中的变量名可以验证资源描述
通过使用isvarname
函数。变量名无效,则可以使用matlab.lang.makeValidName
函数。
数据类型:字符
|字符串
X
- - - - - -预测数据
数字矩阵
预测器数据,指定为数值矩阵。
每行对应一个观测值,每列对应一个预测变量。
的长度Y
的行数X
必须是相等的。
中出现的顺序指定预测符的名称X
,使用PredictorNames
名称-值对参数。
数据类型:单
|双
名称-值参数
指定可选参数对为Name1 = Value1,…,以=家
,在那里的名字
参数名称和价值
对应的值。名称-值参数必须出现在其他参数之后,但对的顺序无关紧要。
在R2021a之前,使用逗号分隔每个名称和值,并将其括起来的名字
在报价。
例子:“NumLearningCycles”,500年,“方法”,“包”、“学习者”,templateTree(),“CrossVal”,“上”
使用10倍交叉验证交叉验证500个袋装回归树的集合。
请注意
方法时,不能使用任何交叉验证名称-值参数“OptimizeHyperparameters”
名称-值参数。您可以修改交叉验证“OptimizeHyperparameters”
只有使用“HyperparameterOptimizationOptions”
名称-值参数。
方法
- - - - - -集成聚合法
“LSBoost”
(默认)|“包”
集合聚合方法,指定为由逗号分隔的对组成“方法”
而且“LSBoost”
或“包”
.
价值 | 方法 | 笔记 |
---|---|---|
“LSBoost” |
最小二乘增强(LSBoost) | 属性指定收缩学习率“LearnRate” 名称-值对参数。 |
“包” |
引导聚合(例如,随机森林)[2]) | fitrensemble 默认情况下,在每个分割(随机森林)中使用随机预测器选择的bagging。要使用没有随机选择的袋装,请使用树学习器“NumVariablesToSample” 值是“所有” . |
集成聚合算法和示例请参见算法,整体算法,选择一个适用的集成聚合方法.
例子:“方法”,“包”
学习者
- - - - - -弱学习器用于集成
“树”
(默认)|树模板对象|树模板对象的单元格向量
弱学习器的集合,指定为由逗号分隔的对组成“学习者”
而且“树”
、树模板对象或树模板对象的单元格向量。
“树”
(默认)fitrensemble
使用默认的回归树学习器,这与使用templateTree ()
.的默认值templateTree ()
的值“方法”
.对于袋装决策树,最大决策分割数(
“MaxNumSplits”
)是n - 1
,在那里n
是观测的数量。为每次分割随机选择的预测因子的数量(“NumVariablesToSample”
)是预测因子数量的三分之一。因此,fitrensemble
长得很深的决策树。您可以种植较浅的树,以减少模型复杂性或计算时间。对于增强决策树,
“MaxNumSplits”
是10和“NumVariablesToSample”
是“所有”
.因此,fitrensemble
长浅决策树。您可以种植更深的树以获得更好的精度。
看到
templateTree
用于弱学习器的默认设置。树模板对象-
fitrensemble
创建的树模板对象templateTree
.的名值对参数templateTree
指定树学习器的设置。细胞载体米树模板对象-
fitrensemble
生长米每个学习周期的回归树(参见NumLearningCycles
).例如,对于由两种类型的回归树组成的集成,供应{t1 t2}
,在那里t1
而且t2
回归树模板对象是否由返回templateTree
.
要获得可重复的结果,必须指定“复制”
的名称-值对参数templateTree
作为真正的
如果“NumVariablesToSample”
不是“所有”
.
有关培训学员人数的详细信息,请参见NumLearningCycles
而且提示.
例子:“学习者”,templateTree (MaxNumSplits, 5)
NPrint
- - - - - -打印输出频率
“关闭”
(默认)|正整数
打印输出频率,指定为由逗号分隔的对组成“NPrint”
一个正整数或者“关闭”
.
来跟踪的数量弱的学习者或折叠那fitrensemble
训练到目前为止,指定一个正整数。也就是说,如果你指定了正整数米:
没有指定任何交叉验证选项(例如,
CrossVal
),然后fitrensemble
每次完成训练时,向命令行显示一条消息米弱的学习者。还有一个交叉验证选项
fitrensemble
每次训练结束时,向命令行显示一条消息米折叠。
如果你指定“关闭”
,然后fitrensemble
当它完成训练弱学习器时不显示消息。
提示
对于一些增强决策树的最快训练,设置NPrint
到默认值“关闭”
.这一技巧在分类时持有方法
是“AdaBoostM1”
,“AdaBoostM2”
,“GentleBoost”
,或“LogitBoost”
,或当回归方法
是“LSBoost”
.
例子:“NPrint”,5
数据类型:单
|双
|字符
|字符串
NumBins
- - - - - -数值预测器的箱数
[]
(空的)(默认)|正整数标量
数值预测器的箱数,指定为逗号分隔的对,由“NumBins”
一个正整数标量。
如果
“NumBins”
Value为空(默认值)fitrensemble
不丢弃任何预测器。如果您指定
“NumBins”
值作为正整数标量(numBins
),然后fitrensemble
将每个数字预测器放入最多numBins
等概率容器,然后在容器索引上生长树,而不是原始数据。箱子的数量可以小于
numBins
如果一个预测器的值小于numBins
独特的价值观。fitrensemble
不包含分类预测符。
当您使用大型训练数据集时,此分箱选项可以加快训练速度,但可能会导致潜在的准确性下降。你可以试试“NumBins”,50岁
首先,然后根据精度和训练速度改变值。
经过训练的模型将料仓边存储在BinEdges
财产。
例子:“NumBins”,50岁
数据类型:单
|双
CategoricalPredictors
- - - - - -分类预测器列表
正整数向量|逻辑向量|字符矩阵|字符串数组|字符向量的单元格数组|“所有”
类别预测符列表,指定为此表中的值之一。
价值 | 描述 |
---|---|
正整数向量 | 向量中的每个条目都是一个指标值,表明相应的预测器是分类的。索引值在1和之间 如果 |
逻辑向量 | 一个 |
字符矩阵 | 矩阵的每一行都是一个预测变量的名称。名称必须与中的条目匹配PredictorNames .用额外的空格填充名字,这样字符矩阵的每一行都有相同的长度。 |
字符向量的字符串数组或单元格数组 | 数组中的每个元素都是一个预测变量的名称。名称必须与中的条目匹配PredictorNames . |
“所有” |
所有预测因素都是绝对的。 |
默认情况下,如果预测器数据在表(资源描述
),fitrensemble
如果一个变量是逻辑向量、无序分类向量、字符数组、字符串数组或字符向量的单元格数组,则假定它是分类的。如果预测器数据为矩阵(X
),fitrensemble
假设所有预测因子都是连续的。要将任何其他预测符标识为类别预测符,请使用CategoricalPredictors
名称-值参数。
例子:“CategoricalPredictors”、“所有”
数据类型:单
|双
|逻辑
|字符
|字符串
|细胞
PredictorNames
- - - - - -预测变量名称
唯一名称的字符串数组|唯一字符向量的单元格数组
预测器变量名,指定为唯一名称的字符串数组或唯一字符向量的单元格数组。的功能PredictorNames
这取决于你提供训练数据的方式。
如果你提供
X
而且Y
,那么你就可以使用了PredictorNames
中预测变量的名称X
.里面名字的顺序
PredictorNames
必须对应的列顺序X
.也就是说,PredictorNames {1}
名字是X (: 1)
,PredictorNames {2}
名字是X (:, 2)
等等。同时,大小(X, 2)
而且元素个数(PredictorNames)
必须是相等的。默认情况下,
PredictorNames
是{x1, x2,…}
.
如果你提供
资源描述
,那么你就可以使用了PredictorNames
选择在训练中使用哪些预测变量。也就是说,fitrensemble
中仅使用预测变量PredictorNames
以及训练中的响应变量。PredictorNames
的子集Tbl.Properties.VariableNames
并且不能包括响应变量的名称。默认情况下,
PredictorNames
包含所有预测变量的名称。一个好的实践是使用其中一种来指定训练的预测器
PredictorNames
或公式
,但不是两者都有。
例子:“PredictorNames”(“SepalLength”、“SepalWidth”,“PetalLength”,“PetalWidth”)
数据类型:字符串
|细胞
ResponseName
- - - - - -响应变量名
“Y”
(默认)|特征向量|字符串标量
响应变量名,指定为字符向量或字符串标量。
如果你提供
Y
,那么你就可以使用了ResponseName
为响应变量指定名称。如果你提供
ResponseVarName
或公式
,那么你就不能用了ResponseName
.
例子:“ResponseName”、“反应”
数据类型:字符
|字符串
ResponseTransform
- - - - - -响应转换
“没有”
(默认)|函数处理
响应转换,指定为任意一种“没有”
或者一个函数句柄。默认为“没有”
,这意味着@ (y) y
,或者没有变换。对于MATLAB函数或您定义的函数,使用其函数句柄进行响应变换。函数句柄必须接受一个向量(原始响应值)并返回一个相同大小的向量(转换后的响应值)。
例子:假设您创建了一个函数句柄,通过使用将指数变换应用于输入向量Myfunction = @(y)exp(y)
.然后,您可以将响应转换指定为myfunction ResponseTransform,
.
数据类型:字符
|字符串
|function_handle
选项
- - - - - -并行计算和设置随机数的选项
结构
用于并行计算和设置作为结构体指定的随机数的选项。创建选项
结构statset
.
请注意
您需要并行计算工具箱™来进行并行计算。
该表列出了选项字段及其值。
字段名 | 价值 | 默认的 |
---|---|---|
UseParallel |
将此值设置为 |
假 |
UseSubstreams |
将此值设置为 若要可重复计算,请设置 |
假 |
流 |
将此值指定为aRandStream 对象或此类对象的单元格数组。使用单个对象,除非UseParallel 值是真正的 和UseSubstreams 值是假 .在这种情况下,使用与并行池大小相同的单元格数组。 |
如果您没有指定流 ,然后fitrensemble 使用默认流或多个流。 |
有关使用可重复并行训练的示例,请参见并行列车分类集成.
对于双核及以上系统,fitrensemble
并行训练使用英特尔®线程构建块(TBB)。因此,指定UseParallel
选择真正的
可能无法在一台计算机上提供显著的加速。有关Intel TBB的详细信息,请参见https://www.intel.com/content/www/us/en/developer/tools/oneapi/onetbb.html.
例子:“选项”,statset (UseParallel,真的)
数据类型:结构体
CVPartition
- - - - - -交叉验证分区
[]
(默认)|cvpartition
分区对象
交叉验证分区,指定为cvpartition
创建的分区对象cvpartition
.分区对象指定交叉验证的类型以及训练集和验证集的索引。
要创建交叉验证的模型,您只能指定以下四个名称-值参数中的一个:CVPartition
,坚持
,KFold
,或Leaveout
.
例子:假设您创建一个随机分区,对500个观察结果进行5次交叉验证,使用cvp = cvpartition(500,'KFold',5)
.然后,您可以通过使用指定交叉验证的模型“CVPartition”,本量利
.
坚持
- - - - - -顽固性验证的数据比例
范围(0,1)中的标量值
用于拒绝验证的数据的百分比,指定为范围(0,1)中的标量值。如果你指定‘坚持’,p
,然后软件完成以下步骤:
随机选择并保留
p * 100
%的数据作为验证数据,并使用其余数据训练模型。将紧凑的、训练过的模型存储在
训练有素的
交叉验证模型的属性。
要创建交叉验证的模型,您只能指定以下四个名称-值参数中的一个:CVPartition
,坚持
,KFold
,或Leaveout
.
例子:“坚持”,0.1
数据类型:双
|单
KFold
- - - - - -折叠数
10
(默认)|大于1的正整数值
交叉验证模型中使用的折叠数,指定为大于1的正整数值。如果你指定KFold, k
,然后软件完成以下步骤:
将数据随机划分为
k
集。对于每个集合,保留该集合作为验证数据,并使用另一个集合训练模型
k
- 1集。存储
k
紧凑,训练有素的模型k
的-by-1单元格向量训练有素的
交叉验证模型的属性。
要创建交叉验证的模型,您只能指定以下四个名称-值参数中的一个:CVPartition
,坚持
,KFold
,或Leaveout
.
例子:“KFold”,5
数据类型:单
|双
Leaveout
- - - - - -省略一个交叉验证标志
“关闭”
(默认)|“上”
省略一个交叉验证标志,指定为“上”
或“关闭”
.如果你指定“Leaveout”,“上”
,然后对每个的n观察(n(不包括遗漏的观测数据)的观测数据数目是否已列明NumObservations
属性的模型),软件完成这些步骤:
保留一个观察数据作为验证数据,并使用另一个数据训练模型n- 1次观察。
存储n紧凑,训练有素的模型在一个n的-by-1单元格向量
训练有素的
交叉验证模型的属性。
要创建交叉验证的模型,您只能指定以下四个名称-值参数中的一个:CVPartition
,坚持
,KFold
,或Leaveout
.
例子:“Leaveout”,“上”
权重
- - - - - -观察权重
正数值向量|变量名资源描述
FResample
- - - - - -重新采样的训练集的分数
1
(默认)|(0,1)中的正标量
LearnRate
- - - - - -收缩学习率
1
(默认)|(0,1)中的数字标量
缩水率学习率,指定为由逗号分隔的对组成“LearnRate”
和区间(0,1]中的数值标量。
用收缩,设定来训练整体LearnRate
到小于1
,例如,0.1
是很受欢迎的选择。使用收缩训练集合需要更多的学习迭代,但通常可以获得更好的精度。
例子:“LearnRate”,0.1
数据类型:单
|双
OptimizeHyperparameters
- - - - - -需要优化的参数
“没有”
(默认)|“汽车”
|“所有”
|符合条件的参数名的字符串数组或单元格数组|向量的optimizableVariable
对象
参数进行优化,指定为由逗号分隔的对组成“OptimizeHyperparameters”
和以下其中之一:
“没有”
-不要优化。“汽车”
——使用{‘法’,‘NumLearningCycles’,‘LearnRate}
以及指定的默认参数学习者
:学习者
=“树”
(默认){' MinLeafSize '}
请注意
对于超参数优化,
学习者
必须是单个参数,而不是字符串数组或单元格数组。“所有”
-优化所有符合条件的参数。符合条件的参数名的字符串数组或单元格数组
向量的
optimizableVariable
对象的输出hyperparameters
优化尝试最小化交叉验证损失(错误)fitrensemble
通过改变参数。若要控制交叉验证类型和优化的其他方面,请使用HyperparameterOptimizationOptions
名称-值对。
请注意
的价值“OptimizeHyperparameters”
重写使用其他名称-值参数指定的任何值。例如,设置“OptimizeHyperparameters”
来“汽车”
原因fitrensemble
方法所对应的超参数“汽车”
选项并忽略超参数的任何指定值。
符合条件的参数fitrensemble
是:
方法
-合格的方法是“包”
或“LSBoost”
.NumLearningCycles
- - - - - -fitrensemble
在正整数中搜索,默认情况下按范围按对数缩放[10500]
.LearnRate
- - - - - -fitrensemble
在正实数之间搜索,默认情况下按范围按对数缩放(1 e - 3, 1)
.MinLeafSize
- - - - - -fitrensemble
搜索范围内对数缩放的整数[1,马克斯(2楼(NumObservations / 2)))
.MaxNumSplits
- - - - - -fitrensemble
搜索范围内对数缩放的整数NumObservations-1[1,马克斯(2))
.NumVariablesToSample
- - - - - -fitrensemble
搜索范围内的整数NumPredictors[1,马克斯(2))
.
通过传递的向量来设置非默认参数optimizableVariable
具有非默认值的对象。例如,
负载carsmallParams =超参数(“fitrensemble”,英里/加仑(功率、重量)“树”);参数(4)。Range = [1,20];
通过参数个数
作为价值OptimizeHyperparameters
.
默认情况下,迭代显示出现在命令行上,并根据优化中的超参数数量显示图形。对于优化和绘图,目标函数为Log(1 +交叉验证损失).要控制迭代显示,请设置详细的
字段“HyperparameterOptimizationOptions”
名称-值参数。为了控制情节,设置ShowPlots
字段“HyperparameterOptimizationOptions”
名称-值参数。
有关示例,请参见优化回归集成.
例子:OptimizeHyperparameters,{‘法’,‘NumLearningCycles’,‘LearnRate’,‘MinLeafSize’,‘MaxNumSplits}
HyperparameterOptimizationOptions
- - - - - -优化选项
结构
用于优化的选项,指定为结构。的效果OptimizeHyperparameters
名称-值参数。结构中的所有字段都是可选的。
字段名 | 值 | 默认的 |
---|---|---|
优化器 |
|
“bayesopt” |
AcquisitionFunctionName |
名称包括的获取函数 |
“expected-improvement-per-second-plus” |
MaxObjectiveEvaluations |
目标函数求值的最大个数。 | 30. 为“bayesopt” 而且“randomsearch” ,而整个电网为“gridsearch” |
MaxTime |
时间限制,指定为正实标量。时间限制以秒为单位,由 |
正 |
NumGridDivisions |
为“gridsearch” ,表示每个维度中值的数量。该值可以是一个正整数向量,给出每个维度的值的数量,也可以是一个适用于所有维度的标量。对于分类变量,该字段将被忽略。 |
10 |
ShowPlots |
指示是否显示图的逻辑值。如果真正的 ,该字段根据迭代次数绘制最佳观测目标函数值。如果使用贝叶斯优化(优化器 是“bayesopt” ),则该字段也绘制出目标函数的最佳估计值。最佳观测目标函数值和最佳估计目标函数值对应于BestSoFar(观察) 而且BestSoFar (estim)。 列的迭代分别显示。您可以在属性中找到这些值ObjectiveMinimumTrace 而且EstimatedObjectiveMinimumTrace 的Mdl。HyperparameterOptimizationResults .如果问题包含一个或两个用于贝叶斯优化的优化参数,则ShowPlots 还绘制了目标函数对参数的模型。 |
真正的 |
SaveIntermediateResults |
时是否保存结果的逻辑值优化器 是“bayesopt” .如果真正的 ,此字段将覆盖名为“BayesoptResults” 在每次迭代中。变量是aBayesianOptimization 对象。 |
假 |
详细的 |
在命令行显示:
详细信息请参见 |
1 |
UseParallel |
指示是否并行运行贝叶斯优化的逻辑值,这需要“并行计算工具箱”。由于并行计时的不可再现性,并行贝叶斯优化不一定产生可再现的结果。详细信息请参见并行贝叶斯优化. | 假 |
重新分区 |
指示是否在每次迭代中重新划分交叉验证的逻辑值。如果这个字段是 设置 |
假 |
使用以下三个选项中的一个即可。 | ||
CVPartition |
一个cvpartition 对象创建的cvpartition |
“Kfold”,5 如果没有指定交叉验证字段 |
坚持 |
范围内的标量(0,1) 表示抵抗分数 |
|
Kfold |
大于1的整数 |
例子:“HyperparameterOptimizationOptions”、结构(MaxObjectiveEvaluations, 60)
数据类型:结构体
输出参数
Mdl
-训练的回归集成模型
RegressionBaggedEnsemble
模型对象|RegressionEnsemble
模型对象|RegressionPartitionedEnsemble
交叉验证的模型对象
训练过的集成模型,作为此表中的模型对象之一返回。
模型对象 | 指定任何交叉验证选项? | 方法 设置 |
重新取样 设置 |
---|---|---|---|
RegressionBaggedEnsemble |
没有 | “包” |
“上” |
RegressionEnsemble |
没有 | “LSBoost” |
“关闭” |
RegressionPartitionedEnsemble |
是的 | “LSBoost” 或“包” |
“关闭” 或“上” |
控制交叉验证的名值对参数为CrossVal
,坚持
,KFold
,Leaveout
,CVPartition
.
引用Mdl
,使用点表示法。例如,要访问或显示未经交叉验证的集成的弱学习器模型对象的单元格向量,请输入Mdl。训练有素的
在命令行。
提示
算法
有关集成聚合算法的详细信息,请参见整体算法.
如果你指定
“方法”、“LSBoost”
,则软件默认生长浅决策树。属性可以调整树的深度MaxNumSplits
,MinLeafSize
,MinParentSize
使用名称-值对参数templateTree
.对于双核及以上系统,
fitrensemble
使用Intel Threading Building Blocks (TBB)并行训练。有关Intel TBB的详细信息,请参见https://www.intel.com/content/www/us/en/developer/tools/oneapi/onetbb.html.
参考文献
[1] Breiman, L.“装袋预测器。”机器学习.第26卷,第123-140页,1996年。
[2]布雷曼,L.《随机森林》。机器学习.卷45,页5-32,2001。
[3]弗洛因德,Y.和R. E.夏丕尔。在线学习的决策理论推广及其在辅助学习中的应用计算机与系统科学专业,第55卷,第119-139页,1997。
[4] Friedman, J.《贪婪函数逼近:梯度增强机》。统计年鉴《中国经济》,2001年第29卷第5期,第1189-1232页。
哈斯蒂、T.、R.蒂布谢拉尼和J.弗里德曼。统计学习的要素部分版,施普林格,纽约,2008年。
扩展功能
自动平行支撑
通过使用并行计算工具箱™自动并行运行计算来加速代码。
fitrensemble
控件支持并行训练“选项”
名称-值参数。使用以下命令创建选项statset
,例如选项= statset('UseParallel',true)
.并行集成训练要求您设置“方法”
参数的名称-值“包”
.并行训练仅适用于树型学习器,默认类型为“包”
.
要执行并行超参数优化,请使用“HyperparameterOptimizationOptions”、结构(UseParallel,真的)
类调用中的名称-值参数fitrensemble
函数。
有关并行超参数优化的更多信息,请参见并行贝叶斯优化.
有关并行计算的一般信息,请参见运行MATLAB函数与自动并行支持(并行计算工具箱).
GPU数组
通过使用并行计算工具箱™在图形处理单元(GPU)上运行来加速代码。
使用注意事项和限制:
fitrensemble
不支持引导聚合。您可以指定名称-值参数方法
只有当“LSBoost”
.如果你使用
templateTree
要创建学习模板对象或学习模板对象的单元格向量,可以指定名称-值参数代理
而且PredictorSelection
只有当“关闭”
而且“allsplits”
,分别。如果你使用
templateTree
并且数据包含分类预测器,您可以指定名称-值参数NumVariablesToSample
只有当“所有”
.fitrensemble
适合在GPU上的模型,如果以下任何一个应用:输入参数
X
是一个gpuArray
对象。输入参数
Y
是一个gpuArray
对象。输入参数
资源描述
包含gpuArray
变量。
如果你使用
templateTree
指定MaxNumSplits
,请注意fitrensemble
对于更深层的决策树,GPU上的执行速度可能不会比CPU快。
有关更多信息,请参见在图形处理器上运行MATLAB函数(并行计算工具箱).
版本历史
在R2016b中引入
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入该命令来运行该命令。Web浏览器不支持MATLAB命令。
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。