【问题标题】:Where does the cv.tree function get the data to perform cross validation from? [closed]cv.tree 函数从哪里获取数据以执行交叉验证? [关闭]
【发布时间】:2016-03-26 04:44:12
【问题描述】:

ISLR 第 8 章中的实验包含以下练习以交叉验证分类树:

library(tree) 
library(ISLR) 
attach(Carseats)
set.seed(2)
train=sample(1:nrow(Carseats), 200)
Carseats.test=Carseats [-train ,]
High.test=High[-train]
tree.carseats=tree(High∼.-Sales,Carseats,subset=train)
cv.carseats =cv.tree(tree.carseats ,FUN=prune.misclass)

现在,我的问题是:如果没有将数据集作为参数传入,cv.tree 函数如何执行交叉验证,或者训练集是否被 cv.tree 对象引用?

非常感谢 手动

【问题讨论】:

  • 如果有人决定投反对票,我将不胜感激,这样我就可以改进我的问题,否则毫无意义,谢谢
  • 好吧,这不是我的反对意见,但我可以想象有人可能会认为这是要求我们其他人先仔细查看文档,然后(如果没有记录)查看代码,破译它,然后向你解释。这并不是解决代码问题的真正要求,而这是 SO 存在的主要原因。
  • 如果您确实阅读了函数cv.tree 的帮助和源代码,您会看到它在数据上调用model.frame,这是一个用于查找用于构建模型的原始数据的函数.请参阅 model.frame(tree.carseats)?model.frame。大概这可以通过解析tree.carseats$call
  • 我直到现在才阅读源代码 - 但我阅读了帮助和文档......对不起,这个评论在我提交答案后才出现 - 随意发布这个作为答案并接受它
  • 没问题 - 保留你的。尽管eval(tree.carseats$call$data) 会这样做,但可能想要删除答案中的几个多余的括号。

标签: r decision-tree cross-validation


【解决方案1】:

一直在查看 42 建议的代码,并找到了对 model.frame() 的调用,它“返回一个 data.frame,其中包含使用公式所需的变量和任何 .... 参数”。此方法的树实现(忽略检查等)执行以下操作:

eval(tree.carseats$call$data)

基本上提取带有数据集名称的符号(在本例中为 Carseats),然后对其进行评估。

如果这对其他人来说是显而易见的事情,我们深表歉意。

手动

【讨论】:

    猜你喜欢
    • 2021-05-19
    • 2011-05-07
    • 2017-02-10
    • 1970-01-01
    • 1970-01-01
    • 2018-03-09
    • 1970-01-01
    • 1970-01-01
    • 2015-01-29
    相关资源
    最近更新 更多