Stratified Sampler 分层采样 Skill
功能概述
本 skill 面向结构化数据进行分层抽样,可按指定字段拆分样本分布后再进行无放回采样,尽量保持各层比例与总体一致。 采样过程中保留原始字段结构,适用于训练集划分、类别平衡验证、代表性样本抽样等场景。
触发条件
当用户请求以下任务时,应使用此 skill:
- 分层采样
- 类别平衡采样
- 按标签抽样
- 训练集分层划分
核心参数说明
必需参数
--input:输入结构化数据文件路径--output:输出结构化数据文件路径--strata_field:分层字段名
可选参数
--sample_size:总采样数量--sample_ratio:每层采样比例--sample_num:每层固定采样数量--min_samples:每层最小采样数量,默认0--seed:随机种子,默认42--log_file:日志文件路径
输入文件格式
输入文件可以是 JSONL、JSON、CSV、TSV、XLSX、XLS 等结构化数据文件。至少需要包含一个可用于分层的字段。
示例:
{"id": 1, "category": "A", "text": "A-1"}
{"id": 2, "category": "A", "text": "A-2"}
{"id": 3, "category": "B", "text": "B-1"}
使用方法
按总量分层采样
python scripts/run_stratified_sampler.py \
--input data.jsonl \
--output sampled.jsonl \
--strata_field category \
--sample_size 1000 \
--seed 42
按比例分层采样
python scripts/run_stratified_sampler.py \
--input data.csv \
--output sampled.csv \
--strata_field category \
--sample_ratio 0.1 \
--min_samples 1 \
--seed 42
按每层固定数量采样
python scripts/run_stratified_sampler.py \
--input data.xlsx \
--output sampled.xlsx \
--strata_field label \
--sample_num 20 \
--seed 42
输出示例
[OK] Stratified sampling completed
Input: data.csv
Output: sampled.csv
Total records: 12
Strata field: category
Sampled records: 6
Strata distribution:
A: 2/4 (50.0%)
B: 1/3 (33.3%)
C: 2/4 (50.0%)
D: 1/1 (100.0%)
环境要求
- Python 3.x
- pandas
- 读取 Excel 文件时需要对应引擎依赖
注意事项
- 采样是无放回的,每条记录最多被选中一次
- 设置相同的种子可以得到相同的采样结果
sample_size、sample_ratio、sample_num三者只能选择一个min_samples只用于sample_size和sample_ratio模式- 如果某层比例分配后采样数为 0,但该层存在样本且总采样数大于 0,脚本会保底抽取 1 条
- 如果
sample_size大于可用总量,结果会尽量返回全部数据