主要内容

改善分类树和回归树

可以通过在中设置名称-值对来调优树fitctreeFitrtree..本节的其余部分将描述如何确定树的质量,如何确定要设置哪些名称-值对,以及如何控制树的大小。

检查Resubstitution错误

重新提交错误表示响应训练数据与树根据输入的训练数据对响应做出的预测之间的差异。如果再替代错误很高,就不能指望树的预测结果很好。然而,低的再替代误差并不能保证对新数据的良好预测。再替代误差通常是对新数据的预测误差的过度乐观估计。

分类树重新替换错误

这个例子展示了如何检查分类树的再替换错误。

加载Fisher的虹膜数据。

加载渔民

使用整个数据集列车默认分类树。

Mdl = fitctree(量、种类);

检查重新提交错误。

resuberror = resubLoss (Mdl)
Resuberror = 0.0200

树将正确分类所有Fisher IRIS数据。

交叉验证

为了更好地了解树的预测准确性,为新数据进行交叉验证树。默认情况下,交叉验证随机将培训数据分成10个部分。它列举了10个新树,每个新树是数据的九个部分。然后,它检查每种新树的预测准确性,对不包括在训练中的树中的数据。此方法对所得树的预测准确性提供了良好的估计,因为它测试了新数据上的新树。

交叉验证一个回归树

该示例展示了如何检查回归树的再替换和交叉验证准确性,以预测基于Carsmall.数据。

加载Carsmall.数据集。考虑加速度、排量、马力和重量作为MPG的预测因素。

加载Carsmall.X = [加速位移马力重量];

使用所有观察来生长回归树。

rtree = fitrtree(x,mpg);

计算样本内误差。

Resuberror = Resubloss(rtree)
Resuberror = 4.7188

回归树的重新提交损失是平均方形错误。生成的值表示树的典型预测误差是关于4.7的平方根,或者超过2的一点。

估计交叉验证MSE。

rng.'默认';cvrtree = crossval(rtree);cvloss = kfoldloss(cvrtree)
cvloss = 23.5706.

交叉验证的损失差不多25,这意味着新数据上的树的典型预测误差是约5.这表明交叉验证损失通常高于简单的重新试门损失。

选择分裂预测器选择技术

标准购物车算法倾向于选择具有许多级别的连续预测因素。有时,这样的选择可以是虚假的并且还可以掩盖更重要的预测器,这些预测器具有更少的级别,例如分类预测器。也就是说,每个节点处的预测器选择过程被偏置。此外,标准推车往往会错过对预测器对与响应的重要相互作用。

为了减轻选择偏差并增加重要交互的检测,可以使用曲率或交互测试的使用'预测互联'名称值对参数。使用曲率或相互作用测试具有产生比标准推车更好的预测值重要性估算的附加优点。

该表总结了受支持的预测器选择技术。金宝app

技术 '预测互联'价值 描述 训练速度 何时指定
标准推车[1] 默认

选择最大化拆分标准增益的分割预测器,这些拆分率在所有可预测器的所有可能的拆分中都可以获得。

基线进行比较

指定这些条件是否为真:

  • 所有的预测都是连续的

  • 预测标志重要性不是分析目标

  • 用于提升决策树

曲率测试[2][3] “弯曲” 选择分割预测器,将p-值卡方检验每个预测因子与反应之间的独立性。 可与标准推车相媲美

指定这些条件是否为真:

  • 预测变量是异构的

  • 预测标志重要性是分析目标

  • 增强树解释

互动测试[3] '互动曲率' 选择最小的分割预测器p- 在每个预测器和响应之间的独立性的Chi-Square测试(即,进行曲率测试),并且最小化p- 在每对预测器和响应之间的独立性的Chi-Square测试。 比标准推车慢,特别是当数据集包含许多预测变量时。

指定这些条件是否为真:

  • 预测变量是异构的

  • 你怀疑成对的预测器和响应之间的联系

  • 预测标志重要性是分析目标

  • 增强树解释

有关预测测量选择技术的更多详细信息:

控制深度或“叶面”

当您长出决策树时,考虑其简单性和预测的权力。具有许多叶子的深树通常对训练数据非常准确。但是,树不保证在独立的测试集上显示可比准确性。叶茂树倾向于超然(或综合),其测试精度往往远远低于其训练(重新提交)准确性。相比之下,浅树不会达到高训练准确性。但是一棵浅树可能更加强大 - 它的训练精度可能接近代表性测试集的训练。此外,浅树很容易解释。如果您没有足够的数据进行培训和测试,请通过交叉验证估算树精度。

fitctreeFitrtree.有三个名称 - 值对参数,可控制结果决策树的深度:

  • MaxNumSplits—分支节点拆分的最大次数为MaxNumSplits每棵树。setMaxNumSplits得到一棵深的树。默认值是大小(X, 1) - 1

  • minleafsize.- 每个叶子至少有minleafsize.观察。设置小值minleafsize.才能得到深邃的树木。默认值是1

  • MinParentSize- 树中的每个分支节点至少有MinParentSize观察。设置小值MinParentSize才能得到深邃的树木。默认值是10

如果您指定MinParentSizeminleafsize.,学习者使用叶子(即浅树)的树木产生树木:

MINPALENT = MAX(Minplentsize,2 * minleafsize)

如果你提供MaxNumSplits,该软件将对树进行拆分,直到满足三个拆分标准中的一个。

有关控制树深度的替代方法,请参阅灌丛

选择适当的树深度

这个例子展示了如何控制决策树的深度,以及如何选择合适的深度。

加载电离层数据。

加载电离层

从中生成指数间隔的值集10通过100.表示每个叶节点的最小观察次数。

叶子= logspace(1,2,10);

为此创建交叉验证的分类树电离层数据。指定使用最小叶子尺寸生长每棵树

RNG('默认') N = numel(叶片);呃= 0 (N, 1);为了n = 1:n t = fitcree(x,y,'横穿'“上”...'minleafsize',叶子(n));err(n)= kfoldloss(t);结尾情节(叶子,错误);Xlabel(“敏叶大小”);ylabel (“旨在错误”);

图包含轴对象。轴对象包含类型线的对象。

最好的叶子尺寸在约20.50每叶的观察。

比较至少最佳树40对默认树的每个叶子的观察,它使用10每个父节点的观察和1每叶观察。

defaulttree = fitctree(x,y);查看(DefaultTree,“模式”'图形'

图分类树查看器包含一个轴对象和其他对象的类型uimenu, uicontrol。轴对象包含60个类型的类型,文本。

OptimalTree = fitctree (X, Y,'minleafsize', 40);视图(OptimalTree,'模式''图形'

图分类树查看器包含一个轴对象和其他对象的类型uimenu, uicontrol。axis对象包含12个类型为line、text的对象。

Resubopt = Resubloss(OptimalTree);LODEOPT = KFOLDLOSS(Crossval(Optimaltree));Resubdefault = Resubloss(DefaultTree);loceDefault = kfoldloss(delectrval(defaulttree));Resubopt,Resubdefault,LordOpt,LockDefault
resubOpt = 0.0883
resubDefault = 0.0114
lossOpt = 0.1054
lossDefault = 0.1054

近最优树要小得多,而且再替代误差也大得多。然而,它为交叉验证的数据提供了类似的准确性。

灌丛

通过在同一树枝上合并叶子来修剪树木深度(叶状性)。控制深度或“叶面”描述一种为树选择最佳深度的方法。与该部分不同的是,您不需要为每个节点大小生长一棵新树。相反,你应该种一棵很深的树,把它修剪到你选择的高度。

使用使用的命令行修剪树修剪方法(分类)或修剪方法(回归)。或者,用树观众交互式地修剪树:

视图(树,“模式”,“图”)

要修剪树,树必须包含修剪序列。默认情况下,两者都是fitctreeFitrtree.在建筑期间计算树的修剪序列。如果你用树木建造一棵树'修剪'名称 - 值对设置为'离开',或者如果您将一棵树修剪到较小的层次,则该树不包含完整的修剪序列。生成完整的剪枝序列修剪方法(分类)或修剪方法(回归)。

修剪分类树

此示例为该示例创建了一个分类树电离层数据,并将其处理到一个良好的水平。

加载电离层数据:

加载电离层

为数据构造默认的分类树:

树= fitctree (X, Y);

在交互式查看器中查看树:

查看(树,“模式”'图形'

图分类树查看器包含一个轴对象和其他对象的类型uimenu, uicontrol。轴对象包含60个类型的类型,文本。

通过最小化交叉验证损失来找到最优剪枝水平:

[~, ~, ~, bestlevel] = cvLoss(树,...'子树''全部''treezize''min'
Bestlevel = 6.

把树修剪平6

查看(树,“模式”'图形''修剪'6)

图分类树查看器包含一个轴对象和其他对象的类型uimenu, uicontrol。axis对象包含12个类型为line、text的对象。

或者,使用交互式窗口修剪树。

修剪后的树与“选择适当的树深度”示例中的近最佳树相同。

'treezize'“本身”(默认)找到树错误从最佳级别的错误不超过错误的最大修剪级别加上一个标准偏差:

[~, ~, ~, bestlevel] = cvLoss(树,'子树''全部'
Bestlevel = 6.

在这种情况下,级别对于任何一个设置都是相同的'treezize'

修剪树用它用于其他目的:

树= prune(树,“水平”,6);查看(树,“模式”'图形'

图分类树查看器包含一个轴对象和其他对象的类型uimenu, uicontrol。axis对象包含12个类型为line、text的对象。

参考

[1] Breiman,L.,J.Ha.Friedman,R.A. Olshen和C. J. Stone。分类和回归树。佛罗里达州波卡拉顿:查普曼和霍尔出版社,1984年。

[2] LOH,W.Y.和Y.S.Shih。“分类树的分离选择方法。”统计学日志,卷。7,1997,第815-840页。

[3] LOH,W.Y.“回归树木具有无偏的变量选择和相互作用检测。”统计学日志,第12卷,2002年,第361-386页。

另请参阅

|||||||

相关话题