[英]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.