Вопрос относительно k-кратной перекрестной проверки для KNN с использованием R

#r #machine-learning #cross-validation #knn

#r #машинное обучение #перекрестная проверка #knn

Вопрос:

Я пытаюсь выполнить 5-кратную перекрестную проверку для нескольких значений k. Я использовал набор данных OJ в пакете ISLR.

мой код пока выглядит следующим образом,

 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 одинакова.Мне это кажется странным. Итак, я предполагаю, что с моим кодом что-то не так.

Кто-нибудь может помочь мне разобраться в этом?

Спасибо

Ответ №1:

удалите set.seed(123) , это приводит к частоте повторных ошибок.

set.seed используется для воспроизводимости, гарантируя, что любые случайные поиски в сетке или оценки параметров остаются постоянными, что означает, что все оценки параметров, которые используются для подгонки knn модели, будут одинаковыми во всех исполнениях, что приводит к одинаковым прогнозам и, следовательно, к одинаковым частотам ошибок.