您可以通过在fitctree
和fitrtree
. 本节的其余部分将介绍如何确定树的质量,如何确定要设置的名称-值对,以及如何控制树的大小。
恢复错误是响应训练数据和树基于输入训练数据对响应做出的预测之间的差异。如果resubstitution错误很高,则不能期望树的预测是好的。然而,具有低的恢复误差并不能保证对新数据的良好预测。恢复误差通常是对新数据的预测误差过于乐观的估计。
此示例演示如何检查分类树的resubstitution错误。
加载Fisher的虹膜数据。
加载fisheriris
列车采用整个数据集的默认分类树。
Mdl=菲特特里(meas,物种);
检查resubstitution错误。
resuberror=结果(Mdl)
resuberror = 0.0200
树进行分类几乎所有的费舍尔正确虹膜数据。
为了让您的树中的新数据,交叉验证树的预测准确性的一个更好的感觉。默认情况下,交叉验证随机拆分训练数据分成10份。它训练10棵新树,每一个对九个部分的数据。然后分析每个新树对未列入培训,以树中的数据的预测准确度。该方法给出了结果树的预测准确性的一个很好的估计,因为它测试新数据的新树。
此示例显示如何检查基于小型车
数据。
装载小型车
数据集。考虑加速度、位移、马力和重量作为MPG的预测因素。
加载小型车X=[加速位移马力重量];
使用所有的观察结果生长回归树。
rtree=Firtree(X,英里/加仑);
计算样本误差。
resuberror = resubLoss(RTREE)
resuberror = 4.7188
回归树的恢复损失是均方误差。结果值表明树的典型预测误差约为4.7的平方根,或略大于2。
估计交叉验证MSE。
rng公司'默认';cvrtree=交叉值(rtree);cvloss=kfoldLoss(cvrtree)
cvloss=25.6450
交叉验证的损失几乎为25,这意味着新数据树的典型预测误差约为5。这表明,交叉验证损失通常高于简单的恢复损失。
标准的CART算法倾向于选择具有许多层面连续预测。有时候,这种选择可能是虚假的,也可以掩盖有较少的水平,如分类预测更重要的预测。即,在每个节点中的预测器选择过程被偏置。此外,标准的购物车往往会错过对预测和响应之间的重要互动。
为了减少选择偏差并增加对重要交互的检测,可以使用'PredictorSelection'
名称 - 值对的参数。使用弯曲或交互测试有产生更好的预测重要性估计比标准车的额外优势。
此表总结了支持的预测选择技术。万博1manbetx
技术 | 'PredictorSelection' 价值 |
描述 | 训练速度 | 当指定 |
---|---|---|---|---|
标准手推车[一] | 违约 | 选择分割的预测,最大限度地提高了所有预测的所有可能分割的分割标准增益。 |
基准进行比较 | 指定这些条件是否为真:
|
曲率测试[二][三] | '曲率' |
选择将第页-各预测因子与反应之间独立性的卡方检验值。 | 与标准CART | 指定这些条件是否为真:
|
互动测试[三] | “交互曲率” |
选择将第页-各预测因子与响应之间独立性的卡方检验值(即进行曲率检验),且将第页-VALUE每对预测和响应的之间的独立性的卡方检验的。 | 比标准CART慢,特别是当数据集包含许多预测变量。 | 指定这些条件是否为真:
|
有关预测值选择技术的更多详细信息:
对于分类树,见PredictorSelection
和节点拆分规则.
有关回归树,请参见PredictorSelection
和节点拆分规则.
当你长大决策树,考虑它的简单性和预测能力。许多给人留下了深刻的树通常是在训练数据高度准确。然而,树不能保证显示在一个独立的测试集相当准确。一个枝繁叶茂的树往往会训练过度(或过度拟合),其测试精度往往比其培训(resubstitution)精度逊色得多。相反,浅的树没有达到高训练精度。但浅树可以更稳健 - 其训练精度可能接近一个有代表性的测试组。此外,浅树容易解释。如果你没有通过交叉验证的训练和测试,估计树的精度足够的数据。
fitctree
和fitrtree
有三个名称 - 值对的参数控制产生的决策树的深度:
最大层数
-分支节点拆分的最大数目为最大层数
每棵树。为设置大值最大层数
为了得到一棵大树。默认值是尺寸(X,1)–1
.
小叶
-每片叶子至少有小叶
观察。设置小值小叶
去挖深树。默认值是1个
.
最小父级
-树中的每个分支节点至少有最小父级
观察。设置小值最小父级
去挖深树。默认值是10个
.
如果您指定最小父级
和小叶
,学习者使用该设置,与更大的叶子(即,浅树)收率树木:
MinParent = MAX(MinParentSize,2 * MinLeafSize)
如果你提供最大层数
,软件将拆分树,直到满足三个拆分条件之一。
有关控制树深度的另一种方法,请参见修剪.
这个例子展示了如何控制决策树的深度,以及如何选择适当的深度。
装载电离层
数据。
加载电离层
从生成的指数间隔的值的集合10个
通过100个
表示每个叶节点的最小观测数。
叶子= LOGSPACE(1,2,10);
创建交叉验证分类树电离层
数据。指定在叶子
.
rng公司('默认')N=纽梅尔(叶);err=零(N,1);对于N = 1:N T = fitctree(X,Y,'CrossVal','打开',...'MinLeafSize',叶(n));err(n)=kfoldLoss(t);结束情节(叶,ERR);xlabel('最小叶大小');伊拉贝尔('交叉验证错误');
最好的叶子大小介于20个
和50个
每片叶子的观察结果。
将近似最优树与至少40个
使用默认树的每个叶的观测值,它使用10个
每父节点的观察和1个
观察每片叶子。
DefaultTree = fitctree(X,Y);视图(DefaultTree,'模式','图形')
最优树=fitctree(X,Y,'MinLeafSize',40);视图(最优树,'模式','图形')
resubOpt = resubLoss(OptimalTree);lossOpt = kfoldLoss(crossval(OptimalTree));resubDefault = resubLoss(DefaultTree);lossDefault = kfoldLoss(crossval(DefaultTree));resubOpt,resubDefault,lossOpt,lossDefault
resubOpt=0.0883
结果故障=0.0114
损失率=0.1054
lossDefault = 0.1111
接近最优的树要小得多,并且给出了更高的恢复误差。然而,它对交叉验证的数据提供了类似的精度。
修剪通过合并同一树枝上的叶子来优化树的深度(叶性)。控制深度或“叶性”描述一种选择树的最佳深度的方法。与该部分不同的是,不需要为每个节点大小都生成新树。相反,种植一棵深树,并修剪到你选择的水平。
使用修剪
方法(分类)或修剪
方法(回归)。或者,使用树查看器交互修剪树:
视图(树,'mode','graph')
要修剪树,树必须包含修剪序列。默认情况下,两者fitctree
和fitrtree
在构造期间计算树的修剪顺序。如果你用'修剪'
名称-值对设置为'关闭'
,或者如果将树修剪到较小的级别,则树不包含完整的修剪序列。使用修剪
方法(分类)或修剪
方法(回归)。
这个例子创建了一个分类树电离层
数据,并将其修剪到一个好的级别。
装载电离层
数据:
加载电离层
为数据构造默认分类树:
树=fitctree(X,Y);
查看在交互式查看器中的树:
视图(树,'模式','图形')
通过最小化交叉验证损失,找到最佳修剪级别:
[~,~,~,bestlevel]=cvLoss(树,...“子树”,'所有','的TreeSize',“最小值”)
最佳水平=6
把树修剪平整6个
:
视图(树,'模式','图形','修剪',6页)
另外,使用交互式窗口来修剪树。
修剪后的树与“选择适当的树深度”示例中的近似最优树相同。
套'的TreeSize'
到“硒”
(默认)要查找树错误不超过最佳级别的错误加上一个标准偏差的最大修剪级别:
[~,~,~,bestlevel]=cvLoss(树,“子树”,'所有')
最佳水平=6
在这种情况下,对于'的TreeSize'
.
修剪树将其用于其他用途:
树=修剪(树,'级别',6);视图(树,'模式','图形')
[1] Breiman,L.,J。H.弗里德曼,R. A. Olshen,和C. J.石。分类和回归树。博卡拉顿,佛罗里达州:查普曼和霍尔,1984年。
[2] Loh,W.Y.和Y.S.Shih。“分类树的拆分选择方法。”中国统计局卷。7,1997年,第815-840。
[3] Loh,W.Y.“具有无偏变量选择和交互检测的回归树。”中国统计局2002年第12卷,第361-386页。
分类树
|回归树
|fitctree
|fitrtree
|预测(CompactClassificationTree)
|预测(紧致回归树)
|西梅(ClassificationTree)
|修剪(退化树)