【问题标题】:Error trying to do cross validation after a classification tree在分类树之后尝试进行交叉验证时出错
【发布时间】:2019-04-07 19:00:24
【问题描述】:

我正在尝试使用 tree 包运行一个简单的分类树。我从教科书上拿了代码,一一复制,但是不管我做什么,它都不起作用。

library(ISLR)
library(tree)
C = Carseats
C$HighSales = ifelse(C$Sales<=8,"No","Yes")
C = C[,-1]

set.seed(2)
train = sample(1:nrow(C), 200)
carseats.test = C[-train,]
high.test = C$HighSales[-train]

tree.carseats = tree(HighSales~., C, subset = train)
tree.predict = predict(tree.carseats, carseats.test, type = "class")
table(tree.predict,high.test)
(93+48)/200

set.seed(3)
cv.cs = cv.tree(tree.carseats, FUN = prune.misclass)

I am getting the following error:

Error in as.data.frame.default(data, optional = TRUE) : 
  cannot coerce class ‘"function"’ to a data.frame

我查看了函数的帮助。它需要一个树对象,这是我放在里面的。

可能是什么问题?该代码与教科书和引用该书的其他网站相同。

【问题讨论】:

    标签: r decision-tree


    【解决方案1】:

    有两个问题。一个与tree中的公式有关:

    formula - 一个公式表达式。左侧(响应)应在拟合回归树时为数值向量,或在生成分类树时为因子。右边应该是一系列用+分隔的数字或因子变量;不应该有交互条款。两个都 。和 - 是允许的:回归树可以有偏移项。

    所以,我们应该有

    C$HighSales <- factor(ifelse(C$Sales <= 8, "No", "Yes"))
    

    接下来,cv.tree 处理变量的方式存在问题(请参阅here)。做类似的事情

    mydf <- C
    tree.carseats <- tree(HighSales ~ ., mydf, subset = train)
    

    有效。问题是有一个名为 C 的函数,而 cv.tree 正是指这个函数而不是你的数据集。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-26
      • 2014-08-04
      • 2020-12-26
      • 2021-08-12
      • 2017-05-07
      • 2021-10-01
      • 2014-10-02
      • 1970-01-01
      相关资源
      最近更新 更多