如何从 parsnip::nearest_neighbor() 中查看选定的 k

How do I see the selected k from parsnip::nearest_neighbor()

如果我使用 parsnip::nearest_neighbor() 拟合 k 最近邻模型,如果我不选择 k t具体怎么调?

我想弄清楚这里选择的 k 是什么:

the_model <- nearest_neighbor() %>%
  set_engine("kknn") %>% 
  set_mode("classification") 

the_workflow <- 
  workflow() %>% 
  add_recipe(the_recipe) %>% 
  add_model(the_model) 

the_results <-
  the_workflow %>%
  fit_resamples(resamples = cv_folds, 
                metrics = metric_set(roc_auc),
                control = control_resamples(save_pred = TRUE)) 

我知道如果我使用 nearest_neighbor(neighbors = tune()) 我可以使用 select_best("roc_auc") 得到 k 但没有指定如何调整我得到结果但是 select_best() 不 return a k。它使用什么 k 值(您是如何得出答案的)?

如果您没有在 parsnip 中为模型规范指定参数,除非文档中另有说明,否则该值将由底层引擎实现中的默认值确定。

查看 nearest_neighbors() 的文档,然后转到 neighbors

下的 arguments

For kknn, a value of 5 is used if neighbors is not specified.

您还可以使用 {parsnip} 中的 translate() 函数来查看模型规范创建的代码

library(parsnip)

the_model <- nearest_neighbor() %>%
  set_engine("kknn") %>% 
  set_mode("classification") 

the_model %>%
  translate()
#> K-Nearest Neighbor Model Specification (classification)
#> 
#> Computational engine: kknn 
#> 
#> Model fit template:
#> kknn::train.kknn(formula = missing_arg(), data = missing_arg(), 
#>     ks = min_rows(5, data, 5))

我们看到 ks 设置为 min_rows(5, data, 5),如果我们在 nearest_neighbors() 中指定 neighbors,该值将会改变

nearest_neighbor(neighbors = 25) %>%
  set_engine("kknn") %>% 
  set_mode("classification") %>%
  translate()
#> K-Nearest Neighbor Model Specification (classification)
#> 
#> Main Arguments:
#>   neighbors = 25
#> 
#> Computational engine: kknn 
#> 
#> Model fit template:
#> kknn::train.kknn(formula = missing_arg(), data = missing_arg(), 
#>     ks = min_rows(25, data, 5))