我确实尝试复制由适合caret
模型报告的保留集的准确度度量,但很大程度上失败了。数据分为80%(训练集)/ 20%(保持集)。
虽然在使用存储在train()
函数返回的S3对象的插槽中的数据时,我可以获得完全相同的数字,但是当使用指示数字的索引号时,我确实失败了属于保留集的观察(results$control$indexOut$Resample1
)。
我确实试图找出原因,但只发现实际观察结果在任何情况下都是相同的(通过索引选择观察结果或者使用存储在S3槽results$pred$obs
中的观察结果)。但是,预测有所不同(见下面的代码)。
# Load packages and data
library(caret)
library(mlbench) # For dataset
data(Sonar)
# Model
results <- train(Class ~ .,
data = Sonar,
method = "knn",
tuneGrid=data.frame(k=5),
trControl=trainControl(method = "LGOCV", p = 0.8, number = 1,
savePredictions = T, returnResamp="all"))
# Give the same accuracy as the "result" object
confusionMatrix(table(results$pred$pred, results$pred$obs))
# Result is different from the accuracy reported
confusionMatrix(table(results$pred$pred,
predict(results, newdata=results$trainingData[results$control$indexOut$Resample1,])))
# The observed values seem to be the same
all.equal(results$pred$obs, results$trainingData[results$control$indexOut$Resample1, ".outcome"])
# The stored prediction in the pred-slot and the one I do for the hold out part of the data
# seem not to be the same
all.equal(results$pred$pred,
predict(results,newdata=results$trainingData[results$control$indexOut$Resample1,]))
all.equal(results$pred$pred,
predict(results)[results$control$indexOut$Resample1])
all.equal(predict(results)[results$control$indexOut$Resample1],
predict(results, newdata=results$trainingData[results$control$indexOut$Resample1, ]))
我想知道如何通过使用索引编号给出的观察结果自己进行预测来复制报告的保持集的准确度度量。