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

如何一次性创建多个与原数据集分布一致的±100行分层样本?

保持Id分布的样本包划分最优方案

核心思路

先锁定原数据集的Id分布比例,再按比例给每个样本包分配对应Id的行数,最后从原数据中抽取对应数据,保证每个样本包的分布和原数据一致,同时行数控制在100±10(结合你提供的示例图,默认围绕100行波动;若实际需求是±100的大范围,调整目标行数区间即可)。

具体步骤

  • 第一步:统计原数据Id分布占比
    先算出每个Id(a、b、c)在总数据中的占比,比如总共有N行,a有Na行,占比就是 p_a = Na / N,同理算出p_b、p_c。这是保证样本分布匹配的核心基础,必须优先完成。

  • 第二步:确定每个样本包的目标行数
    按需求设定每个样本包的行数范围(比如90-110行),可以随机在这个范围内选一个数作为当前样本包的目标总行数,也可以固定用100行、允许少量波动。

  • 第三步:按占比分配每个Id的行数
    用样本包目标总行数乘以各Id的占比,得到每个Id的目标行数。这里需要取整,比如目标102行、p_a=40%,算出来是40.8,可以取42;p_b=30%是30.6,取31;剩下的102-42-31=29分配给c。取整时尽量贴合原占比,若总和和目标行数有差值,优先调整占比最高或最低的Id的行数,保证整体分布偏差最小。

  • 第四步:抽取对应数据
    对每个Id的数据单独打乱顺序,然后按分配的行数依次抽取。比如把所有a的数据打乱后,分成若干份,每份对应样本包需要的a行数;b、c同理。这样能避免重复抽取,效率也更高。如果数据集不大,也可以每次抽取后把已选数据从原集中移除,直到所有数据分配完。

  • 第五步:处理剩余数据
    最后如果剩下的数据不够组成一个完整的样本包(比如只剩50行),可以直接把这些剩余数据合并成一个样本包,或者把它们按比例拆分到之前的样本包里(如果允许样本包行数波动更大的话)。

示例参考(结合你提供的图)

原数据a占40%、b占30%、c占30%:

  • 样本包1(100行):40条a、30条b、30条c
  • 样本包2(102行):42条a、31条b、29条c
  • 后续样本包依此逻辑分配,直到所有数据处理完毕。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 09:12:45