首页 文章

r中树包的树交叉验证

提问于
浏览
1

有谁知道r包树包的 cv.tree 功能如何工作?默认设置为10倍,但结果显示8个树模型而不是10个:

此外,如果我设置5折,结果显示8个模型:

我使用的代码如下:

library (MASS)
library(tree)
set.seed (1)
train = sample (1: nrow(Boston ), nrow(Boston )/2)
tree.boston =tree(medv~.,Boston ,subset =train)
summary (tree.boston )
cv.boston =cv.tree(tree.boston,K=10)
cv.boston

谢谢

1 回答

  • 3

    输出中显示的八个内容不是交叉验证的折叠 . cv.tree 的文档说明了输出:

    值应用于对象的FUN副本,其中组件开发替换为每个拟合的开发组件总和的交叉验证结果 .

    由于未将 FUN 参数指定为 cv.tree ,因此您将获得默认 prune.tree . prune.tree 的输出是多少?文件说:

    根据成本复杂性度量,通过递归“剪切”最不重要的分割来确定所提供树的嵌套子树序列 . prune.misclass是prune.tree(method =“misclass”)的缩写,用于cv.tree .

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

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

    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值更加真实 .

相关问题