代理分裂
当观测值的最佳分割预测值缺失时,如果指定使用代理分割,则软件将使用最佳代理预测器将观测值发送到左或右子节点。当你有缺失的数据时,用替代分割的树和树的集合提供更好的预测。这个示例展示了如何通过使用带有代理分割的决策树来提高对缺失值数据的预测的准确性。
负载样本数据
加载电离层
数据集。
负载电离层
将数据集划分为训练集和测试集。保留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棵分类树组成的随机森林,没有代理分裂。
templ = templateTree(“复制”,真正的);%用于随机预测器选择的再现性Mdl = fitcensemble(Xtrain,Ytrain,“方法”,“包”,“NumLearningCycles”, 150,“学习者”, templ);
创建一个使用代理分割的决策树模板。使用代理分割的树在包含某些预测器中缺失的数据时不会丢弃整个观测值。
templS = templateTree(“代孕”,“上”,“复制”,真正的);
使用模板训练随机森林templS
。
Mdls = fitcensemble(Xtrain,Ytrain,“方法”,“包”,“NumLearningCycles”, 150,“学习者”, templS);
测试的准确性
测试有和没有代理分裂的预测的准确性。
使用这两种方法预测反应并创建混淆矩阵图表。
Ytest_pred = predict(Mdl,Xtest);图cm = confusionchart(Ytest,Ytest_pred);厘米。Title =“没有替身的模特”;
Ytest_preds = predict(Mdls,Xtest);图cms = confusionchart(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] = max (imp,5)
印第安纳州=1×55 3 27 8 14
impps = oobPermutedPredictorImportance(Mdls);[~,inds] = maxk(imps,5)
第1 =1×53 5 8 27 7
在估计预测因子的重要性之后,您可以排除不重要的预测因子并再次训练模型。消除不重要的预测因子可以节省预测的时间和内存,并使预测更容易理解。
如果训练数据包含许多预测因子,并且您希望分析预测因子的重要性,则指定“NumVariablesToSample”
的templateTree
函数作为“所有”
对于合奏的三位学习者。否则,软件可能不会选择一些预测因子,低估了它们的重要性。使用示例请参见选择随机森林的预测器。
另请参阅
compareHoldout
|fitcensemble
|fitrensemble