R: Карет, как нам передать параметр для k для kNN

Я использую каретку для knn, и сначала я запускаю процесс с tuneLength = 10, я обнаружил, что тот, который используется для модели, имеет k = 21

Я хотел бы запустить параметр с определенным набором значений k, и я сталкиваюсь с ошибками, передавая значения в tuneGrid или передаю значения k непосредственно в функцию поезда

Данные:

library(mlbench)
data(PimaIndiansDiabetes)

Код:

grid = expand.grid(k = c(5,7,9,15,19,21)

compute_learncurve5 <- function(df=adultFile,control=control,ratio=30,fold=10,N=3,metric="Accuracy",
                                seed=1234,scaled=FALSE,DEBUG=FALSE) {
  result_df = c()
  size <- round(size=(ratio/100 * nrow(df)))
  split <-  gsub(" ","",paste(as.character(100-ratio),"/",as.character(ratio)))
  iter <-  N
  trainSize <-  nrow(df)-size
  testSize <-  size

  if (DEBUG){
    print(paste("Dimension of InputDataSet : ", dim(df)))
    print(paste("Test/Train Perct : ",ratio,"|",100-ratio,
                " : Train/Test size = ", trainSize,"|",testSize))
  }

  #Set-up data
  trainpct  <- (100-ratio)/100

  # Set-up Train and Test - Change target variable
  inDfTraining <- createDataPartition(df$response, p = trainpct, list = FALSE)
  inTraining <- df[ inDfTraining,]
  inTesting  <- df[-inDfTraining,]

  # Run algo to generate MODEL
  set.seed(seed)
  metric=metric
  control=control
  grid = expand.grid(k. = c(5,7,10,15,19,21))

  Fit.kNN <- train(response~., data=df, method="knn", metric=metric, preProc=preProc, trControl=control,
                   tuneGrid=grid)


}

learnCurve_df5 = c()
for (i in seq(95, 5, -5)) {
  learnCurve_df5 <- rbind(learnCurve_df5,compute_learncurve5(df=adultFile))
}

person E B    schedule 18.09.2017    source источник
comment
(Частично) проблема заключается в опечатке во второй раз, когда вы назначаете сетку чуть выше train (), grid = expand.grid(k. = c(5,7,10,15,19,21)) - ›grid = expand.grid(k = c(5,7,10,15,19,21))   -  person DMU    schedule 18.09.2017
comment
Я изменил эту часть, и мне пришлось также изменить metric = metric и control = control на основе другого сообщения об использовании назначения x = x   -  person E B    schedule 18.09.2017


Ответы (1)


Насколько я понимаю, вы хотите указать только k. Я нашел ответ в перекрестной проверке.

См. Аргумент tuneGrid функции train.

Попробуй это:

Fit.kNN <- train(response~., data = df, method = "knn", metric = metric, 
                 preProc = preProc, trControl = control, tuneGrid = expand.grid(k = 1:25))
person bbiasi    schedule 01.02.2019