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

如何基于训练集分箱区间自动划分验证集样本分组?

基于训练组分组区间划分验证集score的实现方案

核心逻辑

从训练组生成的groups矩阵列名中解析分位数区间规则,再将验证集的score_val逐一匹配到对应区间,生成与训练组结构一致的分组矩阵。

具体步骤(R语言,适配GenericML包场景)

1. 解析训练组的区间规则

先从groups的列名中提取每个分组对应的数值上下限:

# 获取训练组分组的列名
group_cols <- colnames(groups)

# 解析每个列名的区间边界
interval_list <- lapply(group_cols, function(col) {
  # 剔除括号符号,分割出上下限字符串
  bounds <- gsub("\\[|\\)|\\]", "", col) %>% strsplit(", ") %>% unlist()
  list(
    lower = as.numeric(bounds[1]),
    upper = as.numeric(bounds[2]),
    group_name = col
  )
})

2. 匹配验证集score到对应分组

初始化验证组分组矩阵,遍历每个score值匹配区间:

# 创建空的验证组分组矩阵
groups_val <- matrix(0, nrow = length(score_val), ncol = length(group_cols))
colnames(groups_val) <- group_cols

# 逐个匹配score值
for (i in seq_along(score_val)) {
  current_score <- score_val[i]
  # 找到符合条件的区间索引
  match_pos <- which(sapply(interval_list, function(interval) {
    current_score >= interval$lower & current_score < interval$upper
  }))
  # 处理刚好等于最大上限的特殊情况(如score=1.0)
  if (length(match_pos) == 0) {
    match_pos <- which(sapply(interval_list, function(interval) {
      interval$upper == max(sapply(interval_list, function(x) x$upper))
    }))
  }
  # 标记对应分组
  groups_val[i, match_pos] <- 1
}

3. 验证分组正确性

随机抽取样本检查匹配结果:

# 随机选5个样本验证
check_idx <- sample(length(score_val), 5)
cbind(score_val[check_idx], groups_val[check_idx, ])

关键注意点

  • 必须保证训练集和验证集的score是用同一scoring rule生成的,否则区间匹配无效。
  • 区间的开闭逻辑要和quantile_group函数的参数保持一致(比如是否包含上限)。
  • 若groups是因子类型,需先转换为列名再解析区间。

内容的提问来源于stack exchange,提问作者riccardo-df

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 21:55:39