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

基于R语言筛选机器学习最优变量组合的脚本需求

R语言实现变量组合筛选与RMSE计算

核心思路

  1. 对变量列表去重,避免重复变量干扰模型效果
  2. 生成指定大小(5-9)的所有变量组合
  3. 用交叉验证训练回归模型,计算每个组合的RMSE
  4. 按RMSE升序排序,筛选出最优变量组合

实现脚本

# 加载所需包(未安装则自动安装)
if (!require("caret")) install.packages("caret")
library(caret)

# 1. 定义变量列表并去重
var_vector <- c("blood pressure", "sugar level", "bmi", "weight", "skin thickness", "weight", "gender")
unique_vars <- unique(var_vector)
var_count <- length(unique_vars)

# 2. 设定组合大小范围(自动适配实际变量数量)
min_comb_size <- 5
max_comb_size <- min(9, var_count)
comb_sizes <- min_comb_size:max_comb_size

# 3. 准备数据(请替换为你的实际数据集和目标变量)
# df <- read.csv("你的数据集路径.csv")
# target_col <- "你的目标变量列名"

# 4. 定义RMSE计算函数(采用10折交叉验证)
calc_rmse <- function(var_comb, df, target_col) {
  # 构建模型公式
  formula_str <- paste(target_col, "~", paste(var_comb, collapse = " + "))
  model_formula <- as.formula(formula_str)
  
  # 设置交叉验证参数
  train_control <- trainControl(method = "cv", number = 10)
  
  # 训练线性回归模型(可替换为其他回归模型,如随机森林)
  model <- train(model_formula, data = df, method = "lm", trControl = train_control)
  
  # 返回交叉验证的RMSE均值
  return(model$results$RMSE)
}

# 5. 遍历所有组合并计算RMSE
results <- data.frame()
for (size in comb_sizes) {
  # 生成当前大小的所有变量组合
  comb_list <- combn(unique_vars, size, simplify = FALSE)
  
  # 逐个计算组合的RMSE
  for (comb in comb_list) {
    comb_label <- paste(comb, collapse = ", ")
    rmse_value <- calc_rmse(comb, df, target_col)
    
    # 存储结果
    results <- rbind(results, data.frame(
      组合大小 = size,
      变量组合 = comb_label,
      RMSE = rmse_value,
      stringsAsFactors = FALSE
    ))
  }
}

# 6. 按RMSE升序排序,筛选最优组合
sorted_results <- results[order(results$RMSE), ]

# 输出前5个最优组合
cat("最优变量组合(按RMSE升序):\n")
print(head(sorted_results, 5))

# 可选:将结果保存到CSV文件
# write.csv(sorted_results, "变量组合RMSE结果.csv", row.names = FALSE)

关键说明

  • 数据替换:必须将代码中的df和target_col替换为你的实际数据集对象和目标变量列名
  • 模型替换:默认使用线性回归,若需其他模型(如随机森林),可将train函数中的method参数改为"rf"(需提前安装randomForest包)
  • 组合适配:如果去重后的变量数量不足9,代码会自动将最大组合大小调整为实际变量数,避免报错
  • 交叉验证:采用10折交叉验证计算RMSE,能有效降低过拟合风险,可通过调整trainControl的number参数修改折数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 12:30:34