如何在Ludwig中指定单文件数据集的训练、测试行划分范围
针对你需求的Ludwig适配方案
你目前遇到的拆分逻辑问题,Ludwig提供了多种原生配置可以直接匹配,不需要额外编写自定义拆分脚本,按实用性排序分别是:
1. 配置YAML实现固定行顺序拆分
不需要拆分原文件,直接在model_definitions.yml的preprocessing段添加拆分规则,即可实现严格按文件行顺序切分的效果:
preprocessing: split: # 关闭随机打散,保证完全按照CSV原始行顺序处理 shuffle: false # 采用固定顺序切分模式,不做随机采样 mode: fixed # 切分比例顺序为[训练集占比, 验证集占比, 测试集占比] # 按你15500行总规模,前9500行训练、后6000行测试的需求计算占比 probabilities: [0.6129, 0.0, 0.3871]
配置完成后再执行原来的ludwig experiment命令,Ludwig会自动截取前9500行划入训练集,剩余6000行划入测试集,完全符合你的拆分规则。
2. 基于标记列的零计算拆分
如果不想手动计算拆分占比,可以给原CSV加一个临时的拆分标记列,把所有前9500行的标记列值填为train,后6000行的标记列值填为test,然后在配置中指定按该列拆分:
preprocessing: split: # 按指定列的取值自动划分数据集,匹配列值为train/validation/test的样本 mode: column # 替换为你新增的临时拆分标记列的列名 column_name: split_marker
该配置下不需要手动核算行数占比,Ludwig会自动匹配标记值把样本划入对应的数据集,拆分逻辑更直观。
3. 直接传入独立的训练/测试文件
如果对流程可复现性要求较高,可以直接将原CSV拆分为两个独立文件:
- 截取前9500行保存为
train_set.csv - 截取后6000行保存为
test_set.csv
执行实验时替换原有的--dataset参数为独立的数据集路径:
ludwig experiment --training_set train_set.csv --test_set test_set.csv --config_file model_definitions.yml
该方式拆分逻辑完全可控,不受Ludwig默认拆分规则的影响。
注意:你原本直接传入单个
--dataset参数的执行逻辑,默认会开启随机打散,按7:1:2的比例随机切分全量数据。该逻辑一方面会把后6000行无标签的样本随机混入训练集,触发标签缺失的报错;另一方面也会把前9500行的有标签样本随机划到测试集,完全不符合你“全量用有标签样本训练、全量用无标签样本测试”的预期。
内容的提问来源于stack exchange,提问作者user2293224
相关产品推荐
相关产品推荐

