适合学习者的回归集合
返回经过训练的回归集成模型对象(Mdl
= fitrensemble (TBL.
,responsevarname.
)Mdl
),其中包含使用LSBoost和表中的预测器和响应数据增强100棵回归树的结果TBL.
.responsevarname.
中是响应变量的名称吗TBL.
.
创建一个回归集成,在给定气缸数量、气缸所取代的体积、马力和重量的情况下,预测汽车的燃油经济性。然后,使用较少的预测器训练另一个集合。比较集成的样本内预测精度。
加载Carsmall.
数据集。将训练中使用的变量存储在一个表中。
负载Carsmall.台=表(汽缸、排量、马力、重量、MPG);
训练回归集合。
Mdl1 = fitrensemble(资源描述,“英里”);
Mdl1
是一个RegressionEnsemble
模型。一些显著的特点Mdl1
是:
集成聚合算法为“LSBoost”
.
由于集成聚合方法是一种增强算法,回归树最多允许10次分裂组成集成。
一百棵树组成一个整体。
因为英里/加仑
是MATLAB®Workspace中的变量,可以通过输入
MDL1 = FITRESEMBLE(TBL,MPG);
使用训练过的回归集合来预测一辆排量为200立方英寸、马力为150马力、重量为3000磅的四缸汽车的燃油经济性。
pMPG = predict(Mdl1,[4 200 150 3000])
pMPG = 25.6467
使用中的所有预测器训练一个新的集合TBL.
除了位移
.
公式='MPG ~气缸+马力+重量';Mdl2 = fitrensemble(资源描述、公式);
比较两者的再取代mseMdl1
和Mdl2
.
mse1 = resubLoss (Mdl1)
mse1 = 0.3096
mse2 = resubLoss (Mdl2)
mse2 = 0.5861
所有预测因子列车的集合的样本MSE是较低的。
使用培训促进回归树的集合fitrensemble
.减少训练时间通过指定“NumBins”
二进制数值预测器的名称-值对参数。在训练之后,您可以通过使用毕业生
训练模型的性质和离散化
函数。
生成一个样本数据集。
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”
值作为一个正整数标量,然后软件将每个数值预测器放入指定数量的等概率容器中,然后在容器指数上生长树,而不是原始数据。该软件不会分类预测。
tic Mdl2 = fitrensemble(X,y,“NumBins”,50);TOC.
运行时间为43.353208秒。
当您使用装箱的数据而不是原始数据时,这个过程要快两倍。请注意,运行时间可能因操作系统而异。
比较回归误差的重新替代。
rsLoss = resubLoss (Mdl1)
RSLOSS = 1.0134.
rsLoss2 = resubLoss (Mdl2)
rsLoss2 = 1.0133
在该示例中,分纳预测值值可降低培训时间而无需显着损失准确性。通常,当您在此示例中具有像这样的大数据设置时,使用分箱选项速度升级培训,但导致精度降低。如果要进一步降低培训时间,请指定较少数量的垃圾箱。
通过使用使用的重现Binned预测测量数据毕业生
训练模型的性质和离散化
函数。
x = mdl2.x;%预测仪数据xbinned = zeros(尺寸(x));边缘= mdl2.binedges;找到被分类的预测器的指数。idxNumeric =找到(~ cellfun (@isempty边缘));如果iscolumn(idxNumeric) idxNumeric = idxNumeric';结尾为j = idxNumeric x = x (:,j);%如果x是一个表,则将x转换为数组。如果istable(x)x = table2array(x);结尾使用离散函数将%组X进入箱。xbinned =离散化(x,[无穷;边缘{};正]);Xbinned (:, j) = Xbinned;结尾
Xbinned
包含单位,范围为1到箱数,用于数字预测器。Xbinned
价值是0
分类预测。如果X
包含南
S,然后对应的Xbinned
价值是南
年代。
估计增强回归树集合的泛化误差。
加载Carsmall.
数据集。选择气缸的数量,由气缸取代的体积,马力,和重量作为燃料经济性的预测。
负载Carsmall.x = [气瓶位移马力重量];
使用10倍交叉验证交叉验证回归树的集合。使用决策树模板,指定每棵树只应为拆分一次。
rng (1);%的再现性t = templatetree(“MaxNumSplits”,1);mdl = fitrensemble(x,mpg,“学习者”t“CrossVal”,'在');
Mdl
是一个RegressionPartitionedEnsemble
模型。
绘制累积的、10倍交叉验证的均方误差(MSE)。显示估计的集合泛化误差。
kflc = kfoldLoss (Mdl,“模式”,'累积');图;情节(kflc);ylabel (“旨在MSE 10倍”);Xlabel(“学习周期”);
estGenError = kflc(结束)
estGenError = 26.2356
kfoldLoss
默认情况下返回泛化错误。但是,绘制累积损失使您可以监控随着弱学习器在集成中积累而发生的损失变化。
在积累了大约30个弱学习者后,该集成的MSE达到了23.5左右。
如果您对集合的泛化误差感到满意,那么,为了创建一个预测模型,使用除了交叉验证之外的所有设置再次训练集合。然而,调优超参数(如每棵树的最大决策分裂数和学习周期数)是一个很好的实践。
此示例显示如何自动优化超级参数fitrensemble
.示例使用Carsmall.
数据。
加载数据。
负载Carsmall.
通过使用自动超参数优化,可以找到最小化五倍交叉验证损失的超参数。
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.9718 | 9.4175 | 2.9718 | 2.9718 |包| 413 | - | 1|
|2 |接受|6.2619 |1.5813 |2.9718 |3.6127 |lsboost |57 |0.0016067 | 6 |
| 3 |接受| 2.9975 | 0.77235 | 2.9718 | 2.9847 |包| 32 | - | 2 |
| 4 |接受| 4.1897 | 1.2345 | 2.9718 | 2.9712 |包| 55 | - | 40 |
| 5 |接受| 6.3321 | 1.3497 | 2.9718 | 2.9707 | LSBoost | 55 | 0.001005 | 2 |
|6 |最好的2.9689 |0.88428 |2.9689 |2.9698 |袋子|39 |- | 1 |
| 7 |接受| 3.0113 | 0.53827 | 2.9689 | 2.9833 |包| 23 | - | 1 |
|8 |接受|2.9823 |10.275 |2.9689 |2.9832 |袋子|496 |- | 1 |
| 9 |接受| 4.1881 | 0.29182 | 2.9689 | 2.9833 | LSBoost | 12 | 0.883 | 50 |
| 10 |接受| 3.6685 | 8.304 | 2.9689 | 2.9832 | LSBoost | 398 | 0.97772 | 1 |
|11 |接受|3.4414 |0.36526 |2.9689 |2.9833 |lsboost |14 |0.13404 | 1 |
| 12 |接受| 4.1881 | 1.7024 | 2.9689 | 2.9832 | LSBoost | 84 | 0.079388 | 49 |
| 13 |接受| 5.6912 | 0.63921 | 2.9689 | 2.9832 | LSBoost | 27 | 0.014186 | 1 |
| 14 |接受| 3.5833 | 4.2041 | 2.9689 | 2.9831 | LSBoost | 198 | 0.29995 | 3 |
| 15 |接受| 5.7781 | 0.85679 | 2.9689 | 2.9829 | LSBoost | 37 | 0.010476 | 50 |
| 16 |接受| 6.4093 | 0.38185 | 2.9689 | 2.9828 | LSBoost | 18 | 0.0010034 | 50 |
| 17 |接受| 4.1881 | 2.0801 | 2.9689 | 2.9827 | LSBoost | 100 | 0.26658 | 50 |
| 18 |接受| 5.2307 | 0.30503 | 2.9689 | 2.983 | LSBoost | 12 | 0.051319 | 4 |
| 19 |接受| 5.9165 | 1.3811 | 2.9689 | 2.9835 | LSBoost | 59 | 0.0045433 | 1 |
|20 |接受|3.533 |1.3538 |2.9689 |2.9829 |lsboost |60 |0.3064 | 1 |
|===================================================================================================================================| | Iter | Eval |目的:|目标|Bestsofar |Bestsofar |方法|numlearningc- |学习|minleafsize || | result | log(1+loss) | runtime | (observed) | (estim.) | | ycles | | | |===================================================================================================================================| | 21 | Accept | 6.3754 | 0.27538 | 2.9689 | 2.9829 | LSBoost | 10 | 0.0037054 | 50 |
| 22 |接受| 5.7958 | 0.31299 | 2.9689 | 2.9827 | LSBoost | 13 | 0.028703 | 50 |
|23 |接受|3.2511 |0.5558 |2.9689 |2.9828 |lsboost |23 |0.57224 | 5 |
|24 |接受|3.5298 |7.504 |2.9689 |2.9726 |lsboost |367 |0.56349 | 1 |
| 25 |最佳| 2.9188 | 4.3433 | 2.9188 | 2.9219 |包| 216 | - | 2 |
| 26 |接受| 3.5858 | 0.25552 | 2.9188 | 2.9586 | LSBoost | 10 | 0.67582 | 1 |
| 27 |接受| 2.9384 | 10.206 | 2.9188 | 2.9444 |包| 500 | - | 2 |
| 28 |接受| 2.9322 | 11.78 | 2.9188 | 2.939 |包| 499 | - | 2 |
| 29 |接受| 2.937 | 11.726 | 2.9188 | 2.9378 |包| 498 | - | 2 |
|30 |接受|3.6531 |0.31678 |2.9188 |2.9379 |lsboost |11 |0.13843 | 11 |
__________________________________________________________ 优化完成。maxobjective达到30个。总函数计算:30总运行时间:141.9069秒。总目标函数评价时间:95.1937方法NumLearningCycles LearnRate MinLeafSize ______ _________________ _________ ___________ Bag 216 NaN 2观测目标函数值= 2.9188估计目标函数值= 2.9466函数评估时间= 4.3433最佳估计可行点(根据模型):方法NumLearningCycles LearnRate MinLeafSize ______ _________________ _________ ___________ Bag 500 NaN 2估计目标函数值= 2.9379估计函数评估时间= 11.0122
Mdl = RegressionBaggedEnsemble ResponseName:‘Y’CategoricalPredictors: [] ResponseTransform:“没有一个”NumObservations: 94 HyperparameterOptimizationResults:[1×1 BayesianOptimization] NumTrained: 500方法:“袋子”LearnerNames:{‘树’}ReasonForTermination:“终止通常在完成训练周期的请求的数量。FitInfo: [] FitInfoDescription: 'None'正则化:[]FResample: 1 Replace: 1 UseObsForLearner: [94×500 logical]属性,方法
优化搜索了回归的方法(袋
和LSBoost
),在NumLearningCycles
,在学习
为LSBoost
,和树之上的学习者MinLeafSize
.输出是具有最小交叉验证损失估计的集成回归。
创建具有令人满意的预测性能的提升回归树的合奏的一种方法是使用交叉验证调整决策树复杂程度。在寻找最佳复杂性级别的同时,调整学习速率,以最小化学习周期的数量。
这个示例通过使用交叉验证选项“KFold”
名称值对参数)和kfoldLoss
函数。或者,您可以使用“OptimizeHyperparameters”
名称-值对参数自动优化超参数。看到优化回归合奏.
加载Carsmall.
数据集。选择气缸的数量,由气缸取代的体积,马力,和重量作为燃料经济性的预测。
负载Carsmall.台=表(汽缸、排量、马力、重量、MPG);
用于升压回归树的树深度控制器的默认值是:
10
为MaxNumSplits
.
5
为MinLeafSize
10
为MinParentSize
为了寻找最优的树复杂度水平:
交叉验证一组集成。指数级增加后续集成的树复杂度,从决策树桩(一次拆分)到最多n- 1分裂。n为样本量。另外,每个集合的学习率在0.1到1之间变化。
估计每个集合的交叉验证均方误差(MSE)。
用于树木复杂度水平 , ,通过绘制它们与学习周期数的关系,比较集成的累积的、交叉验证的MSE。在同一个图上为每个学习率绘制单独的曲线。
选择实现最小MSE的曲线,并注意相应的学习周期和学习率。
交叉验证一个深度回归树和一个树桩。因为数据包含丢失的值,所以使用代理分割。这些回归树可以作为基准。
rng (1)%的再现性MdlDeep = fitrtree(资源描述,“英里”,“CrossVal”,'在','mergeleaves','离开',...'迷人',1,'代理','在');MdlStump = fitrtree(资源描述,“英里”,“MaxNumSplits”,1,“CrossVal”,'在',...'代理','在');
使用5倍交叉验证对150棵增强回归树进行交叉验证。使用树模板:
使用序列中的值改变分割的最大数目 .米是这样的, 不比n- 1。
打开代理劈叉。
对于每个变量,使用集合{0.1,0.25,0.5,1}中的每个值来调整学习率。
n =大小(1台);M =底(log2(n - 1));learnRate = [0.1 0.25 0.5 1];numLR =元素个数(learnRate);maxNumSplits = 2。^ (0:m);numMNS =元素个数(maxNumSplits);numTrees = 150;Mdl =细胞(numMNS numLR);为k = 1: numLR为j = 1:nummns t = templatetree(“MaxNumSplits”maxNumSplits (j),'代理','在');mdl {j,k} = fitrensemble(tbl,“英里”,“NumLearningCycles”,numtrees,...“学习者”t“KFold”5,“LearnRate”, learnRate (k));结尾结尾
估计每个集合的累积的、交叉验证的MSE。
kflall = @(x)kfoldloss(x,“模式”,'累积');errorCell = cellfun (Mdl kflAll,'制服'、假);[numTrees nummel (maxnumsplit) nummel (learnRate)]);errorDeep = kfoldLoss (MdlDeep);errorStump = kfoldLoss (MdlStump);
绘制交叉验证的MSE在集合中树的数量增加时的行为。在同一图上绘制关于学习率的曲线,并根据不同的树复杂度水平绘制不同的图。选择要绘制的树复杂度级别的子集。
mnsPlot = [1 round(nummel (maxnumsplents)/2) nummel (maxnumsplents)];图;为k = 1:3次要情节(2 2 k)情节(挤压(错误(:,mnsPlot (k):)),'行宽'2)轴紧的持有在甘氨胆酸h =;情节(h。XLim,[errorDeep errorDeep],“。b”,'行宽', 2)情节(h。XLim,[errorStump errorStump],'-.r','行宽',2)绘图(H.xlim,min(min(error(错误(minsplot(k),:))))。* [1 1],“——k”)H.YLIM = [10 50];Xlabel('树的数量') ylabel (“旨在MSE”)标题(Sprintf(“MaxNumSplits = % 0.3 g”maxNumSplits (mnsPlot (k))))从结尾hL =传奇([cellstr num2str (learnRate ','学习率= %0.2f'));...'深树';“树桩”;'闵。MSE']);hL.Position (1) = 0.6;
每个曲线包含在集合中最佳树木的最佳交叉验证的MSE。
确定总体上最低MSE的最大分裂数,树木数量和学习率。
[minErr, minErrIdxLin] = min(错误(:));[idxNumTrees, idxMNS idxLR] = ind2sub(大小(错误),minErrIdxLin);流(“\ nMin。MSE = % 0.5 f ',Minerr)
闵。MSE = 16.77593
流(“\ nOptimal参数值:\ nNum。树= % d ', idxNumTrees);
最优参数值:Num. Trees = 78
流('\ nmaxnumpartitions = %d\nLearning Rate = %0.2f\n',...maxNumSplits (idxMNS) learnRate (idxLR))
maxnumsplits = 1学习率= 0.25
建立一个基于最优超参数和整个训练集的预测集成。
tFinal = templateTree (“MaxNumSplits”maxNumSplits (idxMNS),'代理','在');MdlFinal = fitrensemble(资源描述,“英里”,“NumLearningCycles”idxNumTrees,...“学习者”,tfinal,“LearnRate”learnRate (idxLR))
MdlFinal = RegressionEnsemble PredictorNames: {' cylinder ' ' 'Displacement' ' '马力' '重量'}ResponseName: 'MPG' CategoricalPredictors: [] ResponseTransform: 'none' NumObservations: 94 NumTrained: 78 Method: 'LSBoost' LearnerNames: {'Tree'} ReasonForTermination: '在完成请求的训练周期数后正常终止。'FitInfo: [78×1 double] FitInfoDescription: {2×1 cell}正则化:[]属性,方法
MdlFinal
是一个RegressionEnsemble
.要预测一辆汽车的燃油经济性,根据它的汽缸数量,汽缸所取代的体积,马力和重量,你可以通过预测数据和MdlFinal
来预测
.
而不是使用交叉验证选项手动搜索最佳值(“KFold”
)和kfoldLoss
函数,则可以使用“OptimizeHyperparameters”
名称-值对的论点。当您指定时“OptimizeHyperparameters”
,软件使用贝叶斯优化自动查找最佳参数。通过使用获得的最佳值“OptimizeHyperparameters”
可以不同于使用手动搜索获得的。
t = templatetree('代理','在');mdl = fitrensemble(资源描述,“英里”,“学习者”t...“OptimizeHyperparameters”, {“NumLearningCycles”,“LearnRate”,“MaxNumSplits”})
|====================================================================================================================| | Iter | Eval |目的:| |目的BestSoFar | BestSoFar | NumLearningC - | LearnRate | MaxNumSplits | | | |结果日志(1 +损失)运行时| |(观察)| (estim) |永昌龙 | | | |====================================================================================================================| | 最好1 | | 3.3974 | 0.67187 | 3.3974 | 3.3974 | 26 | 0.072054 | 3 |
| 2 |接受| 6.0976 | 4.2306 | 3.3974 | 3.5568 | 170 | 0.0010295 | 70 |
| 3 |最佳| 3.2885 | 6.5786 | 3.2885 | 3.2887 | 273 | 0.61026 | 6 |
| 4 |接受| 6.1839 | 1.8593 | 3.2885 | 3.2885 | 80 | 0.0016871 | 1 |
| 5 | Best | 3.1395 | 0.26569 | 3.1395 | 3.1394 | 10 | 0.21358 | 2 |
|6 |接受|3.5817 |0.28615 |3.1395 |3.303 |10 |0.1666 |1 |
|7 |最好的3.1268 |0.31144 |3.1268 |3.2143 |10 |0.99816 |3 |
|8 |最好的3.0582 |0.31361 |3.0582 |3.0927 |10 |0.97817 |3 |
| 9 | Best | 3.0005 | 0.3115 | 3.0005 | 3.0084 | 10 | 0.38895 | 3 |
| 10 | Best | 2.9744 | 0.29252 | 2.9744 | 2.9894 | 10 | 0.39702 | 3 |
| 11 |最佳| 2.9704 | 0.26561 | 2.9704 | 2.9873 | 10 | 0.34289 | 5 |
| 12 |接受| 3.2964 | 0.27885 | 2.9704 | 2.9628 | 10 | 0.91391 | 98 |
| 13 |接受| 3.2164 | 0.32053 | 2.9704 | 2.9629 | 10 | 0.20551 | 20 |
| 14 |接受| 3.2572 | 0.30051 | 2.9704 | 2.9883 | 10 | 0.95514 | 13 |
| 15 |最佳| 2.9374 | 0.28596 | 2.9374 | 2.9544 | 10 | 0.28703 | 5 |
|16 |接受|2.9642 |0.26404 |2.9374 |2.9571 |10 |0.26332 |5 |
|17 |接受|2.9396 |0.34495 |2.9374 |2.9528 |10 |0.28684 |5 |
|18 |接受|2.9659 |0.29281 |2.9374 |2.9549 |10 |0.25925 |5 |
| 19 |接受| 2.9378 | 0.29386 | 2.9374 | 2.9532 | 10 | 0.34163 | 4 |
| 20 |接受| 5.8728 | 0.33079 | 2.9374 | 2.9514 | 10 | 0.028687 | 98 |
|====================================================================================================================| | Iter | Eval |目的:| |目的BestSoFar | BestSoFar | NumLearningC - | LearnRate | MaxNumSplits | | | |结果日志(1 +损失)运行时| |(观察)| (estim) |永昌龙 | | | |====================================================================================================================| | 21日|接受| 3.1123 | 0.30967 | 2.9374 | 2.951 | 10 | 0.95322 | 1 |
| 22 |接受| 3.1405 | 0.27687 | 2.9374 | 2.9423 | 10 | 0.20618 | 6 |
| 23 |接受| 2.9494 | 0.59109 | 2.9374 | 2.9415 | 24 | 0.30598 | 5 |
| 24 | Best | 2.906 | 0.28183 | 2.906 | 2.9064 | 10 | 0.32881 | 1 |
| 25 |接受| 2.9436 | 0.30565 | 2.906 | 2.9222 | 10 | 0.31006 | 2 |
| 26 |最佳| 2.8822 | 0.25146 | 2.8822 | 2.8912 | 10 | 0.36677 | 1 |
|27 |接受|2.9123 |0.29838 |2.8822 |2.8952 |10 |0.39598 |1 |
| 28 |接受| 4.6089 | 0.28759 | 2.8822 | 2.901 | 10 | 0.093135 | 98 |
|29 |接受|2.8917 |0.37785 |2.8822 |2.9009 |15 |0.33056 |1 |
| 30 |接受| 2.9289 | 1.1702 | 2.8822 | 2.9008 | 50 | 0.14154 | 1 |
__________________________________________________________ 优化完成。maxobjective达到30个。总功能评估:全部30次零售时间:60.5324秒。客观总函数评估时间:22.2498最佳观察到的可行点:Num / interningCycles LableRate MaxnumSplits _________ _____________ 10 0.36677 1观察到的目标函数值= 2.8822估计目标函数值= 2.9008函数评估时间= 0.25146最佳估计可行点(根据型号)MaxnumSplits _________________ _________ _____________ 10 0.36677 1估计目标函数值= 2.9008估计函数评估时间= 0.291
mdl = RegressionEnsemble PredictorNames: {'Cylinders' ' 'Displacement' ' '马力' 'Weight'} ResponseName: 'MPG' CategoricalPredictors: [] ResponseTransform: 'none' NumObservations: 94 HyperparameterOptimizationResults: [1×1 bayesanoptimization] NumTrained: 10 Method: 'LSBoost' LearnerNames: {'Tree'} ReasonForTermination:“在完成要求的培训周期数后正常终止。”FitInfo: [10×1 double] FitInfoDescription: {2×1 cell}正则化:[]属性,方法
TBL.
- - - - - -样本数据用于训练模型的样本数据,指定为表。每一行的TBL.
对应一个观察值,每一列对应一个预测变量。TBL.
可以为响应变量包含一个额外的列。不允许多列变量和字符向量的单元格数组之外的单元格数组。
如果TBL.
包含响应变量,您希望将所有剩余的变量用作预测器,然后使用响应变量使用responsevarname.
.
如果TBL.
包含响应变量,并且您希望将剩余变量的子集仅用为预测器,然后使用公式
.
如果TBL.
不包含响应变量,则指定响应数据使用Y
.响应变量的长度和行数TBL.
必须是相等的。
请注意
保存内存和执行时间,供应X
和Y
代替TBL.
.
数据类型:表格
responsevarname.
- - - - - -响应变量名称TBL.
响应变量名称,指定为响应变量的名称TBL.
.
您必须指定responsevarname.
作为字符向量或字符串标量。例如,如果资源描述。Y
是否指定响应变量responsevarname.
作为“Y”
.否则,fitrensemble
处理的所有列TBL.
作为预测变量。
数据类型:字符
|字符串
公式
- - - - - -反应变量和预测变量子集的解释模型解释模型的响应变量和预测变量的子集,指定为字符向量或字符串标量的形式“Y ~ X1 + X2 + X3”
.在这种形式,Y
表示响应变量,和X1
,X2
,X3
表示预测变量。
中指定变量的子集TBL.
作为培训模型的预测器,使用公式。如果指定公式,则软件不使用任何变量TBL.
没有出现在公式
.
公式中的变量名必须是其中的两个变量名TBL.
(Tbl.Properties.VariableNames
)和有效的MATLAB®标识符。
您可以验证变量名TBL.
通过使用isvarname
函数。以下代码返回逻辑1
(真正的
),以获取每个具有有效变量名的变量。
cellfun (@isvarname Tbl.Properties.VariableNames)
TBL.
是无效的,则使用matlab.lang.makeValidName
函数。Tbl.Properties.VariableNames = matlab.lang.makeValidName (Tbl.Properties.VariableNames);
数据类型:字符
|字符串
X
- - - - - -预测数据预测数据,指定为数字矩阵。
每一行对应一个观察值,每一列对应一个预测变量。
长度Y
的行数X
必须是相等的。
按预测器在中出现的顺序指定它们的名称X
,可以使用PredictorNames
名称-值对的论点。
数据类型:单
|双
指定可选的逗号分离对名称,价值
论点。的名字
参数名和价值
为对应值。的名字
必须出现在引号内。可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家
.
'numlarnicalnicycle',500,'方法','bag','学习者',templatetree(),'横向','上'
使用10倍交叉验证对500个袋装回归树进行交叉验证。
请注意
的参数不能同时使用任何交叉验证的名称-值对参数“OptimizeHyperparameters”
名称-值对的论点。可以为。修改交叉验证“OptimizeHyperparameters”
只有使用“HyperparameterOptimizationOptions”
名称-值对的论点。
“方法”
- - - - - -合奏聚合方法“LSBoost”
(默认)|'包'
组合聚合方法,指定为逗号分隔对组成“方法”
和“LSBoost”
或'包'
.
价值 | 方法 | 笔记 |
---|---|---|
“LSBoost” |
最小二乘增加(LSBoost) | 您可以通过使用来指定收缩的学习率“LearnRate” 名称-值对的论点。 |
'包' |
引导聚合(例如,套袋,随机森林)[2]) | fitrensemble 默认使用每个拆分(随机林)的随机预测测量选择袋装。在没有随机选择的情况下使用袋装,使用树学习者“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
.
例子:“NPrint”,5
数据类型:单
|双
|字符
|字符串
“NumBins”
- - - - - -用于数值预测器的容器数量[]
(空的)(默认)|正整数标量数字预测器的箱数,指定为逗号分隔对,由“NumBins”
和一个正整数标量。
如果“NumBins”
值为空(默认值),则软件不存储任何预测器。
如果您指定了“NumBins”
值作为一个正整数标量,然后软件将每个数值预测器放入指定数量的等概率容器中,然后在容器指数上生长树,而不是原始数据。
如果“NumBins”
值超过数字(u)预测器的独特价值,然后fitrensemble
将预测器箱入u垃圾箱。
fitrensemble
不属于分类预测。
当您使用大型训练数据集时,这种分箱选项速度升高了训练,但潜在的准确性降低。你可以试试“NumBins”,50岁
先改,再改“NumBins”
值取决于训练的准确性和速度。
经过训练的模型将垃圾桶边存储在毕业生
财产。
例子:“NumBins”,50岁
数据类型:单
|双
“CategoricalPredictors”
- - - - - -分类预测列表“所有”
分类预测器列表,指定为逗号分隔对,由“CategoricalPredictors”
和这个表中的一个值。
价值 | 描述 |
---|---|
正整数向量 | 向量中的每一项都是对应于预测器数据列的索引值(X 或TBL. ),其中包含一个分类变量。 |
逻辑向量 | 一个真正的 输入表示预测器数据的相应列(X 或TBL. )是一个分类变量。 |
字符矩阵 | 矩阵的每一行都是一个预测变量的名称。名称必须与里面的条目相匹配PredictorNames .使用额外的空白填充名称,因此字符矩阵的每行具有相同的长度。 |
字符串阵列或字符向量的单元数组 | 数组中的每个元素都是一个预测变量的名称。名称必须与里面的条目相匹配PredictorNames . |
“所有” |
所有的预测都是绝对的。 |
默认情况下,如果预测器数据在表中(TBL.
),fitrensemble
假设变量是分类的,如果它是逻辑向量,无序分类向量,字符数组,字符串数组或字符向量的单元数组。如果预测器数据是矩阵(X
),fitrensemble
假设所有预测因子都是连续的。要将任何其他预测因子识别为分类预测器,请通过使用来指定它们“CategoricalPredictors”
名称-值对的论点。
例子:“CategoricalPredictors”、“所有”
数据类型:单
|双
|逻辑
|字符
|字符串
|细胞
'predictornames'
- - - - - -预测变量的名字预测器变量名,指定为逗号分隔对,由'predictornames'
以及由唯一名称组成的字符串数组或由唯一字符向量组成的单元格数组。的功能'predictornames'
这取决于你提供培训数据的方式。
如果你提供X
和Y
,则可以使用'predictornames'
为中的预测变量指定名称X
.
名字的顺序PredictorNames
必须对应的列顺序X
.也就是说,predictornames {1}
是X (: 1)
,predictornames {2}
是X (:, 2)
,等等。同时,大小(X, 2)
和元素个数(PredictorNames)
必须是相等的。
默认情况下,PredictorNames
是{x1, x2,…}
.
如果你提供TBL.
,则可以使用'predictornames'
选择在训练中使用的预测变量。也就是说,fitrensemble
仅使用预测器变量PredictorNames
和训练期间的响应变量。
PredictorNames
一定是?的子集Tbl.Properties.VariableNames
且不能包含响应变量的名称。
默认情况下,PredictorNames
包含所有预测变量的名称。
一个良好的做法是指定使用的预测器使用'predictornames'
或公式
,但不是两者都有。
例子:PredictorNames,{‘SepalLength’,‘SepalWidth’,‘PetalLength’,‘PetalWidth}
数据类型:字符串
|细胞
'responsebame'
- - - - - -响应变量名称“Y”
(默认)|特征向量|字符串标量响应变量名,指定为逗号分隔对,由'responsebame'
和一个字符矢量或字符串标量。
如果你提供Y
,则可以使用'responsebame'
指定响应变量的名称。
如果你提供responsevarname.
或公式
,则不能使用'responsebame'
.
例子:'responsebame','响应'
数据类型:字符
|字符串
“ResponseTransform”
- - - - - -响应转型'没有任何'
(默认)|功能手柄响应转换,指定为逗号分隔的对,由“ResponseTransform”
和任何一种'没有任何'
或功能手柄。默认为'没有任何'
,这意味着@(y)y
,或者不变换。对于MATLAB函数或你定义的函数,使用它的函数句柄。函数句柄必须接受一个向量(原始响应值)并返回一个大小相同的向量(转换后的响应值)。
例子:假设您可以使用函数句柄应用向输入向量应用指数变换myfunction = @ (y) exp (y)
.然后,您可以指定响应转换为myfunction ResponseTransform,
.
数据类型:字符
|字符串
|function_handle
'cvpartition'
- - - - - -交叉验证分区[]
(默认)|cvpartition
分区对象交叉验证分区,指定为逗号分隔的对,由'cvpartition'
A.cvpartition
分区对象由cvpartition
.分区对象指定交叉验证的类型以及训练集和验证集的索引。
要创建交叉验证的模型,只能使用这四个名称值对参数中的一个:CVPartition.
,坚持
,KFold
,或Leaveout
.
例子:假设您使用以下方法创建了一个随机分区,用于对500个观测数据进行5倍交叉验证CVP = CVPARTING(500,'KFOLD',5)
.然后,您可以使用“CVPartition”,本量利
.
“坚持”
- - - - - -用于抵抗验证的数据部分用于拒绝验证的数据的一部分,指定为逗号分隔对,由“坚持”
和范围(0,1)的标量值。如果您指定'持有',p
,然后软件完成以下步骤:
随机选择和保留p * 100
%的数据作为验证数据,并使用其余的数据训练模型。
将经过训练的小型模型存储在训练有素的
交叉验证模型的财产。
要创建交叉验证的模型,只能使用这四个名称值对参数中的一个:CVPartition.
,坚持
,KFold
,或Leaveout
.
例子:'持有',0.1
数据类型:双
|单
“KFold”
- - - - - -数量的折叠10
(默认)|正整数值大于1要在交叉验证的模型中使用的折叠数,指定为逗号分隔的对,由“KFold”
和一个大于1的正整数。如果您指定'kfold',k
,然后软件完成以下步骤:
随机分区数据k
套。
对于每个集合,保留该集合作为验证数据,并使用另一个来训练模型k
- 1套。
储存k
紧凑,训练有素的模型在细胞k
-by-1细胞载体训练有素的
交叉验证模型的财产。
要创建交叉验证的模型,只能使用这四个名称值对参数中的一个:CVPartition.
,坚持
,KFold
,或Leaveout
.
例子:'kfold',5
数据类型:单
|双
'忽略'
- - - - - -留下一张交叉验证标志'离开'
(默认)|'在'
省略一交叉验证标志,指定为逗号分隔的对,由'忽略'
和'在'
或'离开'
.如果您指定“Leaveout”,“上”
那么,每个人n观察(n不包括遗漏的观测值在内的观测值是否在NumObservations
模型属性),软件完成以下步骤:
保留观测数据作为验证数据,并使用其他数据训练模型n- 1的观察。
储存n紧凑,训练有素的模型在细胞n-by-1细胞载体训练有素的
交叉验证模型的财产。
要创建交叉验证的模型,只能使用这四个名称值对参数中的一个:CVPartition.
,坚持
,KFold
,或Leaveout
.
例子:“Leaveout”,“上”
“重量”
- - - - - -观察权重TBL.
重新取样的
- - - - - -指示重新取样的标志'离开'
|'在'
指示重新取样的标志,指定为由逗号分隔的对重新取样的
和'离开'
或'在'
.
如果方法
是助推方法,则:
重新取样,“
指定使用更新的权值作为多项抽样概率对训练观察进行抽样。
“重新取样”,“关闭”
(默认)指定在每次学习迭代时重新加权观察值。
如果方法
是“包”
,然后重新取样的
必须'在'
.该软件对训练观察结果的一部分进行重新采样(见Fresample.
),包括或不包括更换(见取代
).
如果指定要使用重新采用重新取样
,则对整个数据集进行重新采样是一种良好的实践。即使用默认值1 forFresample.
.
“LearnRate”
- - - - - -收缩率的学习率1
(默认)|数字标量(0,1]收缩的学习率,指定为区间(0,1)中由数字标量组成的逗号分隔对。
使用收缩,设置训练集合学习
值小于1
例如,0.1
是一个很受欢迎的选择。使用收缩来训练集成需要更多的学习迭代,但通常可以获得更好的准确性。
例子:'学习',0.1
数据类型:单
|双
“OptimizeHyperparameters”
- - - - - -参数优化'没有任何'
(默认)|“汽车”
|“所有”
|符合条件的参数名称的字符串数组或单元格数组|向量的optimizableVariable
对象要优化的参数,指定为逗号分隔的对“OptimizeHyperparameters”
以及以下其中之一:
'没有任何'
- 不要优化。
“汽车”
——使用{'方法','numlearningcycles','lavingrate'}
以及指定的默认参数学习者
:
学习者
='树'
(默认){' MinLeafSize '}
请注意
对于封路计优化,学习者
必须是一个参数,而不是字符串数组或单元格数组。
“所有”
-优化所有符合条件的参数。
符合条件的参数名称的字符串数组或单元格数组
向量的optimizableVariable
对象的输出hyperparameters
优化尝试最小化交叉验证损失(错误)fitrensemble
通过改变参数。要控制交叉验证类型和其他方面的优化,请使用HyperParameterOptimizationOptions.
名称-值对。
请注意
“OptimizeHyperparameters”
值覆盖使用其他名称-值对参数设置的任何值。例如,设置“OptimizeHyperparameters”
来“汽车”
导致“汽车”
值应用。
符合条件的参数fitrensemble
是:
方法
-合资格的方法有'包'
或“LSBoost”
.
NumLearningCycles
- - - - - -fitrensemble
在正整数中搜索,默认的对数缩放范围[10500]
.
学习
- - - - - -fitrensemble
在正面实际中搜索,默认情况下默认为缩放范围[1E-3,1]
.
MinLeafSize
- - - - - -fitrensemble
在范围内以对数比例搜索整数[1,马克斯(2楼(NumObservations / 2)))
.
MaxNumSplits
- - - - - -fitrensemble
在范围内以对数比例搜索整数NumObservations-1[1,马克斯(2))
.
NumVariablesToSample
- - - - - -fitrensemble
在范围内的整数中搜索[1,max(2,numpredictors)]
.
通过传染媒介设置非菲达参数optimizableVariable
具有非默认值的对象。例如,
负载Carsmall.params = hyperparameters (“fitrensemble”,英里/加仑(功率、重量)'树');Params(4).range = [1,20];
通过参数个数
的价值优化hyperParameters.
.
默认情况下,迭代显示将显示在命令行中,并且根据优化中的超参数数量出现曲线。对于优化和图,目标函数是日志(1 +交叉验证丢失)为回归和误分类率为分类。若要控制迭代显示,请设置verb
场的“HyperparameterOptimizationOptions”
名称-值对的论点。要控制图,请设置Showplots.
场的“HyperparameterOptimizationOptions”
名称-值对的论点。
例如,看到优化回归合奏.
例子:OptimizeHyperparameters,{‘法’,‘NumLearningCycles’,‘LearnRate’,‘MinLeafSize’,‘MaxNumSplits}
“HyperparameterOptimizationOptions”
- - - - - -选择优化用于优化的选项,指定为逗号分隔的对,由“HyperparameterOptimizationOptions”
和结构。该参数修改优化hyperParameters.
名称-值对的论点。结构中的所有字段都是可选的。
字段名 | 价值 | 默认 |
---|---|---|
优化器 |
|
'Bayesopt' |
AcquisitionFunctionName |
收购函数,其名称包括 |
“expected-improvement-per-second-plus” |
MaxObjectiveEvaluations |
目标函数求值的最大次数。 | 30. 为'Bayesopt' 或“randomsearch” ,和整个网格“gridsearch” |
MaxTime. |
时限,指定为正实。时间限制以秒为单位,用 |
INF. |
NumGridDivisions |
为“gridsearch” ,表示每个维度中值的数量。该值可以是一个给出每个维度值数量的正整数向量,也可以是适用于所有维度的标量。对于分类变量,该字段被忽略。 |
10 |
Showplots. |
逻辑值,指示是否显示图表。如果真正的 ,此字段绘制迭代号的最佳目标函数值。如果有一个或两个优化参数,并且如果优化器 是'Bayesopt' ,然后Showplots. 还根据参数绘制目标函数的模型。 |
真正的 |
Saptintermediateresults. |
指示是否保存结果的逻辑值优化器 是'Bayesopt' .如果真正的 ,此字段将覆盖名为“BayesoptResults” 在每一个迭代。变量是a贝叶斯偏见 目的。 |
假 |
verb |
显示到命令行。
具体操作请参见 |
1 |
UseParallel |
指示是否并行运行贝叶斯优化的逻辑值,这需要并行计算工具箱™。由于并行时序的不可再现性,并行贝叶斯优化并不一定产生可再现的结果。有关详细信息,请参见平行的贝叶斯优化. | 假 |
重新分区 |
逻辑值,指示是否在每次迭代时重新验证交叉验证。如果
|
假 |
使用以下三个字段名中的一个。 | ||
CVPartition. |
一个cvpartition 对象创建的cvpartition . |
“Kfold”,5 如果您没有指定任何交叉验证字段 |
坚持 |
范围内的标量(0,1) 表示坚持不懈的分数。 |
|
Kfold |
大于1的整数。 |
例子:'hyperparameteroptimizationOptions',struct('maxobjectiveevaluations',60)
数据类型:塑造
Mdl
- 培训的回归集合模型回归释迦缩短
模型对象|RegressionEnsemble
模型对象|RegressionPartitionedEnsemble
交叉验证的模型对象训练的集成模型,作为该表中的模型对象之一返回。
模型对象 | 指定任何交叉验证选项? | 方法 环境 |
重新取样 环境 |
---|---|---|---|
回归释迦缩短 |
不 | '包' |
'在' |
RegressionEnsemble |
不 | “LSBoost” |
'离开' |
RegressionPartitionedEnsemble |
是的 | “LSBoost” 或'包' |
'离开' 或'在' |
控制交叉验证的名称-值对参数是CrossVal
,坚持
,KFold
,Leaveout
,CVPartition.
.
参考属性Mdl
,使用点符号。例如,要访问或显示尚未交叉验证的集成的弱学习器模型对象的细胞向量,请输入Mdl。训练有素的
在命令行。
NumLearningCycles
从几十个到几千个不等。通常,一个具有良好预测能力的集成需要几百到几千个较弱的学习者。然而,您不需要一次训练那么多周期的合奏。你可以从培养几十个学习者开始,检查合奏表演,然后,如果有必要的话,用它来训练更多的弱学习者的简历
.
合奏性能取决于集合设置和弱学习者的设置。也就是说,如果使用默认参数指定弱的学习者,则集合可以表现不佳。因此,与集合设置一样,使用模板调整弱学习者的参数是好的做法,并选择最小化泛化误差的值。
如果指定要使用重新采用重新取样
,则对整个数据集进行重新采样是一种良好的实践。也就是说,使用默认设置1
为Fresample.
.
在训练模型之后,您可以生成C/ c++代码来预测对新数据的响应。生成C/ c++代码需要MATLAB编码器™.有关详细信息,请参见代码生成简介.
集成聚合算法的详细信息请参见整体算法.
如果您指定'方法','lsboost'
,然后软件会在默认情况下生成浅决策树。属性可以调整树的深度MaxNumSplits
,MinLeafSize
,MinParentSize
名称-值对参数使用templateTree
.
对于双核系统及以上,fitrensemble
使用英特尔并行训练®线程构建块(TBB)。关于Intel TBB的详细介绍请参见https://software.intel.com/en-us/intel-tbb..
[1] Breiman, L.《套袋预测》。机器学习.卷。26,pp。123-140,1996。
[2]布雷曼,L.《随机森林》。机器学习.第45卷,第5-32页,2001。
弗洛因德,Y.和R. E. Schapire。在线学习的决策理论推广及其在助推中的应用J.计算机与系统科学,第55卷,119-139页,1997。
[4]弗里德曼,J。“贪婪函数近似:梯度升压机。”统计数据,第29卷,第5期,第1189-1232页,2001。
Hastie, T., R. Tibshirani, J. Friedman。统计学习的要素第2008年纽约Springer,纽约赛版。
要执行并行超参数优化,请使用“HyperparameterOptimizationOptions”、结构(UseParallel,真的)
调用此函数时的名称-值对参数。
有关并行覆盖物优化的更多信息,请参阅平行的贝叶斯优化.
有关并行计算的更多通用信息,请参见运行MATLAB函数与自动并行支持金宝app(并行计算工具箱).
您单击了与此MATLAB命令对应的链接:
通过在MATLAB命令窗口中输入命令来运行命令。Web浏览器不支持MATLAB命令。金宝app
您还可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。