主要内容

fitrensemble

适合学习者的回归集合

描述

例子

Mdl= fitrensemble (TBL.responsevarname.返回经过训练的回归集成模型对象(Mdl),其中包含使用LSBoost和表中的预测器和响应数据增强100棵回归树的结果TBL.responsevarname.中是响应变量的名称吗TBL.

例子

Mdl= fitrensemble (TBL.公式适用于公式将模型与表中的预测器和响应数据拟合TBL.公式是否有一个反应的解释模型和一个预测变量子集TBL.适合使用Mdl.例如,“Y ~ X1 + X2 + X3”拟合响应变量资源描述。Y作为预测变量的函数资源描述。X1资源描述。X2,资源描述。X3

例子

Mdl= fitrensemble (TBL.Y处理表中的所有变量TBL.作为预测变量。Y是不在的响应的矢量TBL.

例子

Mdl= fitrensemble (XY使用矩阵中的预测器数据X和矢量中的响应数据Y

例子

Mdl= fitrensemble (___名称,价值使用一个或多个指定的附加选项名称,价值Pair参数和前面语法中的任何输入参数。例如,您可以指定学习周期的数量、集成聚合方法或实现10倍交叉验证。

例子

全部折叠

创建一个回归集成,在给定气缸数量、气缸所取代的体积、马力和重量的情况下,预测汽车的燃油经济性。然后,使用较少的预测器训练另一个集合。比较集成的样本内预测精度。

加载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(资源描述、公式);

比较两者的再取代mseMdl1Mdl2

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);

用于升压回归树的树深度控制器的默认值是:

  • 10MaxNumSplits

  • 5MinLeafSize

  • 10MinParentSize

为了寻找最优的树复杂度水平:

  1. 交叉验证一组集成。指数级增加后续集成的树复杂度,从决策树桩(一次拆分)到最多n- 1分裂。n为样本量。另外,每个集合的学习率在0.1到1之间变化。

  2. 估计每个集合的交叉验证均方误差(MSE)。

  3. 用于树木复杂度水平 j j 1 J ,通过绘制它们与学习周期数的关系,比较集成的累积的、交叉验证的MSE。在同一个图上为每个学习率绘制单独的曲线。

  4. 选择实现最小MSE的曲线,并注意相应的学习周期和学习率。

交叉验证一个深度回归树和一个树桩。因为数据包含丢失的值,所以使用代理分割。这些回归树可以作为基准。

rng (1)%的再现性MdlDeep = fitrtree(资源描述,“英里”“CrossVal”'在''mergeleaves''离开'...'迷人',1,'代理''在');MdlStump = fitrtree(资源描述,“英里”“MaxNumSplits”,1,“CrossVal”'在'...'代理''在');

使用5倍交叉验证对150棵增强回归树进行交叉验证。使用树模板:

  • 使用序列中的值改变分割的最大数目 2 0 2 1 2 是这样的, 2 不比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: numLRj = 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.包含响应变量,您希望将所有剩余的变量用作预测器,然后使用响应变量使用responsevarname.

  • 如果TBL.包含响应变量,并且您希望将剩余变量的子集仅用为预测器,然后使用公式

  • 如果TBL.不包含响应变量,则指定响应数据使用Y.响应变量的长度和行数TBL.必须是相等的。

请注意

保存内存和执行时间,供应XY代替TBL.

数据类型:表格

响应变量名称,指定为响应变量的名称TBL.

您必须指定responsevarname.作为字符向量或字符串标量。例如,如果资源描述。Y是否指定响应变量responsevarname.作为“Y”.否则,fitrensemble处理的所有列TBL.作为预测变量。

数据类型:字符|字符串

解释模型的响应变量和预测变量的子集,指定为字符向量或字符串标量的形式“Y ~ X1 + X2 + X3”.在这种形式,Y表示响应变量,和X1X2,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);

数据类型:字符|字符串

预测数据,指定为数字矩阵。

每一行对应一个观察值,每一列对应一个预测变量。

长度Y的行数X必须是相等的。

按预测器在中出现的顺序指定它们的名称X,可以使用PredictorNames名称-值对的论点。

数据类型:|

响应,指定为数字矢量。每个元素Y对观察的响应是否在相应的行中XTBL..长度Y的行数XTBL.必须是相等的。

数据类型:|

名称值对参数

指定可选的逗号分离对名称,价值论点。的名字参数名和价值为对应值。的名字必须出现在引号内。可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:'numlarnicalnicycle',500,'方法','bag','学习者',templatetree(),'横向','上'使用10倍交叉验证对500个袋装回归树进行交叉验证。

请注意

的参数不能同时使用任何交叉验证的名称-值对参数“OptimizeHyperparameters”名称-值对的论点。可以为。修改交叉验证“OptimizeHyperparameters”只有使用“HyperparameterOptimizationOptions”名称-值对的论点。

一般系综选择

全部折叠

组合聚合方法,指定为逗号分隔对组成“方法”“LSBoost”'包'

价值 方法 笔记
“LSBoost” 最小二乘增加(LSBoost) 您可以通过使用来指定收缩的学习率“LearnRate”名称-值对的论点。
'包' 引导聚合(例如,套袋,随机森林)[2] fitrensemble默认使用每个拆分(随机林)的随机预测测量选择袋装。在没有随机选择的情况下使用袋装,使用树学习者“NumVariablesToSample”价值是“所有”

集成聚合算法及示例请参见算法整体算法,选择适用的集合聚合方法

例子:'方法','包'

集合学习周期的数目,指定为逗号分隔对组成“NumLearningCycles”一个正整数。在每个学习周期中,软件针对每个模板对象训练一个弱学习者学习者.因此,软件训练NumLearningCycles *元素个数(学习者)学习者。

该软件使用所有受过训练的学习者组成集合并将他们存储在其中Mdl。训练有素的

有关更多详细信息,请参阅提示

例子:“NumLearningCycles”,500年

数据类型:|

弱学习者使用的集合,指定为逗号分隔对组成“学习者”'树',一个树模板对象,或树模板对象的单元向量。

  • '树'(默认)fitrensemble使用默认的回归树学习器,这与使用相同templateTree ().的默认值templateTree ()取决于价值“方法”

    • 对于袋装决策树,最大决策拆分数(“MaxNumSplits”)是N-1,在那里n是观察人数。为每个拆分为随机选择的预测器数量(“NumVariablesToSample”)是预测器数量的三分之一。所以,fitrensemble长出深度决策树。您可以种植较浅的树,以减少模型复杂性或计算时间。

    • 对于增强决策树,“MaxNumSplits”是10岁“NumVariablesToSample”“所有”.所以,fitrensemble长出浅决策树。你可以种植更深的树以获得更好的精度。

    看到templateTree对于弱学习者的默认设置。

  • 树模板对象-fitrensemble使用创建的树模板对象templateTree.的名称-值对参数templateTree指定树学习器的设置。

  • 细胞的向量树模板对象-fitrensemble生长每个学习周期的回归树(见NumLearningCycles).例如,对于由两种类型的回归树组成的集合,请提供{t1 t2},在那里t1t2回归树模板对象由templateTree

要获得可重复的结果,您必须指定“复制”的名称-值对参数templateTree作为真正的如果“NumVariablesToSample”不是“所有”

有关需要培训的学员人数的详细信息,请参见NumLearningCycles提示

例子:'学习者',Templatetree('MaxnumSplits',5)

输出频率,指定为逗号分隔对组成“NPrint”一个正整数或'离开'

跟踪数量弱的学习者折叠fitrensemble训练到目前为止,指定一个正整数。也就是说,如果你指定了正整数

  • 没有指定任何交叉验证选项(例如,CrossVal),然后fitrensemble每次完成训练时,向命令行显示一条消息弱的学习者。

  • 和交叉验证选项,然后fitrensemble每次完成训练后,向命令行显示一条消息折叠。

如果您指定'离开',然后fitrensemble在完成培训弱学习者时,不会显示一条消息。

提示

当在一个大数据集上训练一个由许多弱学习者组成的集合时,指定一个正整数NPrint

例子:“NPrint”,5

数据类型:||字符|字符串

数字预测器的箱数,指定为逗号分隔对,由“NumBins”和一个正整数标量。

  • 如果“NumBins”值为空(默认值),则软件不存储任何预测器。

  • 如果您指定了“NumBins”值作为一个正整数标量,然后软件将每个数值预测器放入指定数量的等概率容器中,然后在容器指数上生长树,而不是原始数据。

    • 如果“NumBins”值超过数字(u)预测器的独特价值,然后fitrensemble将预测器箱入u垃圾箱。

    • fitrensemble不属于分类预测。

当您使用大型训练数据集时,这种分箱选项速度升高了训练,但潜在的准确性降低。你可以试试“NumBins”,50岁先改,再改“NumBins”值取决于训练的准确性和速度。

经过训练的模型将垃圾桶边存储在毕业生财产。

例子:“NumBins”,50岁

数据类型:|

分类预测器列表,指定为逗号分隔对,由“CategoricalPredictors”和这个表中的一个值。

价值 描述
正整数向量 向量中的每一项都是对应于预测器数据列的索引值(XTBL.),其中包含一个分类变量。
逻辑向量 一个真正的输入表示预测器数据的相应列(XTBL.)是一个分类变量。
字符矩阵 矩阵的每一行都是一个预测变量的名称。名称必须与里面的条目相匹配PredictorNames.使用额外的空白填充名称,因此字符矩阵的每行具有相同的长度。
字符串阵列或字符向量的单元数组 数组中的每个元素都是一个预测变量的名称。名称必须与里面的条目相匹配PredictorNames
“所有” 所有的预测都是绝对的。

默认情况下,如果预测器数据在表中(TBL.),fitrensemble假设变量是分类的,如果它是逻辑向量,无序分类向量,字符数组,字符串数组或字符向量的单元数组。如果预测器数据是矩阵(X),fitrensemble假设所有预测因子都是连续的。要将任何其他预测因子识别为分类预测器,请通过使用来指定它们“CategoricalPredictors”名称-值对的论点。

例子:“CategoricalPredictors”、“所有”

数据类型:||逻辑|字符|字符串|细胞

预测器变量名,指定为逗号分隔对,由'predictornames'以及由唯一名称组成的字符串数组或由唯一字符向量组成的单元格数组。的功能'predictornames'这取决于你提供培训数据的方式。

  • 如果你提供XY,则可以使用'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'指定响应变量的名称。

  • 如果你提供responsevarname.公式,则不能使用'responsebame'

例子:'responsebame','响应'

数据类型:字符|字符串

响应转换,指定为逗号分隔的对,由“ResponseTransform”和任何一种'没有任何'或功能手柄。默认为'没有任何',这意味着@(y)y,或者不变换。对于MATLAB函数或你定义的函数,使用它的函数句柄。函数句柄必须接受一个向量(原始响应值)并返回一个大小相同的向量(转换后的响应值)。

例子:假设您可以使用函数句柄应用向输入向量应用指数变换myfunction = @ (y) exp (y).然后,您可以指定响应转换为myfunction ResponseTransform,

数据类型:字符|字符串|function_handle

交叉验证选择

全部折叠

交叉验证标志,指定为逗号分隔对,由'横向''在''离开'

如果您指定'在'然后,软件实现10倍交叉验证。

要覆盖此交叉验证设置,请使用以下名称-值对参数之一:CVPartition.坚持KFold,或Leaveout.要创建交叉验证模型,一次只能使用一个交叉验证名称-值对参数。

或者,稍后通过传递进行交叉验证Mdlcrossvalcrossval

例子:“Crossval”,“上”

交叉验证分区,指定为逗号分隔的对,由'cvpartition'A.cvpartition分区对象由cvpartition.分区对象指定交叉验证的类型以及训练集和验证集的索引。

要创建交叉验证的模型,只能使用这四个名称值对参数中的一个:CVPartition.坚持KFold,或Leaveout

例子:假设您使用以下方法创建了一个随机分区,用于对500个观测数据进行5倍交叉验证CVP = CVPARTING(500,'KFOLD',5).然后,您可以使用“CVPartition”,本量利

用于拒绝验证的数据的一部分,指定为逗号分隔对,由“坚持”和范围(0,1)的标量值。如果您指定'持有',p,然后软件完成以下步骤:

  1. 随机选择和保留p * 100%的数据作为验证数据,并使用其余的数据训练模型。

  2. 将经过训练的小型模型存储在训练有素的交叉验证模型的财产。

要创建交叉验证的模型,只能使用这四个名称值对参数中的一个:CVPartition.坚持KFold,或Leaveout

例子:'持有',0.1

数据类型:|

要在交叉验证的模型中使用的折叠数,指定为逗号分隔的对,由“KFold”和一个大于1的正整数。如果您指定'kfold',k,然后软件完成以下步骤:

  1. 随机分区数据k套。

  2. 对于每个集合,保留该集合作为验证数据,并使用另一个来训练模型k- 1套。

  3. 储存k紧凑,训练有素的模型在细胞k-by-1细胞载体训练有素的交叉验证模型的财产。

要创建交叉验证的模型,只能使用这四个名称值对参数中的一个:CVPartition.坚持KFold,或Leaveout

例子:'kfold',5

数据类型:|

省略一交叉验证标志,指定为逗号分隔的对,由'忽略''在''离开'.如果您指定“Leaveout”,“上”那么,每个人n观察(n不包括遗漏的观测值在内的观测值是否在NumObservations模型属性),软件完成以下步骤:

  1. 保留观测数据作为验证数据,并使用其他数据训练模型n- 1的观察。

  2. 储存n紧凑,训练有素的模型在细胞n-by-1细胞载体训练有素的交叉验证模型的财产。

要创建交叉验证的模型,只能使用这四个名称值对参数中的一个:CVPartition.坚持KFold,或Leaveout

例子:“Leaveout”,“上”

其他回归选项

全部折叠

观察权值,指定为逗号分隔的对,由“重量”和一个数字矢量的数字矢量或变量的名称TBL..该软件在每行中重视观察XTBL.具有相应的价值权重.的大小权重必须等于XTBL.

如果将输入数据指定为表TBL.,然后权重可以是变量的名称TBL.它包含一个数字向量。在这种情况下,您必须指定权重作为字符向量或字符串标量。例如,如果权重向量W存储为资源描述。W,则指定为' W '.否则,该软件将处理所有列TBL.,包括W,作为预测器或训练模型时的反应。

软件将值标准化权重总结为1。

默认情况下,权重(n, 1),在那里n观察的次数在吗XTBL.

数据类型:||字符|字符串

抽样方案

全部折叠

为每个弱学习者重新采样的训练集的分数,指定为逗号分隔对组成“FResample”和(0,1)的正标量。

使用“FResample”, 指定“包”方法或集合重新取样'在'

例子:“FResample”,0.75

数据类型:|

指示带替换抽样的标志,指定为由逗号分隔的对'代替''离开''在'

  • '在',软件对训练观察结果进行样本替换。

  • '离开',软件在没有替代的情况下对培训观察进行样本。如果你设置了重新取样'在',然后软件对假设均权值的训练观察值进行抽样。如果你也指定了一种加速方法,那么软件就会通过重新加权观察结果来加速。

除非你设置方法“包”或集合重新取样'在'取代没有效果。

例子:“替换”、“关闭”

指示重新取样的标志,指定为由逗号分隔的对重新取样的'离开''在'

  • 如果方法是助推方法,则:

    • 重新取样,“指定使用更新的权值作为多项抽样概率对训练观察进行抽样。

    • “重新取样”,“关闭”(默认)指定在每次学习迭代时重新加权观察值。

  • 如果方法“包”,然后重新取样的必须'在'.该软件对训练观察结果的一部分进行重新采样(见Fresample.),包括或不包括更换(见取代).

如果指定要使用重新采用重新取样,则对整个数据集进行重新采样是一种良好的实践。即使用默认值1 forFresample.

LSBoost方法选择

全部折叠

收缩的学习率,指定为区间(0,1)中由数字标量组成的逗号分隔对。

使用收缩,设置训练集合学习值小于1例如,0.1是一个很受欢迎的选择。使用收缩来训练集成需要更多的学习迭代,但通常可以获得更好的准确性。

例子:'学习',0.1

数据类型:|

HyperParameter优化选项

全部折叠

要优化的参数,指定为逗号分隔的对“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”和结构。该参数修改优化hyperParameters.名称-值对的论点。结构中的所有字段都是可选的。

字段名 价值 默认
优化器
  • 'Bayesopt'-使用贝叶斯优化。在内部,这个设置调用bayesopt

  • “gridsearch”- 使用网格搜索NumGridDivisions每个维度值。

  • “randomsearch”-随机搜索MaxObjectiveEvaluations要点。

“gridsearch”以随机顺序搜索,使用均匀采样而无需替换电网。优化后,您可以使用命令在网格秩序中获取表sortrows (Mdl.HyperparameterOptimizationResults)

'Bayesopt'
AcquisitionFunctionName

  • “expected-improvement-per-second-plus”

  • “expected-improvement”

  • “expected-improvement-plus”

  • '预期 - 每秒改善'

  • “lower-confidence-bound”

  • '改善概率'

收购函数,其名称包括每秒不要产生可重复的结果,因为优化取决于目标函数的运行时间。收购函数,其名称包括+当它们过度开放区域时修改其行为。有关更多详细信息,请参阅获取函数类型

“expected-improvement-per-second-plus”
MaxObjectiveEvaluations 目标函数求值的最大次数。 30.'Bayesopt'“randomsearch”,和整个网格“gridsearch”
MaxTime.

时限,指定为正实。时间限制以秒为单位,用抽搐TOC..运行时间可以超过MaxTime.因为MaxTime.不中断函数计算。

INF.
NumGridDivisions “gridsearch”,表示每个维度中值的数量。该值可以是一个给出每个维度值数量的正整数向量,也可以是适用于所有维度的标量。对于分类变量,该字段被忽略。 10
Showplots. 逻辑值,指示是否显示图表。如果真正的,此字段绘制迭代号的最佳目标函数值。如果有一个或两个优化参数,并且如果优化器'Bayesopt',然后Showplots.还根据参数绘制目标函数的模型。 真正的
Saptintermediateresults. 指示是否保存结果的逻辑值优化器'Bayesopt'.如果真正的,此字段将覆盖名为“BayesoptResults”在每一个迭代。变量是a贝叶斯偏见目的。
verb

显示到命令行。

  • 0- 没有迭代显示

  • 1——迭代显示

  • 2-重复显示额外的信息

具体操作请参见bayesoptverb名称-值对的论点。

1
UseParallel 指示是否并行运行贝叶斯优化的逻辑值,这需要并行计算工具箱™。由于并行时序的不可再现性,并行贝叶斯优化并不一定产生可再现的结果。有关详细信息,请参见平行的贝叶斯优化
重新分区

逻辑值,指示是否在每次迭代时重新验证交叉验证。如果,优化器使用单个分区进行优化。

真正的通常给出最强大的结果,因为此设置考虑了划分的噪声。但是,为了好的结果,真正的需要至少两倍的函数求值。

使用以下三个字段名中的一个。
CVPartition. 一个cvpartition对象创建的cvpartition “Kfold”,5如果您没有指定任何交叉验证字段
坚持 范围内的标量(0,1)表示坚持不懈的分数。
Kfold 大于1的整数。

例子:'hyperparameteroptimizationOptions',struct('maxobjectiveevaluations',60)

数据类型:塑造

输出参数

全部折叠

训练的集成模型,作为该表中的模型对象之一返回。

模型对象 指定任何交叉验证选项? 方法环境 重新取样环境
回归释迦缩短 '包' '在'
RegressionEnsemble “LSBoost” '离开'
RegressionPartitionedEnsemble 是的 “LSBoost”'包' '离开''在'

控制交叉验证的名称-值对参数是CrossVal坚持KFoldLeaveout,CVPartition.

参考属性Mdl,使用点符号。例如,要访问或显示尚未交叉验证的集成的弱学习器模型对象的细胞向量,请输入Mdl。训练有素的在命令行。

提示

  • NumLearningCycles从几十个到几千个不等。通常,一个具有良好预测能力的集成需要几百到几千个较弱的学习者。然而,您不需要一次训练那么多周期的合奏。你可以从培养几十个学习者开始,检查合奏表演,然后,如果有必要的话,用它来训练更多的弱学习者的简历

  • 合奏性能取决于集合设置和弱学习者的设置。也就是说,如果使用默认参数指定弱的学习者,则集合可以表现不佳。因此,与集合设置一样,使用模板调整弱学习者的参数是好的做法,并选择最小化泛化误差的值。

  • 如果指定要使用重新采用重新取样,则对整个数据集进行重新采样是一种良好的实践。也就是说,使用默认设置1Fresample.

  • 在训练模型之后,您可以生成C/ c++代码来预测对新数据的响应。生成C/ c++代码需要MATLAB编码器™.有关详细信息,请参见代码生成简介

算法

  • 集成聚合算法的详细信息请参见整体算法

  • 如果您指定'方法','lsboost',然后软件会在默认情况下生成浅决策树。属性可以调整树的深度MaxNumSplitsMinLeafSize,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,纽约赛版。

扩展功能

介绍了R2016b