You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 15:45:07