主要内容

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

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

md1 = fitcensemble(成人数据,“工资”
Mdl1 = ClassificationEnsemble PredictorNames: {'age' 'workClass' 'fnlwgt' 'education' 'education_num' 'marital_status' 'occupation' 'relationship' 'race' 'sex' 'capital_gain' 'capital_loss' 'hours_per_week' 'native_country'} ResponseName: 'salary' CategoricalPredictors: [2 4 6 7 8 9 10 14] ClassNames: [<=50K >50K] ScoreTransform: 'none' NumObservations: 32561 NumTrained: 100 Method: 'LogitBoost' LearnerNames: {'Tree'} ReasonForTermination:“在完成要求的训练周期数后正常终止。”FitInfo: [100x1 double] FitInfoDescription: {2x1 cell}属性、方法

Mdl是一个ClassificationEnsemble模型。的一些显著特征Mdl是:

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

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

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

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

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(成人数据,“工资~年龄+学历”);

比较两者的重取代损失Mdl1Mdl2

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

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

训练一个增强分类树集合fitcensemble。减少培训时间“NumBins”名称-值对参数到bin数值预测器。此参数仅在以下情况下有效fitcensemble使用树学习器。训练后,您可以使用BinEdges训练模型的性质和离散化函数。

生成一个样本数据集。

rng (“默认”%为了重现性N = 1e6;X = [mvnrnd([-1 -1],eye(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 md1 = fitcensemble(X,y);toc
运行时间为478.988422秒。

加速训练使用“NumBins”名称-值对参数。如果您指定“NumBins”值为正整数标量,则软件将每个数字预测器放入指定数量的等概率bins中,然后在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 = md12 .X;%预测器数据Xbinned = 0 (size(X));edges = Mdl2.BinEdges;查找分类预测因子的索引。idxNumeric = find(~cellfun(@isempty,edges));如果iscolumn(idxNumeric) idxNumeric = idxNumeric';结束j = idxNumeric x = x (:,j);%如果x是一个表,则将x转换为数组。如果Istable (x) x = table2array(x);结束使用离散函数将x分组到箱子中。Xbinned = discretise (x,[-inf;边缘{};正]);Xbinned(:,j) = Xbinned;结束

Xbinned包含用于数字预测器的bin索引,范围从1到bin的个数。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倍误分类率”);包含(“学习周期”);

图包含一个轴对象。具有xlabel学习周期的轴对象,ylabel错误分类率为10倍的轴对象包含一个类型为直线的对象。

estGenError = kflc(end)
estGenError = 0.0769

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

在累积了约50个弱学习器后,该集成的误分类率约为0.06。然后,随着越来越多的弱学习者进入集合,错误分类率略有增加。

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

自动优化超参数fitcensemble

加载电离层数据集。

负载电离层

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

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

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

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 | 2.8201 | 0.10256 | 0.10256 |RUSBoost | 11 | 0.010199 | 17 | | 2 |最好| 0.082621 | 6.3089 | 0.082621 | 0.083414 | LogitBoost | 206 | 0.96537 | 33 | | 3 |接受| 0.099715 | 4.0004 | 0.082621 | 0.082624 | AdaBoostM1 | 130 | 0.0072814 | 2 | | 4 |的| 0.068376 | 1.5887 | 0.068376 | 0.068395 | 25袋| | - | 5 | | 5 |的| 0.059829 | 1.7618 | 0.059829 | 0.062829 | LogitBoost 58 | | 0.19016 | 5 | | 6 |接受| 0.068376 | 1.6662 | 0.059829 | 0.065561 | LogitBoost 58 | | 0.10005 | 5 | | | 7日接受| 0.088319 | 13.07 |0.059829 | 0.065786 | LogitBoost | 494 | 0.014474 | 3 | | |接受8 | 0.065527 | 0.79673 | 0.059829 | 0.065894 | LogitBoost | 26 | 0.75515 | 8 | | | 9日接受| 0.15385 | 0.93354 | 0.059829 | 0.061156 | LogitBoost 59 32 | 0.0010037 | | | | | 10接受| 0.059829 | 3.8828 | 0.059829 | 0.059731 | LogitBoost | 143 | 0.44428 | 1 | | | 11日接受| 0.35897 | 2.3272 | 0.059829 | 0.059826 | 54袋| | | 175 | | 12 |接受| 0.068376 | 0.53634 | 0.059829 | 0.059825 | 10袋| | - | 1 | | | | 13日接受0.12251 | 9.5155 | 0.059829 | 0.059826 | AdaBoostM1 | 442 | 0.57897 | 102 | | 14 | Accept | 0.11966 | 4.9323 | 0.059829 | 0.059827 | RUSBoost | 95 | 0.80822 | 1 | | 15 | Accept | 0.062678 | 4.2429 | 0.059829 | 0.059826 | GentleBoost | 156 | 0.99502 | 1 | | 16 | Accept | 0.065527 | 3.0688 | 0.059829 | 0.059824 | GentleBoost | 115 | 0.99693 | 13 | | 17 | Best | 0.05698 | 1.659 | 0.05698 | 0.056997 | GentleBoost | 60 | 0.0010045 | 3 | | 18 | Accept | 0.13675 | 2.0647 | 0.05698 | 0.057002 | GentleBoost | 86 | 0.0010263 | 108 | | 19 | Accept | 0.062678 | 2.4037 | 0.05698 | 0.05703 | GentleBoost | 88 | 0.6344 | 4 | | 20 | Accept | 0.065527 | 1.029 | 0.05698 | 0.057228 | GentleBoost | 35 | 0.0010155 | 1 | |===================================================================================================================================| | Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | Method | NumLearningC-| LearnRate | MinLeafSize | | | result | | runtime | (observed) | (estim.) | | ycles | | | |===================================================================================================================================| | 21 | Accept | 0.079772 | 0.44308 | 0.05698 | 0.057214 | LogitBoost | 11 | 0.9796 | 2 | | 22 | Accept | 0.065527 | 21.191 | 0.05698 | 0.057523 | Bag | 499 | - | 1 | | 23 | Accept | 0.068376 | 20.294 | 0.05698 | 0.057671 | Bag | 494 | - | 2 | | 24 | Accept | 0.64103 | 1.2793 | 0.05698 | 0.057468 | RUSBoost | 30 | 0.088421 | 174 | | 25 | Accept | 0.088319 | 0.53606 | 0.05698 | 0.057456 | RUSBoost | 10 | 0.010292 | 5 | | 26 | Accept | 0.074074 | 0.36802 | 0.05698 | 0.05753 | AdaBoostM1 | 11 | 0.14192 | 13 | | 27 | Accept | 0.099715 | 12.133 | 0.05698 | 0.057646 | AdaBoostM1 | 498 | 0.0010096 | 6 | | 28 | Accept | 0.079772 | 10.877 | 0.05698 | 0.057886 | AdaBoostM1 | 474 | 0.030547 | 31 | | 29 | Accept | 0.068376 | 12.326 | 0.05698 | 0.061326 | GentleBoost | 493 | 0.36142 | 2 | | 30 | Accept | 0.065527 | 0.3945 | 0.05698 | 0.061165 | LogitBoost | 11 | 0.71408 | 16 |

__________________________________________________________ 优化完成。达到30分的评价。总函数评估:30总运行时间:165.9329秒总目标函数评估时间:148.4504最佳观察可行点:方法NumLearningCycles LearnRate MinLeafSize ___________ _________________ _________ ___________ GentleBoost 60 0.0010045 3观察目标函数值= 0.05698估计目标函数值= 0.061165函数评估时间= 1.659估计最佳可行点(根据模型):方法NumLearningCycles LearnRate MinLeafSize ___________ _________________ _________ ___________ GentleBoost 60 0.0010045 3估计目标函数值= 0.061165估计函数评估时间= 1.6503
Mdl = ClassificationEnsemble ResponseName: 'Y' CategoricalPredictors: [] ClassNames: {'b' 'g'} ScoreTransform: 'none' NumObservations: 351 HyperparameterOptimizationResults: [1×1贝叶斯优化]NumTrained: 60 Method: 'GentleBoost' LearnerNames: {'Tree'} ReasonForTermination: '在完成请求的训练周期数后正常终止。'FitInfo: [60×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 = floor(log(n - 1)/log(3));learnRate = [0.1 0.25 0.5 1];numLR = nummel (learnRate);maxNumSplits = 3.^(0:m);numMNS = nummel (maxnumsplit);numTrees = 150;Mdl = cell(numMNS,numLR);k = 1:numLRj = 1:numMNS t = templateTree(“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 = shaping (cell2mat(errorCell),[numTrees nummel (maxNumSplits) nummel (learnRate)]);errorDeep = kfoldLoss(MdlDeep);errorStump = kfoldLoss(MdlStump);

绘制交叉验证的误分类率随集合中树数增加的变化情况。在同一图上绘制关于学习率的曲线,并为不同的树复杂度级别绘制单独的图。选择要绘制的树复杂度级别的子集。

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

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

确定产生最低总体误分类率的最大分裂数、树数和学习率。

[minErr,minErrIdxLin] = min(error(:));[idxNumTrees,idxMNS,idxLR] = ind2sub(size(error),minErrIdxLin);流(“\ nMin。misclass。Rate = %0.5f'minErr)
分钟misclass。速率= 0.05128
流(\最佳参数值:\nNum。树= %d', idxNumTrees);
最优参数值:Num. Trees = 130
流(\nMaxNumSplits = %d\ nlearningrate = %0.2f\nmaxNumSplits (idxMNS) learnRate (idxLR))
maxnumsplitting = 9学习速率= 1.00

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

tFinal = templateTree(“MaxNumSplits”maxNumSplits (idxMNS));MdlFinal = fitcensemble(X,Y,“NumLearningCycles”idxNumTrees,“学习者”tFinal,“LearnRate”learnRate (idxLR))
MdlFinal = ClassificationEnsemble ResponseName: 'Y' CategoricalPredictors: [] ClassNames: {'b' 'g'} ScoreTransform: 'none' NumObservations: 351 NumTrained: 130 Method: 'LogitBoost' LearnerNames: {'Tree'} ReasonForTermination: '在完成请求的训练周期数后正常终止。'FitInfo: [130×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.094017 | 3.7194 | 0.094017 | 0.094017 | 137 | 0.001364 | 3 | | 2 | |0.12251 | 0.66511 | 0.094017 | 0.095735 | 15 | 0.013089 | 144 |
最好| 3 | | 0.065527 | 0.90035 | 0.065527 | 0.067815 | 31日| 0.47201 | 2 | | 4 |接受| 0.19943 | 8.6107 | 0.065527 | 0.070015 | 340 | 0.92167 | 7 | | 5 |接受| 0.071225 | 0.90081 | 0.065527 | 0.065583 | 32 | 0.14422 | 2 | | 6 |接受| 0.099715 | 0.688 | 0.065527 | 0.065573 | 23 | 0.0010566 | 2 | | | 7日接受| 0.11681 | 0.90799 | 0.065527 | 0.065565 | 28 | 0.0010156 | 259 | | 8 |接受| 0.17379 | 0.82143 | 0.065527 | 0.065559 | 29日| 0.0013435 | 1 | | 9最好| | 0.059829 | 0.59677 |18 | 0.059829 | 0.059844 | 0.87865 | 3 | | |接受10 | 0.11111 | 0.40132 | 0.059829 | 0.059843 | 10 | 0.0012112 | 48 | | | 11日接受| 0.08547 | 0.41121 | 0.059829 | 0.059842 | 10 | 0.62108 | 25 | | | 12日接受| 0.11681 | 0.41538 | 0.059829 | 0.059841 | 10 | 0.0012154 | 20 | | | 13日接受| 0.082621 | 0.46504 | 0.059829 | 0.059842 | 10 | 0.55351 | 35 | | | 14日接受| 0.079772 | 0.46297 | 0.059829 | 0.05984 | 11 | 0.74109 | 74 | | 15 |接受| 0.088319 | 0.69297 | 0.059829 | 0.05984 | |16 | 0.91106 | 347 | |接受| 0.062678 | 0.3637 | 0.059829 | 0.059886 | 10 | 0.97239 | 3 | | | 17日接受| 0.065527 | 1.9404 | 0.059829 | 0.059887 | 78 | 0.97069 | 3 | | | 18日接受| 0.065527 | 0.39816 | 0.059829 | 0.062228 | 11 | 0.75051 | 2 | |最好19 | | 0.054131 | 0.36381 | 0.054131 | 0.059083 | 10 | 0.69072 | 3 | | 20 |接受| 0.065527 | 0.38429 | 0.054131 | 0.060938 | 10 | 0.64403 | 3 ||====================================================================================================================| | Iter | Eval客观客观| | | BestSoFar | BestSoFar | NumLearningC - | LearnRate | MaxNumSplits | | |结果| | |运行时(观察)| (estim) |永昌龙  | | | |====================================================================================================================| | 21日|接受| 0.079772 | 0.40405 | 0.054131 | 0.060161 | 10 | 0.80548 | 13 | | | | 22日接受10 | 0.05698 | 0.37983 | 0.054131 | 0.059658 | 0.56949 | 5 | | | 23日接受| 0.10826 | 0.36128 | 0.054131 | 0.059244 | 10 | 0.0055133 | 5 | | | 24日接受| 0.074074 | 0.38056 | 0.054131 | 0.05933 | 10 | 0.92056 | 6 | | | 25日接受| 0.11966 | 0.35336 | 0.054131 | 0.059132 | 10 | 0.27254 | 1 | | | 26日接受| 0.065527 | 0.77041 | 0.054131 | 0.059859 | 26 | 0.97412 | 3 | | | 27日接受| 0.068376 | 0.38116 | 0.054131 | 0.060205 | 10 | 0.82146 | 4 | | | 28日接受| 0.062678 | 0.47015 | 0.054131 |0.060713 | | 0.99445 | | 29 |接受| 0.11966 | 0.41033 | 0.054131 | 0.060826 | 10 | 0.0012621 |44 | | 30 |接受| 0.08547 | 0.45352 | 0.054131 | 0.060771 | 2010 | 0.93676 | 187 |

__________________________________________________________ 优化完成。达到30分的评价。总函数评估:30总运行时间:41.5854秒总目标函数评估时间:28.4744最佳观察可行点:NumLearningCycles LearnRate MaxNumSplits _________________ _________ ____________ 10 0.69072 3观察目标函数值= 0.054131估计目标函数值= 0.061741函数评估时间= 0.36381估计最佳可行点(根据模型):NumLearningCycles LearnRate MaxNumSplits _________________ _________ ____________ 14 0.99445 3估计目标函数值= 0.060771估计函数评估时间= 0.48009
mdl = ClassificationEnsemble ResponseName: 'Y' CategoricalPredictors: [] ClassNames: {'b' 'g'} ScoreTransform: 'none' NumObservations: 351 HyperparameterOptimizationResults: [1×1贝叶斯优化]NumTrained: 14 Method: 'LogitBoost' LearnerNames: {'Tree'} ReasonForTermination: '在完成请求的训练周期数后正常终止。'FitInfo: [14×1 double] FitInfoDescription: {2×1 cell}属性,方法

输入参数

全部折叠

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

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

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

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

请注意

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

数据类型:表格

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

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

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

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

数据类型:字符|字符串

响应变量的解释模型和预测变量的子集,以字符向量或字符串标量的形式指定“Y ~ x1 + x2 + x3”。在这个形式中,Y表示响应变量,和x1x2,x3表示预测变量。

中的变量子集资源描述作为训练模型的预测器,请使用公式。如果你指定一个公式,那么软件不使用任何变量资源描述那就不要出现在公式

公式中的变量名必须是资源描述Tbl.Properties.VariableNames)和有效的MATLAB®标识符。中的变量名进行验证资源描述通过使用isvarname函数。如果变量名无效,则可以使用matlab.lang.makeValidName函数。

数据类型:字符|字符串

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

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

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

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

数据类型:|

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

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

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

名称-值参数

指定可选的参数对为Name1 = Value1,…,以=家,在那里名字是参数名和吗价值是对应的值。名称-值参数必须出现在其他参数之后,但对的顺序无关紧要。

在R2021a之前,使用逗号分隔每个名称和值,并将其括起来名字在报价。

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

请注意

控件一起使用任何交叉验证名称-值参数“OptimizeHyperparameters”名称-值参数。您可以修改的交叉验证“OptimizeHyperparameters”只有使用“HyperparameterOptimizationOptions”名称-值参数。

整体组合选项

全部折叠

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

价值 方法 分类问题支持金宝app 相关的名称-值对参数
“包” 自举聚合(例如,套袋),随机森林[2]) -如果“方法”“包”,然后fitcensemble默认情况下,在每个分裂(随机森林)使用随机预测器选择的套袋。要使用没有随机选择的套袋,使用树学习器,其“NumVariablesToSample”值是“所有”或者使用判别分析学习器。 二元和多类 N/A
“子” 随机子空间 二元和多类 NPredToSample
“AdaBoostM1” 自适应增强 二只 LearnRate
“AdaBoostM2” 自适应增强 多级只 LearnRate
“GentleBoost” 温和自适应增强 二只 LearnRate
“LogitBoost” 自适应逻辑回归 二只 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},在那里t1t2返回的分类树模板对象templateTree

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

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

  • 对于套袋决策树,决策分裂的最大数目(“MaxNumSplits”)是n - 1,在那里n是观测值的个数。每次分裂随机选择的预测因子数目(“NumVariablesToSample”)是预测者数量的平方根。因此,fitcensemble长出深深的决策树。您可以种植较浅的树以降低模型复杂性或计算时间。

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

看到templateTree对于弱学习器的默认设置。要获得可重复的结果,必须指定“复制”的名称-值对参数templateTree作为真正的如果“NumVariablesToSample”不是“所有”

有关要培训的学习者数量的详细信息,请参见NumLearningCycles提示

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

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

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

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

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

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

提示

对于某些增强决策树的最快训练,为NPrint到默认值“关闭”。这个技巧适用于分类方法“AdaBoostM1”“AdaBoostM2”“GentleBoost”,或“LogitBoost”,或者当回归方法“LSBoost”

例子:“NPrint”,5

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

用于数字预测符的箱子数,指定为由“NumBins”一个正整数标量。此参数仅在以下情况下有效fitcensemble使用树学习算法,也就是说,“学习者”要么是“树”创建的模板对象templateTree

  • 如果“NumBins”值为空(默认值)fitcensemble没有任何预测因子。

  • 如果您指定“NumBins”值为正整数标量(numBins),然后fitcensemble将每个数字预测器最多放入numBins等概率的bin,然后在bin索引上生长树,而不是原始数据。

    • 箱子的数量可以小于numBins如果预测器小于numBins独特的价值观。

    • fitcensemble不支持分类预测。

当您使用大型训练数据集时,此分箱选项可以加快训练速度,但可能会导致准确性的潜在降低。你可以试试“NumBins”,50岁首先,然后根据精度和训练速度改变值。

训练后的模型将箱子边缘存储在BinEdges财产。

例子:“NumBins”,50岁

数据类型:|

分类预测器列表,指定为该表中的值之一。

价值 描述
正整数向量

向量中的每个条目都是一个索引值,表明相应的预测器是分类的。索引值在1和之间p,在那里p是用于训练模型的预测器的数量。

如果fitcensemble使用输入变量的子集作为预测器,然后该函数仅使用该子集对预测器进行索引。的CategoricalPredictors值不计算响应变量、观察权重变量或函数不使用的任何其他变量。

逻辑向量

一个真正的进入意味着相应的预测器是分类的。向量的长度是p

字符矩阵 矩阵的每一行都是一个预测变量的名称。名称必须与中的条目匹配PredictorNames。用额外的空格填充名称,使字符矩阵的每一行具有相同的长度。
字符向量的字符串数组或单元数组 数组中的每个元素都是一个预测变量的名称。名称必须与中的条目匹配PredictorNames
“所有” 所有的预测都是绝对的。

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

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

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

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

例子:“CategoricalPredictors”、“所有”

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

预测变量名称,指定为唯一名称的字符串数组或唯一字符向量的单元格数组。的功能PredictorNames这取决于你提供训练数据的方式。

  • 如果你提供XY,那么你可以使用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”)

数据类型:字符串|细胞

响应变量名称,指定为字符向量或字符串标量。

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

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

例子:“ResponseName”、“反应”

数据类型:字符|字符串

平行的选项

全部折叠

并行计算和设置随机数的选项,指定为结构。创建选项结构statset

请注意

您需要Parallel Computing Toolbox™来进行并行计算。

该表列出了选项字段及其值。

字段名 价值 默认的
UseParallel

将此值设置为真正的并行计算并行计算并行集成训练要求您设置“方法”名称-值参数“包”。并行训练只适用于树学习器,默认类型为“包”

UseSubstreams

将此值设置为真正的并行以可重复的方式并行运行计算。

为了计算可重复性,设置到允许子流的类型:“mlfg6331_64”“mrg32k3a”。的树模板“复制”名称-值参数设置为真正的。看到并行统计计算中的再现性

将此值指定为RandStream对象或此类对象的单元数组。使用单个对象,除非UseParallel值是真正的UseSubstreams值是。在这种情况下,使用与并行池大小相同的单元格数组。 如果不指定,然后fitcensemble使用默认流或多个流。

有关使用可重复并行训练的示例,请参见并行列车分类集成

对于双核及以上系统,fitcensemble使用英特尔并行训练®线程构建块(TBB)。因此,指定UseParallel选择真正的在单个计算机上可能无法提供显著的加速。有关英特尔TBB的详细信息,请参见https://www.intel.com/content/www/us/en/developer/tools/oneapi/onetbb.html

例子:“选项”,statset (UseParallel,真的)

数据类型:结构体

交叉验证选择

全部折叠

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

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

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

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

例子:“Crossval”,“上”

交叉验证分区,指定为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

数据类型:|

在交叉验证模型中使用的折叠数,指定为大于1的正整数值。如果你指定KFold, k,然后软件完成以下步骤:

  1. 将数据随机划分为k集。

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

  3. 存储k紧凑,训练模型在ak- × 1的单元向量训练有素的交叉验证模型的属性。

要创建一个交叉验证的模型,你只能指定以下四个名称-值参数中的一个:CVPartition坚持KFold,或Leaveout

例子:“KFold”,5

数据类型:|

留一交叉验证标志,指定为“上”“关闭”。如果你指定“Leaveout”,“上”,然后为每一个n观察(n观察值的数目(不包括缺失观察值)是否在NumObservations属性),软件完成以下步骤:

  1. 保留一个观测值作为验证数据,使用另一个观测值训练模型n- 1次观察。

  2. 存储n紧凑,训练模型在一个n- × 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 1 2;1 0 2;[20]

数据类型:||结构体

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

价值 描述
“经验” 类先验概率是类的相对频率Y
“统一” 所有的类先验概率都等于1/K,在那里K是类的数量。
数值向量 每个元素都是一个类先验概率。把元素按顺序排列Mdl。ClassNames属性指定顺序一会名称-值对参数。软件将这些元素标准化,使它们的和等于1
结构数组

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

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

  • S.ClassProbs包含相应先验概率的向量。软件将这些元素标准化,使它们的和等于1

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

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

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

分数转换,指定为字符向量、字符串标量或函数句柄。

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

价值 描述
“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资源描述

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

增强方法和装袋取样选项

全部折叠

对于每个弱学习器,训练集要重新采样的分数,指定为(0,1]中的正标量。使用“FResample”,设置重新取样“上”

例子:“FResample”,0.75

数据类型:|

表示用替换采样的标志,指定为由逗号分隔的对组成“替换”“关闭”“上”

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

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

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

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

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

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

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

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

  • 如果方法“包”,然后重新取样的必须“上”。该软件对训练观察的一小部分进行重新采样(参见FResample),有或没有替换(参见取代)。

如果指定使用重新取样,那么对整个数据集进行重新采样是一个很好的做法。也就是说,使用默认设置1FResample

AdaBoostM1、AdaBoostM2、LogitBoost、绅士boost方法选项

全部折叠

收缩的学习率,指定为由逗号分隔的对组成“LearnRate”和区间(0,1)内的一个数字标量。

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

例子:“LearnRate”,0.1

数据类型:|

RUSBoost方法选项

全部折叠

收缩的学习率,指定为由逗号分隔的对组成“LearnRate”和区间(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”一个非负的数字标量。可能值的上界取决于的值RobustMarginSigmaRobustMaxMargin。但是,上界不能超过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的超参数“汽车”选项并忽略超参数的任何指定值。

的合格参数fitcensemble是:

  • 方法-取决于类的数量。

    • 两个类——符合条件的方法是“包”“GentleBoost”“LogitBoost”“AdaBoostM1”,“RUSBoost”

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

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

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

  • 所选的符合条件的超参数学习者

    学习者 合格Hyperparameters
    粗体=默认使用
    默认范围
    “判别” δ 在范围内进行对数缩放(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对象。

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

    要查看符合条件的和默认的超参数,请检查参数个数

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

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

通过参数个数的值OptimizeHyperparameters

默认情况下,迭代显示出现在命令行,并根据优化中超参数的数量出现绘图。对于优化和图,目标函数为误分类率。要控制迭代显示,请设置详细的田野“HyperparameterOptimizationOptions”名称-值参数。要控制情节,设置ShowPlots田野“HyperparameterOptimizationOptions”名称-值参数。

使用示例请参见优化分类集成

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

优化选项,指定为结构。的效果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”),则该字段也绘制出最佳估计目标函数值。最佳观测目标函数值和最佳估计目标函数值对应于中的值BestSoFar(观察)BestSoFar (estim)。列的迭代分别显示。您可以在属性中找到这些值ObjectiveMinimumTraceEstimatedObjectiveMinimumTraceMdl。HyperparameterOptimizationResults。如果问题包含一个或两个用于贝叶斯优化的优化参数,则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

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

    • 误分类成本(成本)是高度不平衡的,然后,对于包内样本,软件从具有较大惩罚的类中过度采样独特的观察结果。

    • 类先验概率(之前)是高度倾斜的,软件从具有大先验概率的类中进行过采样。

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

  • 因为一些输入和输出参数的顺序对应于训练数据中的不同类,所以使用一会名称-值对参数。

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

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

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

      Ycat = categorical(Y);classNames = categories(Ycat);freq = counts (Ycat);[~,idx] = sort(频率);classNamesLH = classNames(idx);

  • 在训练模型之后,您可以生成用于预测新数据标签的C/ c++代码。生成C/ c++代码需要MATLAB编码器™。有关详情,请参阅代码生成简介

算法

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

  • 如果你设置方法成为一个提升算法学习者要成为决策树,则软件默认生长浅决策树。参数来调整树的深度MaxNumSplitsMinLeafSize,MinParentSize名称-值对参数使用templateTree

  • 如果您指定成本之前,权重参数时,输出模型对象将指定值存储在成本之前,W属性,分别。的成本属性存储用户指定的成本矩阵(C),无需修改。的之前W属性分别存储归一化后的先验概率和观测值权重。对于模型训练,软件更新先验概率和观察权重,以纳入代价矩阵中描述的惩罚。有关详情,请参阅错误分类代价矩阵,先验概率和观察权重

  • 装袋(“方法”,“包”),fitcensemble通过错误分类代价大的过采样类和错误分类代价小的欠采样类生成袋内样本。因此,袋外样本从错误分类代价大的类别中得到的观测值更少,而从错误分类代价小的类别中得到的观测值更多。如果你使用一个小的数据集和一个高度倾斜的代价矩阵来训练一个分类集合,那么每个类的out-of-bag观察值的数量就会很低。因此,估计的袋外误差可能有很大的差异,并且很难解释。具有大先验概率的类也会出现同样的现象。

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

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

    • 如果你设置‘RatioToSmallest’,(2,1),然后s1*=2 * 10=20.s2*=1 * 10=10。因此,fitcensemble用20次课堂观察来训练每个学习者一个还有课堂上的10项观察B

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

参考文献

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

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

b[3] Freund, Y.“一个更稳健的提升算法。”v1 arXiv: 0905.2138, 2009年。

[b]弗里德,Y.和R. E.夏皮尔。在线学习的决策理论概括及其在boost中的应用计算机与系统科学博士,第55卷,第119-139页,1997年。

J. Friedman,“贪心函数逼近:一种梯度增强机器”。统计年鉴,第29卷第5期,第1189-1232页,2001。

bbb Friedman, J., T. Hastie, R. Tibshirani。“加法逻辑回归:助推的统计观点。”统计年鉴,第28卷第2期,第337-407页,2000年。

[10]哈斯蒂,T., R. Tibshirani, J. Friedman。统计学习的要素章节版,施普林格,纽约,2008。

[10]何天凯,“构造决策森林的随机子空间方法”。IEEE模式分析与机器智能汇刊,第20卷第8期,第832-844页,1998年。

[10]夏皮尔,R. E., Y. Freund, P. Bartlett, W.S. Lee。“提高优势:对投票方式有效性的新解释。”统计年鉴,第26卷第5期,第1651—1686页,1998年。

[10]塞弗特,C., T. Khoshgoftaar, J. Hulse, A. Napolitano。“RUSBoost:在训练数据偏斜时提高分类性能。”第19届模式识别国际会议,第1-4页,2008。

[10]温姆斯,M., J.廖,G.拉奇。“完全纠正了提升算法,使利润最大化。”第23号程序机器学习研讨会,ACM,纽约,第1001-1008页,2006。

扩展功能

版本历史

在R2016b中引入