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

tidymodels中step_pca预处理后建模报错的问题咨询

解决tidymodels中KNN调参时的变量缺失问题

你的问题根源在于手动提取转换后的数据并脱离recipe上下文使用,tidymodels的workflow需要绑定完整的recipe来自动处理数据转换流程,而不是直接喂给它转换后的PC变量数据集。

核心逻辑

你写的初始配方Species ~ .是完全正确的,recipe会自动完成中心化、标准化、PCA转换,workflow会把转换后的变量(PC1、PC2)自动传递给模型,不需要手动干预数据转换后的输出。

完整解决方案代码

# 加载依赖包
library(tidymodels)
library(tidyverse)

# 1. 构建包含所有转换步骤的配方
iris_recipe <- recipe(Species ~ ., data = iris) %>%
  step_center(all_predictors()) %>%  # 中心化所有预测变量
  step_scale(all_predictors()) %>%   # 标准化所有预测变量
  step_pca(all_predictors(), threshold = 0.8)  # PCA保留解释80%方差的主成分

# 2. 定义带调参的KNN模型
knn_spec <- nearest_neighbor(neighbors = tune()) %>%
  set_engine("kknn") %>%
  set_mode("classification")

# 3. 绑定配方与模型到workflow
knn_workflow <- workflow() %>%
  add_recipe(iris_recipe) %>%
  add_model(knn_spec)

# 4. 设置调参网格(定义k的搜索范围)
knn_grid <- grid_regular(neighbors(range = c(1, 20)), levels = 10)

# 5. 重采样方案(因不拆分数据集,用bootstrapping做模型评估)
iris_boot <- bootstraps(iris, times = 10)

# 6. 执行模型调参
knn_tune_results <- tune_grid(
  knn_workflow,
  resamples = iris_boot,
  grid = knn_grid,
  metrics = metric_set(accuracy)
)

# 7. 选择最优k值并拟合最终模型
best_knn_params <- select_best(knn_tune_results, metric = "accuracy")
final_workflow <- knn_workflow %>% finalize_workflow(best_knn_params)
final_model <- fit(final_workflow, data = iris)

# 测试预测(用原始数据集即可,workflow会自动处理转换)
predict(final_model, new_data = iris)

为什么之前的方法会报错?

你通过juice()提取了转换后的iris_train_t,但如果直接把这个数据集传给workflow或模型,会出现两种矛盾:

  • 若workflow绑定了原始配方,它会期望找到原始的4个特征变量,但数据集中只有PC1、PC2,导致"缺少变量";
  • 若不绑定配方直接用PC变量训练,模型无法关联到配方的转换逻辑,后续预测也会因为缺少转换规则而失败。

tidymodels的设计逻辑是让workflow统一管理数据转换规则和模型训练逻辑,所有数据处理步骤都由recipe定义,workflow自动执行,不需要手动传递转换后的数据。

额外说明:查看转换后的数据

如果需要验证PCA转换的结果,你可以单独预处理配方并提取转换后的数据,但这仅用于检查,不能作为训练输入:

# 仅用于查看转换结果,不要用于模型训练
prepped_recipe <- prep(iris_recipe)
transformed_data <- juice(prepped_recipe)
head(transformed_data)

内容的提问来源于stack exchange,提问作者Marcus Nunes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 16:41:32