fitcensemble

适合分类的学习者集合

描述

例子

Mdl= fitcensemble (资源描述ResponseVarName)返回经过训练的分类集成模型对象(Mdl),其中包含了提升100棵分类树的结果以及表中的预测器和响应数据资源描述ResponseVarName响应变量的名称在吗资源描述.默认情况下,fitcensemble使用LogitBoost进行二进制分类,AdaBoostM2进行多类分类。

例子

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

例子

Mdl= fitcensemble (资源描述Y)处理表中的所有变量资源描述作为预测变量。Y是不在的类标签数组吗资源描述

例子

Mdl= fitcensemble (XY)使用矩阵中的预测数据X和类标签的数组Y

例子

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

例子

全部折叠

使用数据中所有可用的预测变量创建一个预测分类集合。然后,用更少的预测器训练另一个集合。比较集合的样本内预测精度。

加载census1994数据集。

负载census1994

使用整个数据集和默认选项训练分类模型集合。

Mdl1 = fitcensemble(成人数据,“工资”)
Mdl1 = classreg.learning.classif.ClassificationEnsemble PredictorNames: {1x14 cell} ResponseName: 'salary' CategoricalPredictors: [2 4 6 7 8 9 10 14] ClassNames: [<=50K >50K] ScoreTransform: 'none' NumObservations: 32561 NumTrained: 100 Method: 'LogitBoost' LearnerNames: {'Tree'} reasonforterminate: '完成所要求的训练周期数量后正常终止。'FitInfo: [100x1 double] FitInfoDescription: {2x1 cell}属性,方法

Mdl是一个ClassificationEnsemble模型。一些值得注意的特点Mdl是:

  • 因为数据中表示了两个类,所以LogitBoost是集成聚合算法。

  • 由于集成聚合方法是一种增强算法,因此最多允许10个分割的分类树组成集成。

  • 一百棵树组成了这个整体。

使用分类集成从数据中预测由五个观测值组成的随机集的标签。将预测的标签与真实值进行比较。

rng (1)%用于再现性[pX,pIdx] = datasample(adultdata,5);label = predict(Mdl1,pX);表(标签,adultdata.salary (pIdx),“VariableNames”, {“预测”“真相”})
ans =5×2表预测的真理  _________ _____ <= 50 k < = 50 k < = 50 k < = 50 k < = 50 k < = 50 k < = 50 k < = 50 k < = 50 k < = 50 k

训练一个新的合奏使用年龄而且教育只有。

Mdl2 = fitcensemble(成人数据,“工资~年龄+教育程度”);

比较两者之间的再置换损失Mdl1而且Mdl2

rsLoss1 = resubLoss(Mdl1)
rsLoss1 = 0.1058
rsLoss2 = resubLoss(Mdl2)
rsLoss2 = 0.2037

使用所有预测因子的集合的样本内误分类率较低。

训练一个增强的分类树集合fitcensemble.减少培训时间“NumBins”bin数值预测器的名值对参数。此论点仅当fitcensemble使用树学习器。训练后,可以使用BinEdges属性离散化函数。

生成一个示例数据集。

rng (“默认”)%用于再现性N = 1e6;X = [mvnrnd([-1 -1],眼睛(2),N);mvnrnd([1],眼(2),N)];y = [0 (N,1);的(N, 1)];

可视化数据集。

图散射(X (1: N, 1), X (1: N, 2),“标记”“。”“MarkerEdgeAlpha”, 0.01)散射(X (N + 1:2 * N, 1), X (N + 1:2 * N, 2),“标记”“。”“MarkerEdgeAlpha”, 0.01)

使用自适应逻辑回归训练增强分类树集合(LogitBoost,即二进制分类的默认值)。计算函数的时间以进行比较。

tic Mdl1 = fitcensemble(X,y);toc
运行时间为478.988422秒。

,加快培训速度“NumBins”名称-值对参数。如果您指定“NumBins”值为正整数标量,然后软件将每个数值预测器放入指定数量的等概率容器中,然后在容器索引上生长树,而不是原始数据。该软件不bin分类预测器。

tic Mdl2 = fitcensemble(X,y,“NumBins”, 50);toc
运行时间为165.598434秒。

使用二进制数据而不是原始数据时,该过程大约快三倍。注意,经过的时间可能因操作系统而异。

比较复代法的分类误差。

rsLoss1 = resubLoss(Mdl1)
rsLoss1 = 0.0788
rsLoss2 = resubLoss(Mdl2)
rsLoss2 = 0.0788

在这个例子中,对预测器值进行分箱,可以减少训练时间而不损失准确性。一般来说,当您拥有像本例中这样的大型数据集时,使用装箱选项可以加快训练速度,但可能会导致准确性下降。如果希望进一步减少训练时间,请指定较小数量的箱子。

方法重新生成已分箱的预测器数据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值是年代。

估计增强分类树集成的泛化误差。

加载电离层数据集。

负载电离层

使用AdaBoostM1和10次交叉验证交叉验证分类树集合。指定每个树应该使用决策树模板最多分割五次。

rng (5);%用于再现性t = templateTree(“MaxNumSplits”5);Mdl = fitcensemble(X,Y,“方法”“AdaBoostM1”“学习者”t“CrossVal”“上”);

Mdl是一个ClassificationPartitionedEnsemble模型。

绘制累计的10倍交叉验证的误分类率。显示集成估计的泛化误差。

kflc = kfoldLoss(Mdl,“模式”“累积”);图;情节(kflc);ylabel (“误分类率10倍”);包含(“学习周期”);

estGenError = kflc(end)
estGenError = 0.0712

kfoldLoss默认情况下返回泛化错误。然而,绘制累积损失可以让您监视损失如何随着弱学习器在集成中累积而变化。

在累积了大约50个弱学习器后,集成的误分类率达到0.06左右。然后,随着弱学习器的加入,误分类率略有增加。

如果您对集成的泛化误差感到满意,那么,要创建一个预测模型,请使用除交叉验证之外的所有设置再次训练集成。但是,调优超参数是一种很好的实践,比如每棵树的最大决策分割数量和学习周期的数量。

自动使用超参数优化fitcensemble

加载电离层数据集。

负载电离层

通过使用自动超参数优化,可以找到将5倍交叉验证损失最小化的超参数。

Mdl = fitcensemble(X,Y,“OptimizeHyperparameters”“汽车”)

在本例中,为了重现性,设置随机种子并使用“expected-improvement-plus”采集功能。另外,为了随机森林算法的再现性,指定“复制”名-值对参数为真正的对于树型学习者。

rng (“默认”) t = templateTree(“复制”,真正的);Mdl = fitcensemble(X,Y,“OptimizeHyperparameters”“汽车”“学习者”t...“HyperparameterOptimizationOptions”结构(“AcquisitionFunctionName”“expected-improvement-plus”))
|===================================================================================================================================| | Iter | Eval客观客观| | | BestSoFar | BestSoFar | |方法NumLearningC - | LearnRate | MinLeafSize | | |结果| | |运行时(观察)| (estim) | |永昌龙  | | | |===================================================================================================================================| | 最好1 | | 0.10256 | 1.8347 | 0.10256 | 0.10256 |RUSBoost | 11 | 0.010199 | 17 |
| 2 | Best | 0.062678 | 7.9241 | 0.062678 | 0.064264 | LogitBoost | 206 | 0.96537 | 33 |
| 3 |接受| 0.099715 | 6.9431 | 0.062678 | 0.062688 | AdaBoostM1 | 130 | 0.0072814 | 2 |
| 4 |接受| 0.065527 | 1.2539 | 0.062678 | 0.062681 |打包| 25 | - | 5 |
| 5 |接受| 0.065527 | 6.6932 | 0.062678 | 0.062695 | LogitBoost | 178 | 0.52008 | 40 |
| 6 | Accept | 0.068376 | 5.6617 | 0.062678 | 0.062693 | GentleBoost | 146 | 0.46233 | 8 |
| 7 |接受| 0.076923 | 16.873 | 0.062678 | 0.063613 | GentleBoost | 456 | 0.0018323 | 3 |
| 8 |接受| 0.068376 | 17.823 | 0.062678 | 0.063878 | LogitBoost | 479 | 0.036176 | 7 |
| 9 |接受| 0.068376 | 10.436 | 0.062678 | 0.065468 | LogitBoost | 277 | 0.99964 | 42 |
| 10 |接受| 0.17379 | 0.49145 | 0.062678 | 0.064692 | LogitBoost | 11 | 0.0012008 | 1 |
| 11 |接受| 0.065527 | 4.506 | 0.062678 | 0.064854 |打包| 100 | - | 1 |
| 12 |接受| 0.076923 | 0.92904 | 0.062678 | 0.062571 | GentleBoost | 23 | 0.0096328 | 2 |
| 13 |接受| 0.082621 | 0.74291 | 0.062678 | 0.064919 | GentleBoost | 18 | 0.0078878 | 61 |
| 14 |接受| 0.065527 | 21.655 | 0.062678 | 0.06557 |打包| 499 | - | 7 |
| 15 |接受| 0.079772 | 13.489 | 0.062678 | 0.064962 | GentleBoost | 359 | 0.080649 | 1 |
| 16 |接受| 0.35897 | 0.44838 | 0.062678 | 0.062491 |打包| 10 | - | 171 |
| 17 |接受| 0.35897 | 0.68438 | 0.062678 | 0.062483 | AdaBoostM1 | 14 | 0.0029975 | 174 |
| 18 | Accept | 0.10826 | 26.872 | 0.062678 | 0.062484 | RUSBoost | 498 | 0.35355 | 1 |
| 19 | Accept | 0.64103 | 0.99918 | 0.062678 | 0.062469 | RUSBoost | 20 | 0.11564 | 175 |
| 20 | Accept | 0.091168 | 9.9199 | 0.062678 | 0.062474 | RUSBoost | 187 | 0.0010337 | 5 |
|===================================================================================================================================| | Iter | Eval客观客观| | | BestSoFar | BestSoFar | |方法NumLearningC - | LearnRate | MinLeafSize | | |结果| | |运行时(观察)| (estim) | |永昌龙  | | | |===================================================================================================================================| | 21日|接受| 0.076923 | 12.002 | 0.062678 | 0.062473|GentleBoost | 322 | 0.020651 | 174 |
| 22 |接受| 0.068376 | 2.513 | 0.062678 | 0.062473 | AdaBoostM1 | 47 | 0.96063 | 1 |
| 23 |接受| 0.17379 | 6.2411 | 0.062678 | 0.062357 | LogitBoost | 166 | 0.0011034 | 175 |
| 24 |接受| 0.17379 | 0.45444 | 0.062678 | 0.062629 | LogitBoost | 10 | 0.0027609 | 15 |
| 25 |接受| 0.062678 | 4.7119 | 0.062678 | 0.064312 | LogitBoost | 125 | 0.9709 | 4 |
| 26 |接受| 0.065527 | 22.026 | 0.062678 | 0.062645 |打包| 500 | - | 3 |
| 27 | Accept | 0.11396 | 12.641 | 0.062678 | 0.062648 | RUSBoost | 237 | 0.61788 | 5 |
| 28 |接受| 0.079772 | 18.228 | 0.062678 | 0.064369 | GentleBoost | 494 | 0.96149 | 74 |
| 29 |接受| 0.076923 | 17.529 | 0.062678 | 0.063871 | GentleBoost | 470 | 0.0014504 | 21 |
| 30 | Accept | 0.062678 | 18.438 | 0.062678 | 0.063378 | LogitBoost | 498 | 0.21952 | 3 |

__________________________________________________________ 优化完成。最大目标达到30个。总功能计算:30总运行时间:302.4207秒。总目标函数评估时间:270.9631最佳观测可行点:Method NumLearningCycles LearnRate MinLeafSize __________ _________________ _________ ___________ LogitBoost 206 0.96537 33观测目标函数值= 0.062678估计目标函数值= 0.064468函数评估时间= 7.9241最佳估计可行点(根据模型):方法NumLearningCycles LearnRate MinLeafSize __________ _________________ _________ ___________ LogitBoost 277 0.99964 42估计目标函数值= 0.063378估计函数评估时间= 10.4954
Mdl = classreg.learning.classif.ClassificationEnsemble ResponseName: 'Y' CategoricalPredictors: [] ClassNames: {'b' 'g'} ScoreTransform: 'none' NumObservations: 351 HyperparameterOptimizationResults: [1×1 BayesianOptimization] NumTrained: 277 Method: 'LogitBoost' LearnerNames: {'Tree'} reasonforterminate: '完成所要求的训练周期数后正常终止。'FitInfo: [277×1 double] FitInfoDescription: {2×1 cell}属性,方法

对二元分类的集成聚合方法进行优化搜索,结束NumLearningCycles,在LearnRate适用的方法,并在树学习MinLeafSize.输出是估计交叉验证损失最小的集成分类器。

创建具有令人满意的预测性能的增强分类树集合的一种方法是使用交叉验证调整决策树的复杂性级别。在搜索最优复杂度级别时,调整学习速率以使学习周期数量最小化。

此示例通过使用交叉验证选项“KFold”名称-值对参数)和kfoldLoss函数。或者,您可以使用“OptimizeHyperparameters”名称-值对参数自动优化超参数。看到优化分类集成

加载电离层数据集。

负载电离层

搜索最优的树复杂度级别:

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

  2. 估计每个集合的交叉验证误分类率。

  3. 对于树的复杂度级别 j j 1 J ,通过绘制集合与学习周期数的关系来比较累积的、交叉验证的误分类率。在同一图表上为每种学习率绘制单独的曲线。

  4. 选择误分类率最小的曲线,并记下相应的学习周期和学习率。

交叉验证深度分类树和树桩。这些分类树作为基准。

rng (1)%用于再现性MdlDeep = fitctree(X,Y,“CrossVal”“上”“MergeLeaves”“关闭”...“MinParentSize”1);MdlStump = fitctree(X,Y,“MaxNumSplits”,1,“CrossVal”“上”);

使用5倍交叉验证交叉验证150个增强分类树的集合。使用树模板,使用序列中的值改变最大分割数 3. 0 3. 1 3. 是这样的 3. 并不比n- 1。对于每个变量,使用集合{0.1,0.25,0.5,1}中的每个值调整学习率;

n = size(X,1);M = log(n - 1)/log(3);learnRate = [0.1 0.25 0.5 1];numLR = numel(learnRate);maxnumsplitting = 3.^(0:m);numMNS = nummel (maxnumsplitting);numTrees = 150;Mdl = cell(numMNS,numLR);k = 1:numLRj = 1:numMNS t =模板树(“MaxNumSplits”maxNumSplits (j));Mdl{j,k} = fitcensemble(X,Y,“NumLearningCycles”numTrees,...“学习者”t“KFold”5,“LearnRate”, learnRate (k));结束结束

估算每个集成和分类树作为基准的累积的、交叉验证的错误分类率。

kflAll = @(x)kfoldLoss(x,“模式”“累积”);errorCell = cellfun(kflAll,Mdl,“统一”、假);error =重塑(cell2mat(errorCell),[numTrees nummel (maxnumsplitting) nummel (learnRate)]);errorDeep = kfoldLoss(MdlDeep);errorStump = kfoldLoss(MdlStump);

绘制交叉验证错分类率如何随着集合中树数量的增加而表现。在同一图上绘制有关学习率的曲线,并为不同的树复杂性级别绘制单独的图。选择要绘制的树复杂度级别的子集。

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”) . ylim = [0 0.2];包含(“树的数量”) ylabel (“旨在misclass。率的)标题(sprintf (' maxnumsplitting = %0.3g', maxnumsplitting (mnsPlot(k)))) hold结束hL = legend([cellstr(num2str(learnRate','学习率= %0.2f'));...“深树”“树桩”“分钟misclass。率的]);hL.Position(1) = 0.6;

每条曲线都包含最小的交叉验证错分类率,发生在集合中最优的树数。

确定最大的分割数量,树的数量,以及产生最低误分类率的整体学习率。

[miner,minErrIdxLin] = min(error(:)));[idxNumTrees,idxMNS,idxLR] = ind2sub(size(error),minErrIdxLin);流(“\ nMin。misclass。率= %0.5f'minErr)
分钟misclass。Rate = 0.05413
流('\ nooptimal参数值:\nNum. '树木= %d', idxNumTrees);
最优参数值:Num. Trees = 47
流('\ nmaxnumsplitting = %d\nLearning Rate = %0.2f\n'...maxNumSplits (idxMNS) learnRate (idxLR))
maxnumsplitting = 3学习率= 0.25

基于最优超参数和整个训练集创建一个预测集合。

tFinal = templateTree(“MaxNumSplits”maxNumSplits (idxMNS));MdlFinal = fitcensemble(X,Y,“NumLearningCycles”idxNumTrees,...“学习者”tFinal,“LearnRate”learnRate (idxLR))
MdlFinal = classreg.learning.classif.ClassificationEnsemble ResponseName: 'Y' CategoricalPredictors: [] ClassNames: {'b' 'g'} ScoreTransform: 'none' NumObservations: 351 NumTrained: 47 Method: 'LogitBoost' LearnerNames: {'Tree'} reasonforterminate: '完成所要求的训练周期数后正常终止。'FitInfo: [47×1 double] FitInfoDescription: {2×1 cell}属性,方法

MdlFinal是一个ClassificationEnsemble.在给定预测器数据的情况下,要预测雷达返回是否良好,可以将预测器数据和传递MdlFinal预测

不再使用交叉验证选项手动搜索最优值(“KFold”)及kfoldLoss函数,可以使用“OptimizeHyperparameters”名称-值对参数。当你指定“OptimizeHyperparameters”,软件采用贝叶斯优化方法自动找到最优参数。得到的最优值“OptimizeHyperparameters”可能与使用手动搜索获得的结果不同。

mdl = fitcensemble(X,Y,“OptimizeHyperparameters”, {“NumLearningCycles”“LearnRate”“MaxNumSplits”})

|====================================================================================================================| | Iter | Eval客观客观| | | BestSoFar | BestSoFar | NumLearningC - | LearnRate | MaxNumSplits | | |结果| | |运行时(观察)| (estim) |永昌龙  | | | |====================================================================================================================| | 最好1 | | 0.17379 | 6.5879 | 0.17379 | 0.17379 | 137 | 0.001364 | 3 | | 2 | | 0.17379接受|0.86125 | 0.17379 | 0.17379 | 15 | 0.013089 | 144 | | 3 | Best | 0.065527 | 1.5839 | 0.065527 | 0.065538 | 31 | 0.47201 | 2 | | 4 | Accept | 0.074074 | 16.044 | 0.065527 | 0.065549 | 340 | 0.92167 | 7 | | 5 | Accept | 0.088319 | 1.1615 | 0.065527 | 0.065562 | 20 | 0.24336 | 55 | | 6 | Accept | 0.076923 | 0.65064 | 0.065527 | 0.072693 | 11 | 0.64021 | 1 | | 7 | Accept | 0.071225 | 0.58602 | 0.065527 | 0.072095 | 10 | 0.99816 | 5 | | 8 | Accept | 0.076923 | 0.60015 | 0.065527 | 0.072986 | 10 | 0.75338 | 90 | | 9 | Accept | 0.096866 | 0.59733 | 0.065527 | 0.06506 | 10 | 0.42369 | 2 | | 10 | Best | 0.062678 | 1.8773 | 0.062678 | 0.062667 | 37 | 0.99202 | 63 | | 11 | Accept | 0.065527 | 1.0259 | 0.062678 | 0.062575 | 19 | 0.97944 | 1 | | 12 | Best | 0.059829 | 4.2008 | 0.059829 | 0.059766 | 86 | 0.40411 | 1 | | 13 | Best | 0.05698 | 3.0948 | 0.05698 | 0.057382 | 63 | 0.60537 | 1 | | 14 | Accept | 0.062678 | 3.2667 | 0.05698 | 0.059783 | 69 | 0.6167 | 4 | | 15 | Accept | 0.065527 | 3.5624 | 0.05698 | 0.060842 | 76 | 0.49778 | 2 | | 16 | Accept | 0.065527 | 2.1858 | 0.05698 | 0.061283 | 44 | 0.99938 | 4 | | 17 | Accept | 0.065527 | 2.6444 | 0.05698 | 0.062047 | 55 | 0.59384 | 46 | | 18 | Accept | 0.059829 | 6.0262 | 0.05698 | 0.061494 | 128 | 0.29635 | 48 | | 19 | Accept | 0.062678 | 8.417 | 0.05698 | 0.061481 | 182 | 0.25896 | 9 | | 20 | Accept | 0.062678 | 4.8812 | 0.05698 | 0.061248 | 107 | 0.38775 | 2 | |====================================================================================================================| | Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | NumLearningC-| LearnRate | MaxNumSplits | | | result | | runtime | (observed) | (estim.) | ycles | | | |====================================================================================================================| | 21 | Accept | 0.17379 | 0.53809 | 0.05698 | 0.0612 | 10 | 0.0010009 | 53 | | 22 | Accept | 0.17379 | 0.56404 | 0.05698 | 0.061382 | 10 | 0.051241 | 2 | | 23 | Best | 0.05698 | 4.1022 | 0.05698 | 0.060531 | 87 | 0.3124 | 1 | | 24 | Accept | 0.05698 | 4.1749 | 0.05698 | 0.058776 | 85 | 0.259 | 5 | | 25 | Accept | 0.065527 | 4.5086 | 0.05698 | 0.059405 | 93 | 0.20081 | 4 | | 26 | Accept | 0.17379 | 0.53874 | 0.05698 | 0.059578 | 10 | 0.0035026 | 2 | | 27 | Accept | 0.17379 | 1.4021 | 0.05698 | 0.059534 | 30 | 0.0036169 | 1 | | 28 | Accept | 0.151 | 1.9551 | 0.05698 | 0.059446 | 41 | 0.028937 | 1 | | 29 | Accept | 0.17379 | 1.4866 | 0.05698 | 0.059485 | 29 | 0.0010049 | 2 | | 30 | Accept | 0.1453 | 0.55298 | 0.05698 | 0.059371 | 10 | 0.13172 | 3 | __________________________________________________________ Optimization completed. MaxObjectiveEvaluations of 30 reached. Total function evaluations: 30 Total elapsed time: 122.1601 seconds. Total objective function evaluation time: 89.6783 Best observed feasible point: NumLearningCycles LearnRate MaxNumSplits _________________ _________ ____________ 87 0.3124 1 Observed objective function value = 0.05698 Estimated objective function value = 0.059371 Function evaluation time = 4.1022 Best estimated feasible point (according to models): NumLearningCycles LearnRate MaxNumSplits _________________ _________ ____________ 87 0.3124 1 Estimated objective function value = 0.059371 Estimated function evaluation time = 4.1152
mdl = classreg.learning.classif.ClassificationEnsemble ResponseName: 'Y' CategoricalPredictors: [] ClassNames: {'b' 'g'} ScoreTransform: 'none' NumObservations: 351 HyperparameterOptimizationResults: [1×1 BayesianOptimization] NumTrained: 87 Method: 'LogitBoost' LearnerNames: {'Tree'} reasonforterminate: '完成所要求的训练周期数后正常终止。'FitInfo: [87×1 double] FitInfoDescription: {2×1 cell}属性,方法

输入参数

全部折叠

用于训练模型的示例数据,指定为表。每行资源描述对应一个观测值,每一列对应一个预测变量。资源描述可以为响应变量包含一个额外的列。不允许多列变量和字符向量单元格数组以外的单元格数组。

  • 如果资源描述包含响应变量,并且希望使用所有剩余变量作为预测器,然后使用指定响应变量ResponseVarName

  • 如果资源描述包含响应变量,并且您希望仅使用剩余变量的子集作为预测器,然后使用指定公式公式

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

请注意

为节省内存和执行时间,提供X而且Y而不是资源描述

数据类型:表格

响应变量名,指定为响应变量的名称资源描述

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

响应变量必须是类别、字符或字符串数组、逻辑或数字向量或字符向量的单元格数组。如果响应变量是字符数组,则每个元素必须对应数组中的一行。

类指定类的顺序以进行分类一会名称-值对参数。否则,fitcensemble类的顺序,并将其存储在Mdl。一会

数据类型:字符|字符串

响应变量和预测变量子集的解释模型,在表单中指定为字符向量或字符串标量“Y ~ X1 + X2 + X3”.在这种形式下,Y表示响应变量,和X1X2,X3表示预测变量。

中指定变量的子集资源描述使用公式作为训练模型的预测因子。如果您指定了一个公式,那么该软件不使用任何变量资源描述没有出现在公式

公式中的变量名必须同时为资源描述Tbl.Properties.VariableNames)和有效的MATLAB®标识符。

中的变量名可以验证资源描述通过使用isvarname函数。下面的代码返回逻辑1真正的)用于每个具有有效变量名的变量。

cellfun (@isvarname Tbl.Properties.VariableNames)
如果变量名称在资源描述无效的,然后使用matlab.lang.makeValidName函数。
Tbl.Properties.VariableNames = matlab.lang.makeValidName(Tbl.Properties.VariableNames);

数据类型:字符|字符串

预测器数据,指定为数值矩阵。

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

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

中出现的顺序指定预测符的名称X,使用PredictorNames名称-值对参数。

数据类型:|

响应数据,指定为类别、字符或字符串数组、逻辑或数字向量或字符向量的单元格数组。每一项Y对观察的响应或标签是否在相应的行中X资源描述.的长度Y的行数X资源描述必须是相等的。如果响应变量是字符数组,则每个元素必须对应数组中的一行。

类指定类的顺序一会名称-值对参数。否则,fitcensemble类的顺序,并将其存储在Mdl。一会

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

名称-值对参数

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

例子:“CrossVal”,“上”、“LearnRate”,0.05指定实现10倍交叉验证并使用0.05作为学习率。

请注意

方法时,不能使用任何交叉验证名称-值对参数“OptimizeHyperparameters”名称-值对参数。您可以修改交叉验证“OptimizeHyperparameters”只有使用“HyperparameterOptimizationOptions”名称-值对参数。

一般集成选项

全部折叠

集合聚合方法,指定为由逗号分隔的对组成“方法”和以下值之一。

价值 方法 分类问题支持万博1manbetx 相关的名称-值对参数
“包” 引导聚合(例如,随机森林)[2]) -如果“方法”“包”,然后fitcensemble默认情况下,在每个分割(随机森林)中使用随机预测器选择的bagging。要使用没有随机选择的袋装,请使用树学习器“NumVariablesToSample”值是“所有”或者使用判别分析学习器。 二进制和多类 N/A
“子” 随机子空间 二进制和多类 NPredToSample
“AdaBoostM1” 自适应增强 二只 LearnRate
“AdaBoostM2” 自适应增强 多级只 LearnRate
“GentleBoost” 温和自适应增强 二只 LearnRate
“LogitBoost” 自适应logistic回归 二只 LearnRate
“LPBoost” 线性编程增强-需要优化工具箱™ 二进制和多类 MarginPrecision
“RobustBoost” 健壮的增强-需要优化工具箱 二只 RobustErrorGoalRobustMarginSigmaRobustMaxMargin
“RUSBoost” 随机欠采样增强 二进制和多类 LearnRateRatioToSmallest
“TotalBoost” 完全纠正提升-需要优化工具箱 二进制和多类 MarginPrecision

您可以指定抽样选项(FResample取代重新取样)作为训练数据,当你使用装袋(“包”)或提升(“TotalBoost”“RUSBoost”“AdaBoostM1”“AdaBoostM2”“GentleBoost”“LogitBoost”“RobustBoost”,或“LPBoost”).

默认值为:

  • “LogitBoost”对于二元问题“AdaBoostM2”对于多类问题,如果“学习者”只包括树学习器

  • “AdaBoostM1”对于二元问题“AdaBoostM2”对于多类问题,如果“学习者”包括树和判别分析学习器

  • “子”如果“学习者”不包括树学习器

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

例子:“方法”,“包”

集成学习周期数,指定为由逗号分隔的对组成“NumLearningCycles”一个正整数或者“AllPredictorCombinations”

  • 如果指定一个正整数,那么在每个学习周期中,软件为每个模板对象训练一个弱学习器学习者.因此,软件进行训练NumLearningCycles *元素个数(学习者)学习者。

  • 如果你指定“AllPredictorCombinations”,然后设置方法“子”并仅为指定一个学习器学习者.通过这些设置,软件对学习者进行所有可能的预测因子组合的训练NPredToSample一次。因此,软件进行训练nchoosek(NPredToSample大小(X, 2))学习者。

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

详情请参见提示

例子:“NumLearningCycles”,500年

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

弱学习器的集合,指定为由逗号分隔的对组成“学习者”以及弱学习器模板对象的弱学习器名称、弱学习器模板对象或弱学习器模板对象的单元格向量。

弱的学习者 Weak-Learner名字 模板对象创建函数 方法设置
判别分析 “判别” templateDiscriminant 推荐给“子”
k最近的邻居 “资讯” templateKNN “子”只有
决策树 “树” templateTree 所有方法,除了“子”

  • 弱学习者名称(“判别”“资讯”,或“树”) - - -fitcensemble使用模板对象创建函数在默认设置下创建的弱学习器。例如,指定“学习者”,“判别”和指定一样吗“学习者”,templateDiscriminant ().弱学习器的默认设置请参见模板对象创建函数页。

  • 弱学习者模板对象-fitcensemble使用模板对象创建函数创建的弱学习器。使用模板对象创建函数的名称-值对参数指定弱学习器的设置。

  • 细胞载体弱学习者模板对象-fitcensemble生长每个学习周期的学习者(见NumLearningCycles).例如,对于由两种类型的分类树组成的集成,供应{t1 t2},在那里t1而且t2分类树模板对象是否返回templateTree

默认的“学习者”值是“资讯”如果“方法”“子”

默认的“学习者”值是“树”如果“方法”“包”或者任何增强方法。的默认值templateTree ()的值“方法”

  • 对于袋装决策树,最大决策分割数(“MaxNumSplits”)是n - 1,在那里n是观测的数量。为每次分割随机选择的预测因子的数量(“NumVariablesToSample”)是预测因子数量的平方根。因此,fitcensemble长得很深的决策树。您可以种植较浅的树,以减少模型复杂性或计算时间。

  • 对于增强决策树,“MaxNumSplits”是10和“NumVariablesToSample”“所有”.因此,fitcensemble长浅决策树。您可以种植更深的树以获得更好的精度。

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

例子:“学习者”,templateTree (MaxNumSplits, 5)

打印输出频率,指定为由逗号分隔的对组成“NPrint”一个正整数或者“关闭”

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

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

  • 还有一个交叉验证选项fitcensemble每次训练结束时,向命令行显示一条消息折叠。

如果你指定“关闭”,然后fitcensemble当它完成训练弱学习器时不显示消息。

提示

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

例子:“NPrint”,5

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

数值预测器的箱数,指定为逗号分隔的对,由“NumBins”一个正整数标量。此论点仅当fitcensemble使用树学习器,也就是说,“学习者”要么是“树”或使用创建的模板对象templateTree

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

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

    • 如果“NumBins”值超过数值(u)的唯一值的预测,那么fitcensemble将预测器分类为u箱里。

    • fitcensemble不包含分类预测符。

当你使用一个大的训练数据集时,这个分箱选项会加快训练速度,但会导致潜在的准确性下降。你可以试试“NumBins”,50岁先改,再改“NumBins”值取决于准确性和训练速度。

经过训练的模型将料仓边存储在BinEdges财产。

例子:“NumBins”,50岁

数据类型:|

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

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

规范的“CategoricalPredictors”适用于以下情况:

  • “学习者”指定树学习器。

  • “学习者”指定k-最近的学习器,其中所有预测器都是分类的。

每个学习器都以与学习器对应的拟合函数相同的方式识别和处理分类预测器。看到“CategoricalPredictors”fitcknnk-最近的学习器和“CategoricalPredictors”fitctree对于树型学习者。

例子:“CategoricalPredictors”、“所有”

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

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

  • 如果你提供X而且Y,那么你就可以使用了“PredictorNames”给出预测变量X的名字。

    • 里面名字的顺序PredictorNames必须对应的列顺序X.也就是说,PredictorNames {1}名字是X (: 1)PredictorNames {2}名字是X (:, 2)等等。同时,大小(X, 2)而且元素个数(PredictorNames)必须是相等的。

    • 默认情况下,PredictorNames{x1, x2,…}

  • 如果你提供资源描述,那么你就可以使用了“PredictorNames”选择在训练中使用哪些预测变量。也就是说,fitcensemble中仅使用预测变量PredictorNames以及训练中的响应变量。

    • PredictorNames的子集Tbl.Properties.VariableNames并且不能包括响应变量的名称。

    • 默认情况下,PredictorNames包含所有预测变量的名称。

    • 一个好的实践是使用其中一种来指定训练的预测器“PredictorNames”公式只有。

例子:PredictorNames,{‘SepalLength’,‘SepalWidth’,‘PetalLength’,‘PetalWidth}

数据类型:字符串|细胞

响应变量名,指定为逗号分隔的对,由“ResponseName”和字符向量或字符串标量。

  • 如果你提供Y,那么你就可以使用了“ResponseName”为响应变量指定名称。

  • 如果你提供ResponseVarName公式,那么你就不能用了“ResponseName”

例子:“ResponseName”、“响应”

数据类型:字符|字符串

交叉验证选择

全部折叠

交叉验证标志,指定为逗号分隔的对,由“Crossval”而且“上”“关闭”

如果你指定“上”,然后软件实现10倍交叉验证。

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

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

例子:“Crossval”,“上”

交叉验证分区,指定为逗号分隔的对,由“CVPartition”和一个cvpartition创建的分区对象cvpartition.分区对象指定交叉验证的类型以及训练集和验证集的索引。

要创建交叉验证的模型,您只能使用以下四个名称-值对参数之一:CVPartition坚持KFold,或Leaveout

例子:假设您创建一个随机分区,对500个观察结果进行5次交叉验证,使用cvp = cvpartition(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”而且“上”“关闭”.如果你指定“Leaveout”,“上”,那么,对于每一个n观察(n表中是否列明剔除缺失观测的观测次数NumObservations属性的模型),软件完成这些步骤:

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

  2. 存储n紧凑的,训练有素的模型在一个单元n的-by-1单元格向量训练有素的交叉验证模型的属性。

要创建交叉验证的模型,您只能使用以下四个名称-值对参数之一:CVPartition坚持KFold,或Leaveout

例子:“Leaveout”,“上”

其他分类选择

全部折叠

用于训练的类名,指定为逗号分隔的对,由“类名”以及类别、字符或字符串数组、逻辑或数字向量或字符向量的单元格数组。一会必须具有相同的数据类型Y

如果一会是字符数组,则每个元素必须对应数组中的一行。

使用“类名”:

  • 在培训期间安排课程。

  • 指定与类顺序对应的任何输入或输出参数维度的顺序。例如,使用“类名”指定…尺寸的顺序成本或返回的分类分数的列顺序预测

  • 选择用于培训的类的子集。例如,假设集合中所有不同的类名Y{' a ', ' b ', ' c '}.用课堂上的观察来训练模型“一个”而且“c”只是,指定“类名”,{' a ', ' c '}

的默认值一会所有不同类名的集合在吗Y

例子:“类名”,{' b ', ' g '}

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

错误分类代价,指定为逗号分隔的对,由“成本”一个方阵或结构。如果你指定:

  • 方阵成本,然后成本(i, j)将一个点分类的成本是多少j如果它真正的阶级是.也就是说,行对应于真实的类,列对应于预测的类。的相应行和列的类顺序成本,也指定一会名称-值对参数。

  • 结构年代,那么它必须有两个字段:

    • S.ClassNames,其中包含类名作为与Y

    • S.ClassificationCosts,其中包含成本矩阵,其行和列的顺序为S.ClassNames

默认为(K) -眼睛(K),在那里K是不同类的数量。

请注意

fitcensemble使用成本中指定的优先类概率之前.然后,fitcensemble使用调整后的先验概率进行训练,并将成本矩阵重置为默认值。

例子:'Cost',[0 12 2;1 0 2;2 2 0]

数据类型:||结构体

每个类的先验概率,由逗号分隔的对组成“之前”和这个表中的一个值。

价值 描述
“经验” 类先验概率是类的相对频率Y
“统一” 所有类先验概率都等于1/K,在那里K是类的数量。
数值向量 每个元素都是一个类先验概率。对元素进行排序Mdl。一会或使用一会名称-值对参数。软件将元素规范化,使它们的和为1
结构数组

一个结构年代有两个字段:

  • S.ClassNames作为相同类型的变量包含类名Y

  • S.ClassProbs包含相应先验概率的向量。软件将元素规范化,使它们的和为1

fitcensemble的先验概率归一化之前和为1。

例子:结构(“类名”,{{setosa,杂色的,‘virginica}}, ClassProbs, 1:3)

数据类型:字符|字符串|||结构体

分数转换,指定为由逗号分隔的对组成“ScoreTransform”和字符向量、字符串标量或函数句柄。

该表总结了可用的字符向量和字符串标量。

价值 描述
“doublelogit” 1 / (1 +e2x)
“invlogit” 日志(x/ (1 -x))
“ismax” 将得分最大的类的得分设置为1,并将所有其他类的得分设置为0
分对数的 1 / (1 +e- - - - - -x)
“没有”“身份” x(转换)
“标志” 1x< 0
为0x= 0
1x> 0
“对称” 2x- 1
“symmetricismax” 将得分最大的类的得分设置为1,并将所有其他类的得分设置为-1
“symmetriclogit” 2 / (1 +e- - - - - -x) - 1

对于MATLAB函数或您定义的函数,使用其函数句柄进行分数转换。函数句柄必须接受一个矩阵(原始分数)并返回一个相同大小的矩阵(转换后的分数)。

例子:“ScoreTransform”、“分对数的

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

观察权重,由逗号分隔的对组成“重量”和一个数值向量的正值或变量的名称资源描述.软件对每一行的观察结果进行加权X资源描述中对应的值权重.的大小权重必须等于的行数X资源描述

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

软件规范化权重求和为各类的先验概率值。

默认情况下,权重(n, 1),在那里n观察的数量在吗X资源描述

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

增加方法和装袋的采样选项

全部折叠

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

使用“FResample”,指定“包”方法或一组重新取样“上”

例子:“FResample”,0.75

数据类型:|

标志,指示带有替换的采样,指定为逗号分隔的对,由“替换”而且“关闭”“上”

  • “上”时,软件对训练观测值进行替换采样。

  • “关闭”时,软件对训练观测值进行采样,不进行替换。如果你设置重新取样“上”,然后软件采样训练观察假设统一的权重。如果您还指定了一个增强方法,那么软件将通过重新加权观测值来增强。

除非你设置方法“包”或一组重新取样“上”取代没有效果。

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

标志,指示重采样,指定为逗号分隔的对,由重新取样的而且“关闭”“上”

  • 如果方法是一个增强方法,则:

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

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

  • 如果方法“包”,然后重新取样的必须“上”.该软件对训练观察的一部分进行重新采样(参见FResample),不论是否更换(见取代).

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

AdaBoostM1, AdaBoostM2, LogitBoost和GentleBoost方法选项

全部折叠

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

用收缩,设定来训练整体LearnRate到小于1,例如,0.1是很受欢迎的选择。使用收缩训练集合需要更多的学习迭代,但通常可以获得更好的精度。

例子:“LearnRate”,0.1

数据类型:|

RUSBoost方法选项

全部折叠

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

用收缩,设定来训练整体LearnRate到小于1,例如,0.1是很受欢迎的选择。使用收缩训练集合需要更多的学习迭代,但通常可以获得更好的精度。

例子:“LearnRate”,0.1

数据类型:|

相对于最低表示类的抽样比例,指定为逗号分隔的对,由“RatioToSmallest”以及长度等于训练数据中不同类的数量的数值标量或数值向量。

假设有K类在训练数据中所占比例最低的类有训练数据中的观察。

  • 如果指定的是正数值标量年代,然后fitcensemble样品年代每个类的观测值,即对每个类使用相同的抽样比例。详情请参见算法

  • 如果你指定数值向量s1s2、……sK,然后fitcensemble样品如果课堂观察= 1,…,K.的要素RatioToSmallest对应于使用指定的类名的顺序一会(见提示).

默认值为(K, 1),表示采样每个班级的观察结果。

例子:‘RatioToSmallest’,(2,1)

数据类型:|

LPBoost和TotalBoost方法选项

全部折叠

边距精度控制收敛速度,由逗号分隔的对组成“MarginPrecision”和区间[0,1]中的数值标量。MarginPrecision影响收敛所需的增强迭代次数。

提示

要使用多个学习器训练集合,请为指定一个小值MarginPrecision.对于使用少数学习器进行训练,请指定一个较大的值。

例子:“MarginPrecision”,0.5

数据类型:|

RobustBoost方法选项

全部折叠

目标分类错误,指定为由逗号分隔的对组成“RobustErrorGoal”和一个非负数值标量。的值的上限取决于的值RobustMarginSigma而且RobustMaxMargin.但上限不能超过1

提示

对于一个特定的训练集,通常有一个最优的范围RobustErrorGoal.如果你把它设置得太低或太高,那么软件就会产生一个分类精度很差的模型。尝试交叉验证以搜索适当的值。

例子:“RobustErrorGoal”,0.05

数据类型:|

分类裕度分布分布在训练数据上,指定为由逗号分隔的对组成“RobustMarginSigma”和一个正的标量。在指定RobustMarginSigma,查阅有关的文献RobustBoost,例如,[19]

例子:“RobustMarginSigma”,0.5

数据类型:|

训练数据中的最大分类裕度,指定为由逗号分隔的对组成“RobustMaxMargin”和一个非负数值标量。该软件最小化训练数据中具有以下分类边际的观察数RobustMaxMargin

例子:“RobustMaxMargin”,1

数据类型:|

随机子空间方法选项

全部折叠

每个随机子空间学习器要采样的预测器数量,指定为由逗号分隔的对组成“NPredToSample”一个正整数在区间1,…,p,在那里p是预测变量的数量(大小(X, 2)大小(台,2)).

数据类型:|

超参数优化选项

全部折叠

参数进行优化,指定为由逗号分隔的对组成“OptimizeHyperparameters”和以下其中之一:

  • “没有”-不要优化。

  • “汽车”——使用{‘法’,‘NumLearningCycles’,‘LearnRate}以及指定的默认参数学习者

    • 学习者“树”(默认){' MinLeafSize '}

    • 学习者“判别”- - - - - -{“三角洲”,“伽马”}

    • 学习者“资讯”- - - - - -{‘距离’,‘NumNeighbors}

    请注意

    对于超参数优化,学习者必须是单个参数,而不是字符串数组或单元格数组。

  • “所有”-优化所有符合条件的参数。

  • 符合条件的参数名的字符串数组或单元格数组

  • 向量的optimizableVariable对象的输出hyperparameters

优化尝试最小化交叉验证损失(错误)fitcensemble通过改变参数。有关交叉验证丢失的信息(尽管是在不同的上下文中),请参见分类损失.若要控制交叉验证类型和优化的其他方面,请使用HyperparameterOptimizationOptions名称-值对。

请注意

“OptimizeHyperparameters”值覆盖使用其他名称-值对参数设置的任何值。例如,设置“OptimizeHyperparameters”“汽车”导致“汽车”要应用的值。

符合条件的参数fitcensemble是:

  • 方法-取决于职业的数量。

    • 两个类-合格的方法是“包”“GentleBoost”“LogitBoost”“AdaBoostM1”,“RUSBoost”

    • 三个或更多的类——合格的方法是“包”“AdaBoostM2”,“RUSBoost”

  • NumLearningCycles- - - - - -fitcensemble在正整数中搜索,默认情况下按范围按对数缩放[10500]

  • LearnRate- - - - - -fitcensemble在正实数之间搜索,默认情况下按范围按对数缩放(1 e - 3, 1)

  • 所选对象的合格超参数学习者

    学习者 合格Hyperparameters
    Bold =默认使用
    默认范围
    “判别” δ 范围内的对数缩放(1 e-6, 1 e3)
    DiscrimType “线性”“二次”“diagLinear”“diagQuadratic”“pseudoLinear”,“pseudoQuadratic”
    γ 真正的价值[0, 1]
    “资讯” 距离 “cityblock”“chebychev”“相关”的余弦“欧几里得”“汉明”“jaccard”“mahalanobis”闵可夫斯基的“seuclidean”,“枪兵”
    DistanceWeight “平等”“逆”,“squaredinverse”
    指数 正的值(0.5, 3)
    NumNeighbors 范围内对数缩放的正整数值[1,马克斯(2轮(NumObservations / 2)))
    标准化 “真正的”而且“假”
    “树” MaxNumSplits 在范围内按对数缩放的整数NumObservations-1[1,马克斯(2))
    MinLeafSize 在范围内按对数缩放的整数[1,马克斯(2楼(NumObservations / 2)))
    NumVariablesToSample 范围内的整数NumPredictors[1,马克斯(2))
    SplitCriterion gdi的“异常”,“两个”

    另外,使用hyperparameters你的选择学习者.注意,在创建对象时必须指定预测器数据和响应optimizableVariable对象。

    负载fisheririsParams =超参数(“fitcensemble”量,物种,“树”);

    要查看合格超参数和默认超参数,请检查参数个数

通过传递的向量来设置非默认参数optimizableVariable具有非默认值的对象。例如,

负载fisheririsParams =超参数(“fitcensemble”量,物种,“树”);参数(4)。Range = [1,30];

通过参数个数作为价值OptimizeHyperparameters

默认情况下,在命令行上出现迭代显示,并根据优化中的超参数数量显示图形。对于优化和绘图,目标函数为Log(1 +交叉验证损失)用于回归和分类的误分类率。要控制迭代显示,请设置详细的字段“HyperparameterOptimizationOptions”名称-值对参数。为了控制情节,设置ShowPlots字段“HyperparameterOptimizationOptions”名称-值对参数。

有关示例,请参见优化分类集成

例子:OptimizeHyperparameters,{‘法’,‘NumLearningCycles’,‘LearnRate’,‘MinLeafSize’,‘MaxNumSplits}

用于优化的选项,指定为逗号分隔的对,由“HyperparameterOptimizationOptions”还有一个结构。的效果OptimizeHyperparameters名称-值对参数。结构中的所有字段都是可选的。

字段名 默认的
优化器
  • “bayesopt”-使用贝叶斯优化。在内部,此设置调用bayesopt

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

  • “randomsearch”-在其中随机搜索MaxObjectiveEvaluations点。

“gridsearch”以随机顺序进行搜索,使用统一抽样而不从网格中替换。优化后,可以使用命令获取网格顺序的表sortrows (Mdl.HyperparameterOptimizationResults)

“bayesopt”
AcquisitionFunctionName

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

  • “expected-improvement”

  • “expected-improvement-plus”

  • “expected-improvement-per-second”

  • “lower-confidence-bound”

  • “probability-of-improvement”

名称包括的获取函数每秒不能产生可重复的结果,因为优化依赖于目标函数的运行时间。名称包括的获取函数+当他们过度开发一个区域时,修改他们的行为。详情请参见采集函数类型

“expected-improvement-per-second-plus”
MaxObjectiveEvaluations 目标函数求值的最大个数。 30.“bayesopt”“randomsearch”,而整个电网为“gridsearch”
MaxTime

时间限制,指定为正实数。时间限制以秒为单位,由抽搐而且toc.运行时可能超过MaxTime因为MaxTime不中断函数求值。

NumGridDivisions “gridsearch”,表示每个维度中值的数量。该值可以是一个正整数向量,给出每个维度的值的数量,也可以是一个适用于所有维度的标量。对于分类变量,该字段将被忽略。 10
ShowPlots 指示是否显示图的逻辑值。如果真正的,该字段根据迭代次数绘制最佳目标函数值。如果有一个或两个优化参数,如果优化器“bayesopt”,然后ShowPlots还绘制了目标函数对参数的模型。 真正的
SaveIntermediateResults 时是否保存结果的逻辑值优化器“bayesopt”.如果真正的,此字段将覆盖名为“BayesoptResults”在每次迭代中。变量是aBayesianOptimization对象。
详细的

显示到命令行。

  • 0-无迭代显示

  • 1-迭代显示

  • 2-带有额外信息的迭代显示

详细信息请参见bayesopt详细的名称-值对参数。

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

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

真正的通常会给出最健壮的结果,因为此设置考虑了分区噪声。然而,为了获得好的结果,真正的需要至少两倍的函数求值。

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

例子:“HyperparameterOptimizationOptions”、结构(MaxObjectiveEvaluations, 60)

数据类型:结构体

输出参数

全部折叠

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

模型对象 指定任何交叉验证选项? 方法设置 重新取样设置
ClassificationBaggedEnsemble 没有 “包” “上”
ClassificationEnsemble 没有 任何用于分类的集成聚合方法 “关闭”
ClassificationPartitionedEnsemble 是的 任何用于分类的集成聚合方法 “关闭”“上”

控制交叉验证的名值对参数为CrossVal坚持KFoldLeaveout,CVPartition

引用Mdl,使用点表示法。例如,要访问或显示未经交叉验证的集成的弱学习器模型对象的单元格向量,请输入Mdl。训练有素的在命令行。

提示

  • NumLearningCycles从几十到几千不等。通常,具有良好预测能力的集成需要几百到几千个弱学习器。然而,你不需要一次训练一个乐团那么多次。你可以先培养几十个学习器,检查整体性能,然后,如果有必要,训练更多的弱学习器使用重新开始分类问题。

  • 整体表现取决于整体环境和弱学习者的环境。也就是说,如果使用默认参数指定弱学习器,那么集成的性能就会很差。因此,像集成设置一样,使用模板调整弱学习器的参数并选择最小化泛化错误的值是一个很好的实践。

  • 如果指定使用重新采样重新取样,则对整个数据集进行重采样是很好的实践。即使用的默认设置1FResample

  • 如果集成聚合方法(方法)是“包”和:

    • 错误分类的代价(成本)是高度不平衡的,那么,对于袋内样本,软件对具有较大惩罚的类的唯一观测值进行过采样。

    • 类先验概率(之前)是高度倾斜的,软件会从具有大先验概率的类中过度采样唯一的观察结果。

    对于较小的样本量,这些组合可能导致具有较大惩罚或先验概率的类的相对较低的袋外观察频率。因此,估计的袋外误差是高度可变的,它可能很难解释。为了避免较大的估计袋外误差方差,特别是对于小样本容量,设置一个更平衡的错误分类成本矩阵使用成本或者一个倾斜较小的先验概率向量之前

  • 由于某些输入和输出参数的顺序对应于训练数据中的不同类,因此使用类来指定类顺序是一种良好的实践一会名称-值对参数。

    • 为了快速确定类顺序,从训练数据中删除所有未分类的观察结果(即缺少标签),获得并显示所有不同类的数组,然后指定数组一会.例如,假设响应变量(Y)是标签单元格数组。这段代码指定变量中的类顺序一会

      Ycat =分类的(Y);classNames =类别(Ycat)
      分类分配<定义>对未分类的观察和类别不包括<定义>从它的输出。因此,如果将此代码用于标签单元格数组或将类似代码用于分类数组,则不必删除缺少标签的观察值来获得不同类的列表。

    • 要指定从表示最少的标签到表示最多的标签的类顺序,然后快速确定类顺序(如前面的项目符号所示),但是在将列表传递给之前,根据频率排列列表中的类一会.根据前面的示例,这段代码指定了在中从最低到最多表示的类顺序classNamesLH

      Ycat =分类的(Y);classNames =类别(Ycat);freq =计数猫(Ycat);[~,idx] = sort(freq);classNamesLH = classNames(idx);

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

算法

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

  • 如果你设置方法是一个增强算法学习者作为决策树,那么软件默认生长浅决策树。属性可以调整树的深度MaxNumSplitsMinLeafSize,MinParentSize使用名称-值对参数templateTree

  • 用于装袋(“方法”,“包”),fitcensemble通过错分类代价大的过采样类和错分类代价小的欠采样类生成袋内样本。因此,袋外样本对错误分类代价大的类的观测值较少,而对错误分类代价小的类的观测值较多。如果使用小数据集和高度倾斜的成本矩阵训练分类集合,则每个类的袋外观察数可以很低。因此,估计的袋外误差可能有很大的方差,并且可能难以解释。同样的现象也会发生在具有较大先验概率的类上。

  • 对于RUSBoost集成聚合方法(“方法”、“RUSBoost”),名称-值对参数RatioToSmallest指定每个类相对于最低表示的类的抽样比例。例如,假设训练数据中有两个类:一个而且B一个有100个观察结果B有10个观察结果。假设最低代表的类也有训练数据中的观察。

    • 如果你设置“RatioToSmallest”,2,然后年代2 * 1020..因此,fitcensemble用课堂上的20个观察来训练每个学习者一个还有20个课堂观察B.如果你设置‘RatioToSmallest’,(2 - 2),则得到相同的结果。

    • 如果你设置‘RatioToSmallest’,(2,1),然后s12 * 1020.而且s21 * 1010.因此,fitcensemble用课堂上的20个观察来训练每个学习者一个还有课堂上的10个观察B

  • 对于双核及以上系统,fitcensemble并行训练使用英特尔®线程构建块(TBB)。有关Intel TBB的详细信息,请参见https://software.intel.com/en-us/intel-tbb

参考文献

[1] Breiman, L.“装袋预测器。”机器学习.第26卷,第123-140页,1996年。

[2]布雷曼,L.《随机森林》。机器学习.卷45,页5-32,2001。

[3] Freund, Y.“一个更健壮的增强算法。”v1 arXiv: 0905.2138, 2009年。

[4]弗洛因德,Y.和R. E.夏丕尔。在线学习的决策理论推广及其在辅助学习中的应用计算机与系统科学专业,第55卷,第119-139页,1997。

[5] Friedman, J.《贪婪函数逼近:梯度增强机》。统计年鉴《中国经济》,2001年第29卷第5期,第1189-1232页。

[6]弗里德曼,J., T.哈斯蒂,R.蒂布谢拉尼。“加法逻辑回归:促进的统计观点。”统计年鉴《中国科学》第28卷第2期,第337-407页,2000年。

哈斯蒂、T.、R.蒂布谢拉尼和J.弗里德曼。统计学习的要素部分版,施普林格,纽约,2008年。

[8] Ho T. K.“构造决策森林的随机子空间方法”。模式分析与机器智能汇刊《中国经济》,1998年第8期,第832-844页。

[9]夏皮尔,R. E.弗洛因德,P.巴特利特和W.S.李。“提高利润率:对投票方法有效性的新解释。”统计年鉴,卷26号,第5期,第1651-1686页,1998年。

[10]塞弗特,C.霍什戈夫塔尔,J.赫尔斯和A.纳波利塔诺。“RUSBoost:在训练数据倾斜时提高分类性能。”第十九届模式识别国际会议,第1-4页,2008。

[11]沃穆斯,M.廖J., G.拉奇。“完全正确的提升算法,最大限度地提高利润率。”国际第23号程序。机器学习会议,ACM,纽约,第1001-1008页,2006年。

扩展功能

在R2016b中引入