如何在Tidymodels中为nearest_neighbor()迭代多个K值?
在Tidymodels中为K近邻模型设置多个K值的方法
直接给nearest_neighbor()的neighbors参数传入向量会报错,因为该参数默认只接受单个正整数。要测试多个K值,需要借助Tidymodels的调参框架来实现,具体步骤如下:
1. 定义模型时使用调参占位符
把neighbors参数设为tune(),告诉框架这个参数需要进行调优:
library(tidymodels) # 根据任务类型调整mode(classification/regression) knn_spec <- nearest_neighbor( neighbors = tune(), # 用tune()作为参数占位符 weight_func = "rectangular", dist_power = 1 ) %>% set_engine("kknn") %>% set_mode("classification")
2. 指定待测试的K值集合
可以直接构造包含目标K值的数据框,或者用调参函数生成:
# 直接指定你需要的K值 k_grid <- tibble(neighbors = c(3, 5, 8, 11)) # 也可以用grid_regular生成区间内的指定数量值(示例:3到11之间取4个值) # k_grid <- grid_regular(neighbors(range = c(3, 11)), levels = 4)
3. 结合工作流与交叉验证完成调优
将预处理逻辑(如果有的话)和模型封装成工作流,然后用交叉验证测试每个K值的表现:
# 假设你已有训练数据集data_train和模型公式formula(比如y ~ .) knn_wf <- workflow() %>% add_formula(formula) %>% add_model(knn_spec) # 设置交叉验证方案(示例:5折交叉验证) set.seed(123) # 保证结果可复现 folds <- vfold_cv(data_train, v = 5) # 执行调优 knn_tune <- tune_grid( object = knn_wf, resamples = folds, grid = k_grid, metrics = metric_set(accuracy) # 根据任务换指标,比如回归用rmse )
4. 查看结果并确定最优K值
提取调参结果,选择表现最优的K值来固化模型:
# 查看每个K值的验证集指标 collect_metrics(knn_tune) # 挑选最优K值(以accuracy为例) best_knn <- select_best(knn_tune, metric = "accuracy") # 用最优参数更新模型 final_knn_spec <- knn_spec %>% finalize_model(best_knn)
内容的提问来源于stack exchange,提问作者BioinformaticsB
相关产品推荐
相关产品推荐

