当一个观察的最佳分割预测器的值丢失时,如果您指定使用代理分割,软件将使用最佳代理预测器将观察发送到左或右子节点。当您有缺失的数据时,树和带有代理分割的树集合可以提供更好的预测。这个例子展示了如何通过使用带有代理分割的决策树来提高缺失值数据预测的准确性。
加载电离层
数据集。
负载电离层
将数据集划分为训练集和测试集。保留30%的数据进行测试。
rng (“默认”)%的再现性简历= cvpartition (Y,“坚持”, 0.3);
识别培训和测试数据。
Xtrain = X(培训(cv):);Ytrain = Y(培训(cv));Xtest = X(测试(cv):);欧美= Y(测试(cv));
假设测试集中有一半的值丢失了。将测试集中一半的值设置为南
.
Xtest(兰德(大小(Xtest)) > 0.5) =南;
训练一个由150棵分类树组成的随机森林,不使用代理分割。
templ = templateTree (“复制”,真正的);%用于随机预测器选择的重现性Mdl = fitcensemble (Xtrain Ytrain,“方法”,“包”,“NumLearningCycles”, 150,“学习者”, templ);
创建使用代理拆分的决策树模板。当在某些预测器中包含丢失的数据时,使用代理分割的树不会丢弃整个观察结果。
templS = templateTree (“代孕”,“上”,“复制”,真正的);
使用模板训练随机森林templS
.
Mdls = fitcensemble (Xtrain Ytrain,“方法”,“包”,“NumLearningCycles”, 150,“学习者”, templS);
测试使用和不使用代理分割的预测的准确性。
使用这两种方法预测反应并创建混淆矩阵图。
Xtest Ytest_pred =预测(Mdl);figure cm = confusionchart(Ytest,Ytest_pred);厘米。Title =“模型没有代理人”;
Ytest_preds =预测(Mdls Xtest);figure cms = confusionchart(Ytest,Ytest_preds);cms。Title =“模型与代理人”;
混淆矩阵上的所有非对角线元素表示分类错误的数据。一个好的分类器会产生一个看起来主要是对角线的混淆矩阵。在这种情况下,使用代理分割训练的模型的分类误差更低。
估计累积分类误差。指定“模式”、“累积”
在估计分类误差时使用损失
函数。的损失
函数返回元素所在的向量J
指示使用第一个错误J
学习者。
图绘制(损失(Mdl Xtest,欧美,“模式”,“累积”)举行在情节(损失(Mdls Xtest,欧美,“模式”,“累积”),“r——”)传说(“没有替身劈叉的树”,“有代理分叉的树”)包含(树木的数量) ylabel (“测试分类错误”)
误差值随着树数的增加而减小,说明性能较好。采用代理分割训练的模型分类误差较低。
用统计学方法检查结果差异的统计学意义compareHoldout
.这个函数使用McNemar测试。
(~ p) = compareHoldout (Mdl, Mdls Xtest Xtest,欧美,“替代”,“更大的”)
p = 0.0384
低p-value表明具有代理分割的集成在统计上更有意义。
根据树是否使用代理分割,预测器重要性估计可能有所不同。通过排列出包外的观察来估计预测器的重要性。然后,找出五个最重要的预测因素。
小鬼= oobPermutedPredictorImportance (Mdl);[~,印第安纳州]= maxk (imp, 5)
印第安纳州=1×55 3 27 8 14
小鬼= oobPermutedPredictorImportance (Mdls等);[~,第1]= maxk(小鬼,5)
第1 =1×53 5 8 27 7
在估计预测因子的重要性之后,您可以排除不重要的预测因子并再次训练模型。排除不重要的预测因素可以节省预测的时间和记忆,并使预测更容易理解。
如果训练数据包含许多预测器,而您想要分析预测器的重要性,那么请指定“NumVariablesToSample”
的templateTree
函数作为“所有”
对于合奏的树型学习者。否则,软件可能不会选择一些预测因子,低估它们的重要性。例如,请参见选择随机森林的预测器.
compareHoldout
|fitcensemble
|fitrensemble