【发布时间】:2013-05-19 01:14:15
【问题描述】:
在一项作业中,我们被要求对 CART 模型执行交叉验证。我曾尝试使用cvTools 中的cvFit 函数,但收到一条奇怪的错误消息。这是一个最小的例子:
library(rpart)
library(cvTools)
data(iris)
cvFit(rpart(formula=Species~., data=iris))
我看到的错误是:
Error in nobs(y) : argument "y" is missing, with no default
还有traceback():
5: nobs(y)
4: cvFit.call(call, data = data, x = x, y = y, cost = cost, K = K,
R = R, foldType = foldType, folds = folds, names = names,
predictArgs = predictArgs, costArgs = costArgs, envir = envir,
seed = seed)
3: cvFit(call, data = data, x = x, y = y, cost = cost, K = K, R = R,
foldType = foldType, folds = folds, names = names, predictArgs = predictArgs,
costArgs = costArgs, envir = envir, seed = seed)
2: cvFit.default(rpart(formula = Species ~ ., data = iris))
1: cvFit(rpart(formula = Species ~ ., data = iris))
看起来y 是cvFit.default 的必填项。但是:
> cvFit(rpart(formula=Species~., data=iris), y=iris$Species)
Error in cvFit.call(call, data = data, x = x, y = y, cost = cost, K = K, :
'x' must have 0 observations
我做错了什么?哪个包可以让我对 CART 树进行交叉验证,而无需自己编写代码? (我太懒了……)
【问题讨论】:
-
如果您深入了解 cvTools 的文档,似乎大多数这些工具都是在构建时考虑到连续响应变量,而不是离散的。你或许可以让它工作,但看起来你必须向
cost提供你自己的函数来计算分类错误。 -
@joran:没错——谢谢!见my own answer。
标签: r cross-validation rpart