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

如何基于其他数据集的均值方差从Dataset5中采样匹配子集

实现步骤

1. 确认目标匹配指标

你可以先从4组基准数据中选定一组作为匹配目标,优先选和Dataset5方差接近的基准(比如Dataset2,方差644.79和Dataset5的612.18差值最小),采样难度更低。4组基准的统计量整理如下:

  • Dataset1:均值28.18,方差393.03
  • Dataset2:均值32.70,方差644.79
  • Dataset3:均值36.94,方差805.50
  • Dataset4:均值28.56,方差436.86

2. 采样实现

方案A:快速加权采样(适合对精度要求不高的场景)

核心逻辑是给tokens长度更接近目标均值的样本更高采样权重,同时保留一定比例的长尾样本保证方差接近目标值,代码示例如下:

import pandas as pd
import numpy as np

# 替换为你要匹配的目标统计量,这里以Dataset2为例
target_avg = 32.70
target_var = 644.79
# 替换为你的Dataset5读取逻辑
df5 = pd.read_csv("dataset5.csv")
# 设定采样子集大小,可按需调整
sample_size = 1000

# 计算每个样本和目标均值的偏差,生成采样权重
df5["dev"] = np.abs(df5["tokens_length"] - target_avg)
df5["weight"] = 1 / (df5["dev"] + 1e-3)

# 加权采样
sample_df = df5.sample(n=sample_size, weights="weight", random_state=42)
# 验证结果
print(f"采样结果 均值:{sample_df['tokens_length'].mean():.2f},方差:{sample_df['tokens_length'].var():.2f}")

方案B:迭代优化采样(适合精度要求高的场景)

如果快速采样的结果达不到要求,可以用迭代替换的方式逐步逼近目标指标,直到误差低于你设定的阈值:

# 精度阈值,可按需调整
avg_threshold = 0.5
var_threshold = 10
max_iter = 10000

# 初始化采样子集
current_df = df5.sample(n=sample_size, random_state=42)
current_avg = current_df["tokens_length"].mean()
current_var = current_df["tokens_length"].var()

for _ in range(max_iter):
    # 误差达标则退出循环
    if abs(current_avg - target_avg) <= avg_threshold and abs(current_var - target_var) <= var_threshold:
        break
    # 随机选一个待替换的样本和候选替换样本
    drop_idx = np.random.choice(current_df.index)
    add_idx = np.random.choice(df5[~df5.index.isin(current_df.index)].index)
    # 生成新子集
    new_df = current_df.drop(drop_idx).append(df5.loc[add_idx])
    new_avg = new_df["tokens_length"].mean()
    new_var = new_df["tokens_length"].var()
    # 计算损失(可调整权重优先匹配均值或方差)
    current_loss = (current_avg - target_avg) ** 2 + 0.1 * (current_var - target_var) ** 2
    new_loss = (new_avg - target_avg) ** 2 + 0.1 * (new_var - target_var) ** 2
    # 新子集效果更好则保留
    if new_loss < current_loss:
        current_df = new_df
        current_avg = new_avg
        current_var = new_var

# 最终结果导出,仅保留需要的列
final_sample = current_df[["text", "tokens_length"]].reset_index(drop=True)
print(f"优化后结果 均值:{current_avg:.2f},方差:{current_var:.2f}")

注意事项

  • 采样子集大小不要设置过小,样本量越少同时匹配均值和方差的难度越高
  • 如果需要匹配其他基准数据集,直接修改target_avg和target_var的取值即可
  • 迭代过程中可以调整损失函数的权重,优先满足你更看重的统计指标

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 04:06:04