繁体   English   中英

在分类树之后尝试进行交叉验证时出错

[英]Error trying to do cross validation after a classification tree

我正在尝试使用 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

我已经查看了该功能的帮助。 它需要一个树对象,这是我放在里面的。

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

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

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

所以,我们应该改为

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

接下来,还有一个cv.tree如何处理变量的问题(参见这里)。 做类似的事情

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM