基于R语言筛选机器学习最优变量组合的脚本需求
R语言实现变量组合筛选与RMSE计算
核心思路
- 对变量列表去重,避免重复变量干扰模型效果
- 生成指定大小(5-9)的所有变量组合
- 用交叉验证训练回归模型,计算每个组合的RMSE
- 按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
相关产品推荐
相关产品推荐

