改进分类树和回归树
您可以通过在中设置名称-值对来调优树fitctree
而且fitrtree
.本节的其余部分将描述如何确定树的质量,如何决定设置哪些名称-值对,以及如何控制树的大小。
检查再置换误差
Resubstitution错误是响应训练数据与树基于输入训练数据对响应做出的预测之间的差值。如果再替换误差很高,你就不能指望树的预测是好的。然而,低重替换误差并不能保证对新数据的良好预测。再替换误差通常是对新数据预测误差的过于乐观的估计。
分类树替换错误
这个例子展示了如何检查分类树的重新替换错误。
加载费雪的虹膜数据。
负载fisheriris
使用整个数据集训练默认分类树。
Mdl = fitctree(meas,种);
检查复代误差。
resuberror = resubLoss(Mdl)
Resuberror = 0.0200
该树几乎正确地分类了所有的费雪虹膜数据。
交叉验证
要更好地了解树对新数据的预测准确性,请交叉验证树。默认情况下,交叉验证将训练数据随机分为10个部分。它训练了10棵新树,每棵树都有9个数据部分。然后,它检查每棵新树在训练该树时不包括的数据上的预测准确性。这种方法可以很好地估计结果树的预测准确性,因为它在新数据上测试新树。
交叉验证回归树
此示例显示如何检查回归树的再替换和交叉验证准确性,以基于carsmall
数据。
加载carsmall
数据集。考虑加速度、排水量、马力和重量作为MPG的预测指标。
负载carsmallX =[加速度位移马力重量];
使用所有的观察数据建立一个回归树。
rtree = fitrtree(X,MPG);
计算样本内误差。
resuberror = resubLoss(rtree)
Resuberror = 4.7188
回归树的再替换损失是均方误差。结果值表明,该树的典型预测误差约为4.7的平方根,或略高于2。
估计交叉验证MSE。
rng“默认”;Cvrtree = crossval(rtree);cvloss = kfoldLoss(cvrtree)
Cvloss = 25.6450
交叉验证的损失几乎是25,这意味着新数据树的典型预测误差约为5。这表明交叉验证的损失通常高于简单的再替换损失。
选择分裂预测器选择技术
标准CART算法倾向于选择具有多个层次的连续预测器。有时,这样的选择可能是虚假的,还可能掩盖具有较少级别的更重要的预测符,例如分类预测符。也就是说,每个节点上的预测器选择过程是有偏差的。此外,标准CART往往会遗漏预测器对与响应之间的重要交互。
属性指定曲率或交互测试的用法,以减少选择偏差并增加对重要交互的检测“PredictorSelection”
名称-值对参数。使用曲率或相互作用测试具有比标准CART产生更好的预测器重要性估计的额外优势。
下表总结了支持的预测器选择技术。金宝app
技术 | “PredictorSelection” 价值 |
描述 | 训练速度 | 何时指定 |
---|---|---|---|---|
标准车[1] | 默认的 | 选择在所有预测因子的所有可能分割上使分割准则增益最大化的分割预测因子。 |
比较基线 | 指定这些条件是否为真:
|
弯曲测试[2][3] | “弯曲” |
的值最小的分割预测器p-每个预测器与响应之间独立性的卡方检验的值。 | 可与标准CART媲美 | 指定这些条件是否为真:
|
交互测试[3] | “interaction-curvature” |
选择最小的分割预测器p每个预测器与响应之间的独立性卡方检验(即进行曲率检验)的-值,从而使p-每对预测因子与响应之间独立性的卡方检验的值。 | 比标准CART慢,特别是当数据集包含许多预测变量时。 | 指定这些条件是否为真:
|
有关预测器选择技术的更多细节:
有关分类树,请参见
PredictorSelection
而且节点分裂规则.有关回归树,请参见
PredictorSelection
而且节点分裂规则.
控制深度或“叶状”
当你种植决策树时,要考虑它的简单性和预测能力。具有许多叶子的深树通常在训练数据上具有很高的准确性。然而,这棵树不能保证在独立的测试集上显示出类似的准确性。一棵多叶树倾向于过度训练(或过拟合),它的测试精度往往远低于它的训练(再替换)精度。相比之下,浅树的训练精度不高。但是浅树可以更健壮——它的训练精度可以接近一个有代表性的测试集。而且,浅树很容易解释。如果没有足够的数据进行训练和测试,可以通过交叉验证来估计树的准确性。
fitctree
而且fitrtree
有三个名称-值对参数来控制最终决策树的深度:
MaxNumSplits
—分支节点分裂的最大个数为MaxNumSplits
每棵树。为设置一个较大的值MaxNumSplits
去挖一棵深树。默认为size(X,1) - 1
.MinLeafSize
-每片叶子至少有MinLeafSize
观察。设置较小的值MinLeafSize
去树木深处。默认为1
.MinParentSize
—树中每个分支节点至少有MinParentSize
观察。设置较小的值MinParentSize
去树木深处。默认为10
.
如果你指定MinParentSize
而且MinLeafSize
,学习者使用产生叶子较大的树(即较浅的树)的设置:
MinParent = max(MinParentSize,2*MinLeafSize)
如果你提供MaxNumSplits
时,软件会对树进行拆分,直到满足三个拆分条件中的一个为止。
有关控制树深度的另一种方法,请参见修剪.
选择合适的树深度
这个例子展示了如何控制决策树的深度,以及如何选择合适的深度。
加载电离层
数据。
负载电离层
生成一组指数间隔的值10
通过One hundred.
表示每个叶节点的最小观测数。
Leafs = logspace(1,2,10);
创建交叉验证的分类树电离层
数据。指定在中使用最小叶子大小来生长每棵树树叶
.
rng (“默认”) N =数目(叶子);err = 0 (N,1);为n=1: n t = fitctree(X,Y,“CrossVal”,“上”,...“MinLeafSize”树叶(n));err(n) = kfoldLoss(t);结束情节(树叶、犯错);包含(“最小叶片尺寸”);ylabel (“旨在错误”);
叶子的最佳大小在20.
而且50
每片叶子的观察结果。
比较近似最优树和至少40
使用默认树的每个叶子的观察值10
每个父节点的观测值和1
每片叶子观察。
DefaultTree = fitctree(X,Y);视图(DefaultTree,“模式”,“图”)
OptimalTree = fitctree(X,Y,“MinLeafSize”, 40);视图(OptimalTree,“模式”,“图”)
resubOpt = resubLoss(OptimalTree);lossOpt = kfoldLoss(crossval(OptimalTree));resubDefault = resubLoss(DefaultTree);lossDefault = kfoldLoss(crossval(DefaultTree));resubOpt、resubDefault lossOpt lossDefault
resubOpt = 0.0883
resubDefault = 0.0114
lossOpt = 0.1054
lossDefault = 0.1111
近似最优树要小得多,并且给出了更高的再替换误差。然而,它为交叉验证的数据提供了类似的准确性。
修剪
修剪通过合并同一树枝上的叶子来优化树的深度(叶状)。控制深度或“叶状”描述为树选择最佳深度的一种方法。与上一节不同的是,您不需要为每个节点大小都生长一棵新树。相反,种一棵深树,把它修剪到你选择的高度。
控件在命令行上修剪树修剪
方法(分类)或修剪
方法(回归)。或者,与树查看器交互修剪树:
视图(树,“模式”,“图”)
要修剪树,树必须包含修剪序列。默认情况下,两者fitctree
而且fitrtree
在建造过程中计算一棵树的修剪顺序。如果你用“删除”
名称-值对设置为“关闭”
,或者如果将树修剪到较小的级别,则该树不包含完整的修剪序列。生成完整的修剪序列修剪
方法(分类)或修剪
方法(回归)。
修剪分类树
属性的分类树电离层
数据,并修剪到一个良好的水平。
加载电离层
数据:
负载电离层
为数据构造一个默认的分类树:
树= fitctree(X,Y);
在交互式查看器中查看树:
视图(树,“模式”,“图”)
通过最小化交叉验证损失找到最优修剪水平:
[~,~,~,bestlevel] = cvLoss(树,...“子树”,“所有”,“TreeSize”,“最小值”)
Bestlevel = 6
把树修剪整齐6
:
视图(树,“模式”,“图”,“删除”6)
或者,使用交互式窗口修剪树。
修剪后的树与“选择适当的树深度”示例中的近似最优树相同。
集“TreeSize”
来“本身”
(默认值)来寻找最大修剪级别,其中树的误差不超过最佳级别加上一个标准差的误差:
[~,~,~,bestlevel] = cvLoss(树,“子树”,“所有”)
Bestlevel = 6
在这种情况下,级别是相同的设置“TreeSize”
.
修剪树以用于其他目的:
树=修剪“水平”6);视图(树,“模式”,“图”)
参考文献
[1]布雷曼,L. J. H.弗里德曼,R. A.奥尔申和C. J.斯通。分类和回归树。佛罗里达州博卡拉顿:查普曼和霍尔,1984年。
[2]罗永安、施永信。分类树的分割选择方法Statistica中央研究院, Vol. 7, 1997, pp. 815-840。
[3] Loh, W.Y.,“无偏变量选择和交互检测的回归树”。Statistica中央研究院, Vol. 12, 2002, pp. 361-386。
另请参阅
ClassificationTree
|RegressionTree
|fitctree
|fitrtree
|预测(CompactClassificationTree)
|预测(CompactRegressionTree)
|修剪(ClassificationTree)
|修剪(RegressionTree)