您无法根据其在培训数据的性能来评估合奏的预测质量。乐队倾向于“溢利”,这意味着它们产生了对其预测力量的过于乐观估计。这意味着结果resubLoss
分类(resubLoss
用于回归)通常表示比在新数据上得到的错误更低。
为了更好地了解合奏的质量,使用这些方法之一:
在一个独立的测试集上评估集成(当您有大量的训练数据时很有用)。
通过交叉验证(在没有大量训练数据时很有用)评估集成。
评估包外数据的集成(在创建包内集成时很有用fitcensemble
或者fitrensemble
).
此示例使用袋装合奏,因此它可以使用所有三种评估集合质量的方法。
生成一个具有20个预测器的人工数据集。每个条目都是0到1之间的随机数。最初的分类是 如果 和 否则。
rng (1,“旋风”)重复性的%X =兰特(2000年,20);Y = sum(X(:,1:5),2) > 2.5;
另外,要为结果添加噪声,随机切换10%的分类。
idx = randsample(2000、200);(idx) = ~ Y (idx);
创建独立的培训和测试数据。使用通过呼叫设置的培训70%的数据cvpartition
使用坚持
选项。
cvpart = cvpartition (Y,“坚持”,0.3);xtrain = x(培训(cvpart),:);Ytrain = Y(训练(CVPart),:);xtest = x(测试(cvpart),:);ytest = y(测试(cvpart),:);
从训练数据创建200棵树的袋装分类集合。
t = templateTree (“复制”,真正的);%用于随机预测器选择的重现性袋= fitcensemble (Xtrain Ytrain,“方法”,'包',“NumLearningCycles”, 200,“学习者”, t)
包= ClassificationBaggedEnsemble ResponseName: 'Y' CategoricalPredictors: [] ClassNames: [0 1] ScoreTransform: 'none' NumObservations: 1400 NumTrained: 200 Method: ' bag ' LearnerNames: {'Tree'} ReasonForTermination: '在完成请求的训练周期数后正常终止。'userobsforlearner: [1400x200 logical]属性,方法
将测试数据的损失(误分类)作为集合中训练树的数量的函数绘制出来。
图绘制(损失(包,Xtest,欧美,'模式',“累积”))xlabel(树木的数量)ylabel(“测试分类错误”)
生成一个五折交叉验证袋套装。
cv = fitcensemble(x,y,“方法”,'包',“NumLearningCycles”, 200,“Kfold”,5,“学习者”, t)
cv = ClassificationPartitionedEnsemble CrossValidatedModel: 'Bag' PredictorNames: {1x20 cell} ResponseName: 'Y' NumObservations: 2000 KFold: 5 Partition: [1x1 cvpartition] NumTrainedPerFold: [200 200 200 200 200] ClassNames: [0 1] ScoreTransform: 'none'属性,方法
将交叉验证损失作为集合中树数量的函数进行检查。
图绘制(损失(包,Xtest,欧美,'模式',“累积”)举行在情节(kfoldLoss(简历,'模式',“累积”),“r”。) 抓住从包含(树木的数量)ylabel('分类错误')传说(“测试”,'交叉验证','地点','ne')
交叉验证给独立集合提供了可比的估计。
生成包外估计的损失曲线,并将其与其他曲线一起绘制。
图绘制(损失(包,Xtest,欧美,'模式',“累积”)举行在情节(kfoldLoss(简历,'模式',“累积”),“r”。)情节(oobloss(袋子,'模式',“累积”),“k——”) 抓住从包含(树木的数量)ylabel('分类错误')传说(“测试”,'交叉验证',的包的,'地点','ne')
包外估计再次与其他方法的估计相比较。
cvpartition
|fitcensemble
|fitrensemble
|kfoldLoss
|损失
|oobLoss
|resubLoss
|resubLoss