R中树包的树交叉验证

时间:2018-12-09 14:24:53

标签: r tree cross-validation

有人知道r中树包的 {% if app.request.hasPreviousSession %} {% for type, messages in app.session.flashbag.all() %} {% for message in messages %} <div class="flash-{{ type }}"> {{ message }} </div> {% endfor %} {% endfor %} {% endif %} 函数如何工作吗? 默认设置为10倍,但结果显示8种树模型,而不是10种:

enter image description here

此外,如果我设置5折,结果将显示8个模型: enter image description here

我使用的代码如下:

cv.tree

谢谢

1 个答案:

答案 0 :(得分:3)

输出中显示的八件事不是交叉验证的结果。 cv.tree的文档对输出说:

  

     

应用于对象的FUN副本,组件dev被交叉验证替换   每次拟合的dev组件总和得出的结果。

由于您没有为FUN指定cv.tree参数,因此将获得默认的prune.treeprune.tree的输出是什么?该文档说:

  

确定提供树的子树的嵌套序列,方法是   根据以下内容,递归“截断”最不重要的分割   成本复杂性度量。 prune.misclass是的缩写。   prune.tree(method =“ misclass”)与cv.tree一起使用。

请注意,您的树正好有8片叶子。

plot(tree.boston)
text(tree.boston)

Plot of tree

prune.tree向您展示八棵树的偏差,一一摘掉叶子。 cv.tree向您显示此内容的交叉验证版本。它没有对完整的训练数据计算偏差,而是对八个连续修剪中的每一个使用交叉验证的值。

将仅使用prune.tree的输出中的偏差与经过交叉验证的偏差进行比较。

prune.tree(tree.boston)

$dev
[1]  3098.610  3354.268  3806.195  4574.704  5393.592  6952.719 11229.299
[8] 20894.657

cv.tree(tree.boston, K=5)

$dev
[1]  4768.281  4783.625  5718.441  6309.655  6329.011  7078.719 12907.505
[8] 20974.393

请注意,交叉验证的值在每个步骤中都较高。仅对训练数据使用prune.tree测试,因此低估了偏差。 CV值更现实。

相关问题