1
我正在嘗試手動進行10倍交叉驗證。我的數據集叫做spam
。調試交叉驗證碼
我的代碼如下:
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
有沒有你喜歡用手做這個,而不是使用已經存在的一個原因(很好的實施)通過像'caret'這樣的軟件包的CV選項? – David
我正在嘗試編碼! – user2303557
我使用rpart()函數的方式有問題嗎?我花了數小時調試,似乎無法解決這個問題......謝謝! – user2303557