aki*_*kis 5 tree r cross-validation
有谁知道cv.treer中tree包的功能是如何工作的?默认设置为 10 倍,但结果显示 8 个树模型而不是 10 个:
我使用的代码如下:
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
Run Code Online (Sandbox Code Playgroud)
谢谢
输出中显示的八件事不是交叉验证的折叠。文档cv.tree说明了输出:
价值
应用于对象的 FUN 副本,组件 dev 被每个拟合的 dev 组件总和的交叉验证结果替换。
由于您没有指定 的FUN参数cv.tree,因此您将获得默认值prune.tree。的输出是什么prune.tree?文档说:
根据成本复杂性度量,通过递归地“剪掉”最不重要的分割来确定所提供的树的子树的嵌套序列。prune.misclass 是 prune.tree(method = "misclass") 的缩写,与 cv.tree 一起使用。
请注意,您的树正好有 8 个叶子。
plot(tree.boston)
text(tree.boston)
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
请注意,每个步骤的交叉验证值都相当高。仅对prune.tree训练数据进行测试,因此会低估偏差。cv值更现实。
| 归档时间: |
|
| 查看次数: |
9240 次 |
| 最近记录: |