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

使用data.table在R中汇总交叉验证指标的技术问题

解决方案:用data.table汇总交叉验证结果

1. 按超参数组合计算MAE/RMSE的均值与标准差

你之前的代码生成了嵌套列表列,导致结果结构不清晰。可以通过两种方式生成规整的汇总结果:

方法1:直接生成宽格式汇总列

hyperparameter_cols <- c("hyperparam_binary", "hyperparam_numeric")
metric_cols <- c("MAE", "RMSE")

summary_results <- dummy_data[, 
  .(
    MAE_mean = mean(MAE, na.rm = TRUE),
    MAE_sd = sd(MAE, na.rm = TRUE),
    RMSE_mean = mean(RMSE, na.rm = TRUE),
    RMSE_sd = sd(RMSE, na.rm = TRUE)
  ),
  by = hyperparameter_cols
]

方法2:先转长格式再汇总(更灵活)

如果后续需要扩展更多指标,这种方法更易维护:

# 转长格式
melted <- melt(dummy_data, 
               id.vars = c(hyperparameter_cols, "sub_model", "year"),
               measure.vars = metric_cols,
               variable.name = "metric",
               value.name = "score")

# 按超参数+指标分组计算均值和标准差
summary_long <- melted[, 
  .(mean_score = mean(score, na.rm = TRUE), sd_score = sd(score, na.rm = TRUE)),
  by = c(hyperparameter_cols, "metric")
]

# 可选:转回宽格式
summary_wide <- dcast(summary_long, 
                      hyperparam_binary + hyperparam_numeric ~ metric,
                      value.var = c("mean_score", "sd_score"))

2. 计算各超参数组合的平均排名

关键是在计算排名时保留超参数信息,再按超参数分组求平均:

# 1. 在sub_model/year分组内计算每个指标的排名,新增排名列到原数据
dummy_data[, 
  c(paste0(metric_cols, "_rank")) := lapply(.SD, function(x) rank(x, ties.method = "average")),
  by = c("sub_model", "year"),
  .SDcols = metric_cols
]

# 2. 按超参数组合计算排名的均值
rank_summary <- dummy_data[,
  lapply(.SD, mean, na.rm = TRUE),
  by = hyperparameter_cols,
  .SDcols = paste0(metric_cols, "_rank")
]

这样rank_summary就会包含每个超参数组合下MAE和RMSE的平均排名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 06:43:12