fitcensemble
适合分类的学习者集合
语法
Mdl = fitcensemble(Tbl,ResponseVarName)
Mdl = fitcensemble(Tbl,公式)
Mdl = fitcensemble(Tbl,Y)
Mdl = fitcensemble(X,Y)
Mdl = fitcensemble(___、名称、值)
描述
返回经过训练的分类集成模型对象(Mdl
= fitcensemble (资源描述
,ResponseVarName
)Mdl
),其中包含了提升100棵分类树的结果以及表中的预测器和响应数据资源描述
.ResponseVarName
响应变量的名称在吗资源描述
.默认情况下,fitcensemble
使用LogitBoost进行二进制分类,AdaBoostM2进行多类分类。
例子
列车分类汇编
使用数据中所有可用的预测变量创建一个预测分类集合。然后,用更少的预测器训练另一个集合。比较集合的样本内预测精度。
加载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 x2表预测真理 _________ _____ <= 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) rsLoss2 = resubLoss(Mdl2)
rsLoss1 = 0.1070 rsLoss2 = 0.2037
使用所有预测因子的集合的样本内误分类率较低。
提振集成的概化误差估计
估计增强分类树集成的泛化误差。
加载电离层
数据集。
负载电离层
使用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倍交叉验证损失的超参数。
为了重现性,设置随机种子并使用“expected-improvement-plus”
采集功能。
rng默认的Mdl = fitcensemble(X,Y,“OptimizeHyperparameters”,“汽车”,...“HyperparameterOptimizationOptions”结构(“AcquisitionFunctionName”,...“expected-improvement-plus”))
|===================================================================================================================================| | Iter | Eval客观客观| | | BestSoFar | BestSoFar | |方法NumLearningC - | LearnRate | MinLeafSize | | |结果| | |运行时(观察)| (estim) | |永昌龙 | | | |===================================================================================================================================| | 最好1 | | 0.10256 | 6.9509 | 0.10256 | 0.10256 |RUSBoost | 11 | 0.010199 | 17 | | 2 |最好| 0.062678 | 9.2751 | 0.062678 | 0.064264 | LogitBoost | 206 | 0.96537 | 33 | | 3 |接受| 0.099715 | 8.7593 | 0.062678 | 0.062688 | AdaBoostM1 | 130 | 0.0072814 | 2 | | 4 |接受| 0.065527 | 1.5974 | 0.062678 | 0.062681 | 25袋| | - | 5 | | 5 |接受| 0.065527 | 7.4355 | 0.062678 | 0.062695 | LogitBoost | 178 | 0.52008 | 40 | | 6 |接受| 0.068376 | 6.2119 | 0.062678 | 0.062693 | GentleBoost | 146 | 0.46233 | 8 | | | 7日接受| 0.076923 |18.49 | 0.062678 | 0.063613 | GentleBoost | 456 | 0.0018323 | 3 | | |接受8 | 0.068376 | 19.9 | 0.062678 | 0.063878 | LogitBoost | 479 | 0.036176 | 7 | | | 9日接受| 0.068376 | 11.775 | 0.062678 | 0.065468 | LogitBoost | 277 | 0.99964 | 42 | | 10 |接受| 0.17379 | 0.58809 | 0.062678 | 0.064692 | LogitBoost | 11 | 0.0012008 | 1 | | | 11日接受| 0.065527 | 4.8851 | 0.062678 | 0.064854 |袋| 100 | - | 1 | | | 12日接受| 0.076923 | 0.97125 | 0.062678 | 0.062571 | GentleBoost | 23 |13 0.0096328 | 2 | | |接受| 0.082621 | 0.76955 | 0.062678 | 0.064919 | GentleBoost 18 | 0.0078878 | 61 | | | | 14日接受| 0.065527 | 24.547 | 0.062678 | 0.06557 |袋| 499 | - | 7 | | 15 |接受| 0.079772 | 14.329 | 0.062678 | 0.064962 | GentleBoost | 359 | 0.080649 | 1 | | | 16日接受| 0.35897 | 0.52584 | 0.062678 | 0.062491 | 10袋| | | 171 | | 17 |接受| 0.35897 | 0.87997 | 0.062678 | 0.062483 | AdaBoostM1 14 | 0.0029975 | 174 | | | | 18日接受| 0.10826 | 31.777 | 0.062678 |0.062484 | RUSBoost | 498 | 0.35355 | 1 | | | 19日接受| 0.64103 | 1.2122 | 0.062678 | 0.062469 | RUSBoost 20 | 0.11564 | 175 | | | |接受20 | 0.091168 | 11.845 | 0.062678 | 0.062474 | RUSBoost | 187 | 0.0010337 | 5 | |===================================================================================================================================| | Iter | Eval客观客观| | | BestSoFar | BestSoFar | |方法NumLearningC - | LearnRate | MinLeafSize | | |结果| | |运行时(观察)| (estim) | |永昌龙 | | | |===================================================================================================================================| | 21日|接受| 0.076923 | 12.647 | 0.062678 | 0.062473 | GentleBoost | 322 | 0.020651 | 174 | | | 22日接受| 0.065527 | 4.1482 | 0.062678 | 0.062473 | AdaBoostM1 | 63 | 0.95202 | 1 | | | 23日接受| 0.17379 | 6.6579 | 0.062678 | 0.062356 | LogitBoost | 166 | 0.0011034 | 175 | | | 24日接受| 0.17379 | 0.87522 | 0.062678 |15 20 | 0.0011381 | 0.062611 | LogitBoost | | | | 25日接受| 0.062678 | 5.0428 | 0.062678 | 0.062619 | LogitBoost | 125 | 0.9709 | 4 | | | 26日接受| 0.11681 | 0.68826 | 0.062678 | 0.062621 | RUSBoost | 10 | 0.93628 | 6 | | | 27日接受| 0.082621 | 0.88836 | 0.062678 | 0.062716 | GentleBoost 19 | 0.94744 | 75 | | | | 28日接受| 0.065527 | 5.3467 | 0.062678 | 0.064168 | LogitBoost | 131 | 0.99024 | | | | 29日接受| 0.068376 | 24.065 | 0.062678 | 0.064255 |袋| 489 | - | 2 | | | 30日接受| 0.076923 | 18.562 | 0.062678 | 0.063851 | GentleBoost | 458 | 0.0010094 | 16 | __________________________________________________________ 优化完成。最大目标达到30个。总函数计算:30总运行时间:301.149秒。 Total objective function evaluation time: 261.6473 Best observed feasible point: Method NumLearningCycles LearnRate MinLeafSize __________ _________________ _________ ___________ LogitBoost 206 0.96537 33 Observed objective function value = 0.062678 Estimated objective function value = 0.063851 Function evaluation time = 9.2751 Best estimated feasible point (according to models): Method NumLearningCycles LearnRate MinLeafSize __________ _________________ _________ ___________ LogitBoost 277 0.99964 42 Estimated objective function value = 0.063851 Estimated function evaluation time = 11.8227
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
.输出是估计交叉验证损失最小的集成分类器。
使用交叉验证创建预测集成
创建具有令人满意的预测性能的增强分类树集合的一种方法是使用交叉验证来调整决策树的复杂性级别。在搜索最优复杂度级别时,调整学习速率以使学习周期数量最小化。
加载电离层
数据集。
负载电离层
搜索最优的树复杂度级别:
交叉验证一组集成。从决策桩(一次分裂)开始,将后续集成的树复杂度指数级增加到最多n- 1次。n是样本容量。同样,每个集成的学习率在0.1到1之间变化。
估计每个集合的交叉验证误分类率。
对于树的复杂度级别
,
,通过绘制集合与学习周期数的关系来比较累积的、交叉验证的误分类率。在同一图表上为每种学习率绘制单独的曲线。
选择误分类率最小的曲线,并记下相应的学习周期和学习率。
交叉验证深度分类树和树桩。这些分类树作为基准。
rng (1);%用于再现性MdlDeep = fitctree(X,Y,“CrossVal”,“上”,“MergeLeaves”,“关闭”,...“MinParentSize”1);MdlStump = fitctree(X,Y,“MaxNumSplits”, 1“CrossVal”,“上”);
使用5倍交叉验证交叉验证150个增强分类树的集合。使用树模板,使用序列中的值改变最大分割数.米是这样的
并不比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:numLR;为j = 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 =重塑(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 (min(错误(:,mnsPlot (k):)))。* [1],“——k”);h.YLim = [0 0.2];包含“树的数量”;ylabel“旨在misclass。率的;标题(sprintf (' maxnumsplitting = %0.3g'maxNumSplits (mnsPlot (k))));持有从;结束;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)流('\ nooptimal参数值:\nNum. '树木= %d', idxNumTrees);流('\ nmaxnumsplitting = %d\nLearning Rate = %0.2f\n',...maxNumSplits (idxMNS) learnRate (idxLR))
分钟misclass。最优参数值:Num. Trees = 47 MaxNumSplits = 3 Learning rate = 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
来预测
.
输入参数
资源描述
- - - - - -样本数据
表格
用于训练模型的示例数据,指定为表。每行资源描述
对应一个观测值,每一列对应一个预测变量。资源描述
可以为响应变量包含一个额外的列。不允许多列变量和字符向量单元格数组以外的单元格数组。
如果
资源描述
包含响应变量,并且希望使用所有剩余变量作为预测器,然后使用指定响应变量ResponseVarName
.如果
资源描述
包含响应变量,并且您希望仅使用剩余变量的子集作为预测器,然后使用指定公式公式
.如果
资源描述
不包含响应变量,则指定响应数据使用Y
.响应变量的长度和的行数资源描述
必须是相等的。
请注意
为节省内存和执行时间,提供X
而且Y
而不是资源描述
.
数据类型:表格
公式
- - - - - -反应解释模型和预测变量子集
特征向量
解释模型的响应和预测变量的子集,以特征向量的形式指定“Y ~ X1 + X2 + X3”
.在这种形式下,Y
表示响应变量,和X1
,X2
,X3
表示预测变量。变量名称必须为资源描述
(Tbl.Properties.VariableNames
).
中指定变量的子集资源描述
使用公式作为训练模型的预测因子。如果您指定了一个公式,那么该软件不使用任何变量资源描述
没有出现在公式
.
数据类型:字符
X
- - - - - -预测数据
数字矩阵
预测器数据,指定为数值矩阵。
每行对应一个观测值,每列对应一个预测变量。
的长度Y
的行数X
必须是相等的。
中出现的顺序指定预测符的名称X
,使用PredictorNames
名称-值对参数。
数据类型:单
|双
名称-值对参数
的可选逗号分隔对名称,值
参数。的名字
参数名称和价值
对应的值。的名字
必须出现在单引号内(' '
).您可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家
.
“CrossVal”,“上”、“LearningRate”,0.05
指定实现10倍交叉验证并使用0.05
作为学习率。
请注意
方法时,不能使用任何交叉验证名称-值对参数“OptimizeHyperparameters”
名称-值对参数。您可以修改交叉验证“OptimizeHyperparameters”
只有使用“HyperparameterOptimizationOptions”
名称-值对参数。
一般集成选项
“方法”
- - - - - -Ensemble-aggregation方法
“AdaBoostM1”
|“LogitBoost”
|“GentleBoost”
|“RobustBoost”
|“LPBoost”
|“TotalBoost”
|“RUSBoost”
|“子”
|“包”
|“AdaBoostM2”
|……
集合-聚合方法,指定为由逗号分隔的对组成“方法”
和一个字符向量,比如“RUSBoost”
.
价值 | 描述 | 分类问题支持万博1manbetx | 额外的需求 |
---|---|---|---|
“AdaBoostM1” |
自适应增强 | 二只 | - |
“AdaBoostM2” |
自适应增强 | 多级只 | - |
“包” |
引导聚合(例如,随机森林) | 二进制和多类 | - |
“GentleBoost” |
温和自适应增强 | 二只 | - |
“LogitBoost” |
自适应logistic回归 | 二只 | - |
“LPBoost” |
线性规划增强 | 二进制和多类 | 优化工具箱™许可证 |
“RobustBoost” |
强劲的推动 | 二只 | 优化工具箱许可证 |
“RUSBoost” |
随机欠采样增强 | 二进制和多类 | - |
“子” |
随机子空间 | 二进制和多类 | - |
“TotalBoost” |
完全矫正增强 | 二进制和多类 | 优化工具箱许可证 |
对于二进制分类问题,默认值为“LogitBoost”
.否则,默认为“AdaBoostM2”
.
例子:“方法”,“包”
数据类型:字符
“NumLearningCycles”
- - - - - -集成学习周期的个数
One hundred.
(默认)|正整数|“AllPredictorCombinations”
集成学习周期数,指定为正整数或“AllPredictorCombinations”
.
如果指定一个正整数,那么在每个学习周期中,软件为每个模板对象训练一个弱学习器
学习者
.因此,软件进行训练NumLearningCycles *元素个数(学习者)
学习者。如果你指定
“AllPredictorCombinations”
,然后设置方法
来“子”
并仅为指定一个学习器学习者
.通过这些设置,软件对学习者进行所有可能的预测因子组合的训练NPredToSample
一次。因此,软件进行训练nchoosek
(NPredToSample大小(X, 2))
学习者。
该软件使用所有训练有素的学习者组成集合并将它们存储在Mdl。训练有素的
.
详情请参见提示.
例子:“NumLearningCycles”,500年
数据类型:单
|双
|字符
“学习者”
- - - - - -弱学习器用于集成
weak-learner名字|弱学习者模板对象|弱学习器模板对象的单元格向量
在集合中使用的弱学习器,指定为弱学习器名称、弱学习器模板对象或弱学习器模板对象的单元格向量。
弱的学习者 | Weak-Learner名字 | 模板对象创建函数 | 方法 设置 |
---|---|---|---|
判别分析 | “判别” |
templateDiscriminant |
推荐给“子” |
k最近的邻居 | “资讯” |
templateKNN |
为“子” 只有 |
决策树 | “树” |
templateTree |
所有方法,除了“子” |
默认值为:
“资讯”
如果“方法”
是“子”
“树”
如果“方法”
是“包”
templateTree (MaxNumSplits, 10)
如果“方法”
是否有任何增强方法
fitcensemble
将决策树弱学习器的最大分割数设置为10
当这两种情况同时发生时:
属性的值不需要设置
“MaxNumSplits”
决策树弱学习器的性质。您使用增强算法作为集成-聚合方法
fitcensemble
.
例如,如果您指定“学习者”,templateTree ()
而且“方法”、“AdaBoostM1”
,然后fitcensemble
将决策树弱学习器的最大分割数设置为10
.
否则,fitcensemble
属性的任何必需的默认值都遵循相应的模板对象“学习者”
名称-值对参数。
有关培训学员人数的详细信息,请参见NumLearningCycles
而且提示.
例子:对于由两种类型的分类树组成的集合,提供{t1 t2}
,在那里t1
而且t2
是分类树模板。
数据类型:字符
“NPrint”
- - - - - -打印输出频率
“关闭”
(默认)|正整数
打印输出频率,指定为由逗号分隔的对组成“NPrint”
一个正整数或者“关闭”
.
来跟踪的数量弱的学习者或折叠那fitcensemble
训练到目前为止,指定一个正整数。也就是说,如果你指定了正整数米:
没有指定任何交叉验证选项(例如,
CrossVal
),然后fitcensemble
每次完成训练时,向命令行显示一条消息米弱的学习者。还有一个交叉验证选项
fitcensemble
每次训练结束时,向命令行显示一条消息米折叠。
如果你指定“关闭”
,然后fitcensemble
当它完成训练弱学习器时不显示消息。
提示
当在一个大数据集上训练许多弱学习器的集合时,为指定一个正整数NPrint
.
例子:“NPrint”,5
数据类型:单
|双
|字符
“CategoricalPredictors”
- - - - - -分类预测器列表
正整数向量|逻辑向量|字符矩阵|字符向量的单元格数组|“所有”
类别预测符列表,指定为逗号分隔的对,由“CategoricalPredictors”
这个表中的一个值。
价值 | 描述 |
---|---|
正整数向量 | 向量中的一个条目是对应于预测器数据列(X 或资源描述 ),其中包含一个分类变量。 |
逻辑向量 | 一个真正的 Entry表示预测器数据的对应列(X 或资源描述 )是分类变量。 |
字符矩阵 | 矩阵的每一行都是一个预测变量的名称。名称必须与中的条目匹配PredictorNames .用额外的空格填充名字,这样字符矩阵的每一行都有相同的长度。 |
字符向量的单元格数组 | 数组中的每个元素都是一个预测变量的名称。名称必须与中的条目匹配PredictorNames . |
“所有” | 所有预测因素都是绝对的。 |
规范的CategoricalPredictors
适用于以下情况:
“学习者”
是“树”
.“学习者”
是“资讯”
当所有的预测因子都是绝对的。
默认情况下,如果预测器数据在表(资源描述
),fitcensemble
如果变量包含逻辑值、分类值或字符向量单元格数组,则假定变量是分类的。如果预测器数据为矩阵(X
),fitcensemble
假设所有预测因子都是连续的。若要在数据为矩阵时识别任何类别预测符,请使用“CategoricalPredictors”
名称-值对参数。
例子:“CategoricalPredictors”、“所有”
数据类型:单
|双
|逻辑
|字符
|细胞
“PredictorNames”
- - - - - -预测变量名称
唯一字符向量的单元格数组
预测器变量名,指定为逗号分隔的对,由“PredictorNames”
和唯一字符向量的单元格数组。的功能“PredictorNames”
这取决于你提供训练数据的方式。
如果你提供
X
而且Y
,那么你就可以使用了“PredictorNames”
给出预测变量X
的名字。里面名字的顺序
PredictorNames
必须对应的列顺序X
.也就是说,PredictorNames {1}
名字是X (: 1)
,PredictorNames {2}
名字是X (:, 2)
等等。同时,大小(X, 2)
而且元素个数(PredictorNames)
必须是相等的。默认情况下,
PredictorNames
是{x1, x2,…}
.
如果你提供
资源描述
,那么你就可以使用了“PredictorNames”
选择在训练中使用哪些预测变量。也就是说,fitcensemble
中仅使用预测变量PredictorNames
以及训练中的响应变量。PredictorNames
的子集Tbl.Properties.VariableNames
并且不能包括响应变量的名称。默认情况下,
PredictorNames
包含所有预测变量的名称。使用任一种方法指定训练的预测器都是一个很好的实践
“PredictorNames”
或公式
只有。
例子:PredictorNames,{‘SepalLength’,‘SepalWidth’,‘PetalLength’,‘PetalWidth}
数据类型:细胞
“ResponseName”
- - - - - -响应变量名
“Y”
(默认)|特征向量
响应变量名,指定为逗号分隔的对,由“ResponseName”
和一个字符向量。
如果你提供
Y
,那么你就可以使用了“ResponseName”
为响应变量指定名称。如果你提供
ResponseVarName
或公式
,那么你就不能用了“ResponseName”
.
例子:“ResponseName”、“响应”
数据类型:字符
交叉验证选择
“CVPartition”
- - - - - -交叉验证分区
[]
(默认)|cvpartition
分区对象
交叉验证分区,指定为逗号分隔的对,由“CVPartition”
和一个cvpartition
创建的分区对象cvpartition
.分区对象指定交叉验证的类型以及训练集和验证集的索引。
要创建交叉验证的模型,您只能使用以下四个名称-值对参数之一:“CVPartition”
,“坚持”
,“KFold”
,或“Leaveout”
.
例子:假设您创建一个随机分区,对500个观察结果进行5次交叉验证,使用cvp = cvpartition(500,'KFold',5)
.然后,您可以通过使用指定交叉验证的模型“CVPartition”,本量利
.
“坚持”
- - - - - -顽固性验证的数据比例
范围(0,1)中的标量值
用于拒绝验证的数据的百分比,指定为逗号分隔的对,由“坚持”
和范围(0,1)中的标量值。如果你指定“坚持”,
,然后软件完成以下步骤:p
随机选择并保留
%的数据作为验证数据,并使用其余数据训练模型。p
* 100将紧凑的、训练过的模型存储在
训练有素的
交叉验证模型的属性。
要创建交叉验证的模型,您只能使用以下四个名称-值对参数之一:CVPartition
,坚持
,KFold
,或Leaveout
.
例子:“坚持”,0.1
数据类型:双
|单
“KFold”
- - - - - -折叠数
10
(默认)|大于1的正整数值
交叉验证模型中使用的折叠数,指定为逗号分隔的对,由“KFold”
一个大于1的正整数。如果你指定“KFold”,k
,然后软件完成这些步骤。
将数据随机划分为k集。
对于每个集合,保留该集合作为验证数据,并使用另一个集合训练模型k- 1集。
存储
k
紧凑,训练模型的细胞k
的-by-1单元格向量训练有素的
交叉验证模型的属性。
要创建交叉验证的模型,您只能使用以下四个名称-值对参数之一:CVPartition
,坚持
,KFold
,或Leaveout
.
例子:“KFold”,5
数据类型:单
|双
“Leaveout”
- - - - - -省略一个交叉验证标志
“关闭”
(默认)|“上”
省略一个交叉验证标志,指定为逗号分隔的对,由“Leaveout”
而且“上”
或“关闭”
.如果你指定“Leaveout”,“上”
,那么,对于每一个n观察(n的值是NumObservations
属性的模型),软件完成这些步骤:
保留观测数据作为验证数据,并使用其他数据训练模型n- 1次观察。
存储n紧凑的,训练有素的模型在一个单元n的-by-1单元格向量
训练有素的
交叉验证模型的属性。
要创建交叉验证的模型,您只能使用以下四个名称-值对参数之一:CVPartition
,坚持
,KFold
,或Leaveout
.
例子:“Leaveout”,“上”
数据类型:字符
其他分类选择
“类名”
- - - - - -用于培训的类名
分类数组|字符数组|逻辑向量|数值向量|字符向量的单元格数组
用于训练的类名,指定为逗号分隔的对,由“类名”
以及分类或字符数组,逻辑或数字向量,或字符向量的单元格数组。一会
必须具有相同的数据类型Y
.
如果一会
是一个字符数组,那么每个元素必须对应一个行数组的。
使用一会
:
在培训期间安排课程。
指定与类顺序对应的任何输入或输出参数维度的顺序。例如,使用
一会
指定…尺寸的顺序成本
或返回的分类分数的列顺序预测
.选择用于培训的类的子集。例如,假设集合中所有不同的类名
Y
是{' a ', ' b ', ' c '}
.用课堂上的观察来训练模型“一个”
而且“c”
只是,指定“类名”,{' a ', ' c '}
.
的默认值一会
所有不同类名的集合在吗Y
.
例子:“类名”,{' b ', ' g '}
数据类型:分类
|字符
|逻辑
|单
|双
|细胞
“成本”
- - - - - -误分类代价
方阵|结构数组
错误分类代价,指定为逗号分隔的对,由“成本”
一个方阵或结构。如果你指定:
默认为(
,在那里K
) -眼睛(K
)K
是不同类的数量。
请注意
fitcensemble
使用成本
中指定的优先类概率之前
.然后,fitcensemble
使用调整后的先验概率进行训练,并将成本矩阵重置为默认值。
例子:'Cost',[0 12 2;1 0 2;2 2 0]
数据类型:双
|单
|结构体
“之前”
- - - - - -先验概率
“经验”
(默认)|“统一”
|数值向量|结构数组
每个类的先验概率,由逗号分隔的对组成“之前”
和这个表中的一个值。
价值 | 描述 |
---|---|
“经验” |
类先验概率是类的相对频率Y . |
“统一” |
所有类先验概率都等于1/K,在那里K是类的数量。 |
数值向量 | 每个元素都是一个类先验概率。对元素进行排序Mdl。一会 或使用一会 名称-值对参数。软件将元素规范化,使它们的和为1 . |
结构数组 | 一个结构
|
fitcensemble
的先验概率归一化之前
和为1。
例子:结构(“类名”,{{setosa,杂色的,‘virginica}}, ClassProbs, 1:3)
数据类型:字符
|双
|单
|结构体
“ScoreTransform”
- - - - - -分数转换
“没有”
(默认)|特征向量|函数处理
分数转换,指定为由逗号分隔的对组成“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
“重量”
- - - - - -观察权重
正数值向量|特征向量
增加方法和装袋的采样选项
AdaBoostM1, AdaBoostM2, LogitBoost和GentleBoost方法选项
“LearnRate”
- - - - - -收缩学习率
1
(默认)|(0,1)中的数字标量
收缩的学习率,指定为由区间(0,1]中的数值标量组成的逗号分隔对。
用收缩,设定来训练整体LearnRate
到小于1
,例如,0.1
是很受欢迎的选择。使用收缩训练集合需要更多的学习迭代,但通常可以获得更好的精度。
例子:“LearnRate”,0.1
数据类型:单
|双
RUSBoost方法选项
“LearnRate”
- - - - - -收缩学习率
1
(默认)|(0,1)中的数字标量
收缩的学习率,指定为由区间(0,1]中的数值标量组成的逗号分隔对。
用收缩,设定来训练整体LearnRate
到小于1
,例如,0.1
是很受欢迎的选择。使用收缩训练集合需要更多的学习迭代,但通常可以获得更好的精度。
例子:“LearnRate”,0.1
数据类型:单
|双
“RatioToSmallest”
- - - - - -关于最低代表类的抽样比例
正数值标量|正数值向量
相对于最低表示类的抽样比例,指定为逗号分隔的对,由“RatioToSmallest”
以及长度等于训练数据中不同类的数量的数值标量或数值向量。
假设有K
类在训练数据中所占比例最低的类有米
训练数据中的观察。
默认值为(
,表示采样K
, 1)米
每个班级的观察结果。
例子:‘RatioToSmallest’,(2,1)
数据类型:单
|双
LPBoost和TotalBoost方法选项
“MarginPrecision”
- - - - - -控制收敛速度的裕度精度
0.1
(默认)|[0,1]中的数值标量
边距精度控制收敛速度,由逗号分隔的对组成“MarginPrecision”
和区间[0,1]中的数值标量。MarginPrecision
影响收敛所需的增强迭代次数。
提示
要使用多个学习器训练集合,请为指定一个小值MarginPrecision
.对于使用少数学习器进行训练,请指定一个较大的值。
例子:“MarginPrecision”,0.5
数据类型:单
|双
RobustBoost方法选项
“RobustErrorGoal”
- - - - - -目标分类错误
0.1
(默认)|非负数值标量
目标分类错误,指定为由逗号分隔的对组成“RobustErrorGoal”
和一个非负数值标量。的值的上限取决于的值RobustMarginSigma
而且RobustMaxMargin
.但上限不能超过1
.
提示
对于一个特定的训练集,通常有一个最优的范围RobustErrorGoal
.如果你把它设置得太低或太高,那么软件就会产生一个分类精度很差的模型。尝试交叉验证以搜索适当的值。
例子:“RobustErrorGoal”,0.05
数据类型:单
|双
“RobustMarginSigma”
- - - - - -分类边际分布
0.1
(默认)|正数值标量
分类裕度分布分布在训练数据上,指定为由逗号分隔的对组成“RobustMarginSigma”
和一个正的标量。在指定RobustMarginSigma
,查阅有关的文献RobustBoost
,例如,[19].
例子:“RobustMarginSigma”,0.5
数据类型:单
|双
“RobustMaxMargin”
- - - - - -最大分类裕度
0
(默认)|非负数值标量
训练数据中的最大分类裕度,指定为由逗号分隔的对组成“RobustMaxMargin”
和一个非负数值标量。该软件最小化训练数据中具有以下分类边际的观察数RobustMaxMargin
.
例子:“RobustMaxMargin”,1
数据类型:单
|双
随机子空间方法选项
“NPredToSample”
- - - - - -样本预测因子的数量
1
(默认)|正整数
每个随机子空间学习器要采样的预测器数量,指定为由逗号分隔的对组成“NPredToSample”
一个正整数在区间1,…,p,在那里p是预测变量的数量(大小(X, 2)
或大小(台,2)
).
数据类型:单
|双
Hyperparameter优化
“OptimizeHyperparameters”
- - - - - -需要优化的参数
“没有”
(默认)|“汽车”
|“所有”
|符合条件的参数名称的单元格数组|向量的optimizableVariable
对象
要优化的参数,指定为:
“没有”
-不要优化。“汽车”
——使用{‘法’,‘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
你的选择学习者
.负载fisheriris超参数需要数据和学习器Params =超参数(“fitcensemble”量,物种,“树”);
要查看合格超参数和默认超参数,请检查
参数个数
.
通过传递的向量来设置非默认参数optimizableVariable
具有非默认值的对象。例如,
负载fisheririsParams =超参数(“fitcensemble”量,物种,“树”);参数(4)。Range = [1,30];
通过参数个数
作为价值OptimizeHyperparameters
.
默认情况下,在命令行上出现迭代显示,并根据优化中的超参数数量显示图形。对于优化和绘图,目标函数为Log(1 +交叉验证损失)用于回归,以及用于分类的误分类率。要控制迭代显示,请设置详细的
字段“HyperparameterOptimizationOptions”
名称-值对参数。为了控制情节,设置ShowPlots
字段“HyperparameterOptimizationOptions”
名称-值对参数。
有关示例,请参见优化分类集成.
例子:“汽车”
数据类型:字符
|细胞
“HyperparameterOptimizationOptions”
- - - - - -优化选项
结构
用于优化的选项,指定为逗号分隔的对,由“HyperparameterOptimizationOptions”
还有一个结构。的效果OptimizeHyperparameters
名称-值对参数。结构中的所有字段都是可选的。
字段名 | 值 | 默认的 |
---|---|---|
优化器 |
|
“bayesopt” |
AcquisitionFunctionName |
详细信息请参见 |
“expected-improvement-per-second-plus” |
MaxObjectiveEvaluations |
目标函数求值的最大个数。 | 30. 为“bayesopt” 或“randomsearch” ,而整个电网为“gridsearch” |
MaxTime |
时间限制,指定为正实数。时间限制以秒为单位,由 |
正 |
NumGridDivisions |
为“gridsearch” ,表示每个维度中值的数量。该值可以是一个正整数向量,给出每个维度的值的数量,也可以是一个适用于所有维度的标量。对于分类变量,该字段将被忽略。 |
10 |
ShowPlots |
指示是否显示图的逻辑值。如果真正的 ,该字段根据迭代次数绘制最佳目标函数值。如果有一个或两个优化参数,如果优化器 是“bayesopt” ,然后ShowPlots 还绘制了目标函数对参数的模型。 |
真正的 |
SaveIntermediateResults |
时是否保存结果的逻辑值优化器 是“bayesopt” .如果真正的 ,此字段将覆盖名为“BayesoptResults” 在每次迭代中。变量是aBayesianOptimization 对象。 |
假 |
详细的 |
显示到命令行。
详细信息请参见 |
1 |
UseParallel |
指示是否并行运行贝叶斯优化的逻辑值,这需要并行计算工具箱™。详细信息请参见并行贝叶斯优化. | 假 |
重新分区 |
指示是否在每次迭代中重新划分交叉验证的逻辑值。如果
|
假 |
使用以下三个字段名中的一个。 | ||
CVPartition |
一个cvpartition 对象创建的cvpartition . |
“Kfold”,5 如果您没有指定任何交叉验证字段 |
坚持 |
范围内的标量(0,1) 表示抵抗分数。 |
|
Kfold |
大于1的整数。 |
例子:“HyperparameterOptimizationOptions”、结构(MaxObjectiveEvaluations, 60)
数据类型:结构体
输出参数
Mdl
-训练分类集成模型
ClassificationBaggedEnsemble
模型对象|ClassificationEnsemble
模型对象|ClassificationPartitionedEnsemble
交叉验证的模型对象
训练过的集成模型,作为此表中的模型对象之一返回。
模型对象 | 指定任何交叉验证选项? | 方法 设置 |
重新取样 设置 |
---|---|---|---|
ClassificationBaggedEnsemble |
没有 | “包” |
“上” |
ClassificationEnsemble |
没有 | 任何用于分类的集成聚合方法 | “关闭” |
ClassificationPartitionedEnsemble |
是的 | 任何分类集成聚合方法 | “关闭” 或“上” |
控制交叉验证的名值对参数为CrossVal
,坚持
,KFold
,Leaveout
,CVPartition
.
引用Mdl
,使用点表示法。例如,要访问或显示未经交叉验证的集成的弱学习器模型对象的单元格向量,请输入Mdl。训练有素的
在命令行。
提示
NumLearningCycles
从几十到几千不等。通常,具有良好预测能力的集成需要几百到几千个弱学习器。然而,你不需要一次训练一个乐团那么多次。你可以先培养几十个学习器,检查整体性能,然后,如果有必要,训练更多的弱学习器使用重新开始
分类问题。整体表现取决于整体环境和弱学习者的环境。也就是说,如果使用默认参数指定弱学习器,那么集成的性能就会很差。因此,像集成设置一样,使用模板调整弱学习器的参数并选择最小化泛化错误的值是一个很好的实践。
如果集成聚合方法(
方法
)是“包”
和:错误分类的代价(
成本
)是高度不平衡的,那么,对于袋内样本,软件对具有较大惩罚的类的唯一观测值进行过采样。类先验概率(
之前
)是高度倾斜的,软件会从具有大先验概率的类中过度采样唯一的观察结果。
对于较小的样本量,这些组合可能导致具有较大惩罚或先验概率的类的相对较低的袋外观察频率。因此,估计的袋外误差是高度可变的,它可能很难解释。为了避免较大的估计袋外误差方差,特别是对于小样本容量,设置一个更平衡的错误分类成本矩阵使用
成本
或者一个倾斜较小的先验概率向量之前
.由于某些输入和输出参数的顺序对应于训练数据中的不同类,因此使用类来指定类顺序是一种良好的实践
一会
名称-值对参数。为了快速确定类顺序,从训练数据中删除所有未分类的观察结果(即缺少标签),获得并显示所有不同类的数组,然后指定数组
一会
.例如,假设响应变量(Y
)是标签单元格数组。这段代码指定变量中的类顺序一会
.Ycat =分类的(Y);classNames =类别(Ycat)
分类
分配<定义>
对未分类的观察和类别
不包括<定义>
从它的输出。因此,如果将此代码用于标签单元格数组或将类似代码用于分类数组,则不必删除缺少标签的观察值来获得不同类的列表。要指定从表示最少的标签到表示最多的标签的类顺序,然后快速确定类顺序(如前面的项目符号所示),但是在将列表传递给之前,根据频率排列列表中的类
一会
.根据前面的示例,这段代码指定了在中从最低到最多表示的类顺序classNamesLH
.Ycat =分类的(Y);classNames =类别(Ycat);freq =计数猫(Ycat);[~,idx] = sort(freq);classNamesLH = classNames(idx);
经过培训
ClassificationEnsemble
或ClassificationBaggedEnsemble
通过使用fitcensemble
,使用函数预测
以及经过训练的模型对象,以生成预测新数据标签的C代码。详细信息请参见代码生成.
算法
有关集成聚合算法的详细信息,请参见整体算法.
如果你指定
方法
是一个增强算法学习者
作为决策树,那么软件默认生长浅决策树。属性可以调整树的深度MaxNumSplits
,MinLeafSize
,MinParentSize
使用名称-值对参数templateTree
.fitcensemble
通过错分类代价大的过采样类和错分类代价小的欠采样类生成袋内样本。因此,袋外样本对错误分类代价大的类的观测值较少,而对错误分类代价小的类的观测值较多。如果使用小数据集和高度倾斜的成本矩阵训练分类集合,则每个类的袋外观察数可以很低。因此,估计的袋外误差可能有很大的方差,并且可能难以解释。同样的现象也会发生在具有较大先验概率的类上。对于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)。有关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.”更健壮的增强算法。arXiv:0905.2138v1, 2009。
[4]弗洛因德,Y.和R. E.夏丕尔。在线学习的决策理论推广及其在辅助学习中的应用计算机与系统科学,Vol. 55, pp. 119-139, 1997。
[5] Friedman, J.《贪婪函数逼近:梯度增强机》。《统计年鉴》,2001年第29卷第5期,第1189-1232页。
[6]弗里德曼,J., T.哈斯蒂,R.蒂布谢拉尼。“加法逻辑回归:促进的统计观点。”统计年鉴,Vol. 28, No. 2, pp. 337-407, 2000。
哈斯蒂、T.、R.蒂布谢拉尼和J.弗里德曼。《统计学习要素》,施普林格,纽约,2008年。
[8] Ho T. K.“构造决策森林的随机子空间方法”。模式分析与机器智能,Vol. 20, No. 8, pp. 832-844, 1998。
[9]夏皮尔,R. E.弗洛因德,P.巴特利特和W.S.李。“提高利润率:对投票方法有效性的新解释。”统计年鉴,Vol. 26, No. 5, pp. 1651-1686, 1998。
[10]塞弗特,C.霍什戈夫塔尔,J.赫尔斯和A.纳波利塔诺。“RUSBoost:在训练数据倾斜时提高分类性能。第19届模式识别国际会议,第1-4页,2008。
[11]沃穆斯,M.廖J., G.拉奇。“完全正确的提升算法,最大限度地提高利润率。”国际第23号程序。机器学习会议,ACM,纽约,第1001-1008页,2006。
另请参阅
ClassificationBaggedEnsemble
|ClassificationEnsemble
|ClassificationPartitionedEnsemble
|预测
|templateDiscriminant
|templateKNN
|templateTree
主题
在R2016b中引入
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入该命令来运行该命令。Web浏览器不支持MATLAB命令。万博1manbetx
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。