gpt4 book ai didi

r - 关于使用 R 对 KNN 进行 k 折交叉验证的问题

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

我正在尝试对 k 的多个值进行 5 折交叉验证。我使用的是ISLR包中的OJ数据集。

到目前为止我的代码如下,

library(ISLR)
library(class)
ks=c(1:5)
err.rate.test <- numeric(length = 5)
folds <- cut(seq(1,nrow(OJ)),breaks=5,labels=FALSE)

for (j in seq(along = ks)) {
set.seed(123)
cv.knn <- sapply(1:5, FUN = function(i) {
testID <- which(folds == i, arr.ind = TRUE)
test.X <- OJ[testID, 3]
test.Y <- OJ[testID, 1]
train.X <- OJ[-testID, 3]
train.Y <- OJ[-testID, 1]
knn.test <- knn(data.frame(train.X), data.frame(test.X), train.Y, k = ks[j])
cv.test.est <- mean(knn.test != test.Y)
return(cv.test.est)
})
err.rate.test[j] <- mean(cv.knn)

}


err.rate.test
[1] 0.3757009 0.3757009 0.3757009 0.3757009 0.3757009

代码没有给出任何错误。但由于某种原因,我对每个 k 值的测试错误率是相同的。这对我来说似乎很奇怪。所以我认为我的代码有问题。

谁能帮我解决这个问题吗?

谢谢

最佳答案

删除set.seed(123),这会导致重复错误率。

set.seed 用于再现性,确保任何随机网格搜索或参数估计保持不变,这意味着拟合 knn 模型的所有参数估计在执行过程中将是相同的,从而产生相同的预测,因此错误率也相同。

关于r - 关于使用 R 对 KNN 进行 k 折交叉验证的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55328424/

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