R :插入符我们如何为 kNN 传递 k 参数

E B*_*E B 2 r knn r-caret

我使用插入符号表示 knn,最初使用tuneLength=10 运行该过程,我发现用于模型的 k=21

我想使用一组特定的 k 值来运行参数,但在传递 tuneGrid 中的值或将 k 值直接传递给训练函数时遇到错误

数据:

library(mlbench)
data(PimaIndiansDiabetes)
Run Code Online (Sandbox Code Playgroud)

代码:

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))
}
Run Code Online (Sandbox Code Playgroud)

bbi*_*asi 5

我了解您只想指定k. 我在交叉验证中找到了答案

参见tuneGrid论证train

尝试这个:

Fit.kNN <- train(response~., data = df, method = "knn", metric = metric, 
                 preProc = preProc, trControl = control, tuneGrid = expand.grid(k = 1:25))
Run Code Online (Sandbox Code Playgroud)