gpt4 book ai didi

r - 调试交叉验证代码

转载 作者:行者123 更新时间:2023-11-30 09:23:51 25 4
gpt4 key购买 nike

我正在尝试手动进行 10 倍交叉验证。我的数据集称为垃圾邮件

我的代码如下:

n <- nrow(spam) #4600 rows in spam data set
ncp <- length(spam.rpart2$cptable[,"CP"]) #20 CP values
group <- rep(1:10,ceiling(n/10))[1:n] #fill 4600 values with 1 to 10
permid <- sample(1:n) #permute numbers
cvtable <- matrix(NA, n, ncp)

for(j in 1:20) {
for(i in 1:10) {
trainingset <- permid[group!=i]
testset <- permid[group==i]
spam.rpart.test <- rpart(spam ~ .,
method = "class",
cp = spam.rpart2$cptable[j,"CP"],
data = spam[trainingset,])
cvtable[testset,j] <- predict(spam.rpart.test,
data=spam[testset,])[,1]
#incorrect dimensions!
}
}

但是,我在倒数第三行遇到了麻烦。预测值应该只预测 460 个值,但它给了我 4160 个值,因此 for 循环代码没有运行。我收到以下错误:

Error in cvtable[testset, j] <- predict(spam.rpart.test, data = spam[testset,  : 
number of items to replace is not a multiple of replacement length

最佳答案

您想要根据 ?predict.rpart 指定 newdata 进行预测,否则您将获得模型中保存的训练集的预测。更正后的代码可能如下所示:

cvtable[testset, j] <- predict(spam.rpart.test, 
newdata=spam[testset,])[,1]

神秘的是错误消息应该标记 4140 替换条目,而不是 4160。

关于r - 调试交叉验证代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19486114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com