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