python - 如何将可迭代数据集拆分为训练和测试数据集?
问题描述
我有一个包含所有数据文件的可迭代数据集对象。如何将其拆分为训练集和验证集。我见过一些自定义数据集的解决方案,但 iterable 不支持len()
运算符。
torch.utils.random_sample()
并且torch.utils.SubsetRandomSample()
不工作。
def __init__(self):
bla bla
def __iter__(self):
bla bla
yield batch
解决方案
从技术上讲,您可以设置一个目标比率,然后开始使用该比率将项目随机收集到两个列表中。结果不会是完美的,但它会渐近地保持该比率。
示例是 JavaScript,因为它可以在此处运行:
{
let a = [],
b = [];
function addsample(x) {
if (Math.random() < 0.2) // aims for 20%-80% split
a.push(x);
else
b.push(x);
return {a, b};
}
}
for(let i=0;i<20;i++)
console.log(JSON.stringify(addsample(i)));
如果您运行该片段几次,您会看到输出变化很大,但即使样本量如此之小,它也很明显,通常总是有一个合适的分割可用,a
实际上只有大约 1/4的大小b
。有时它甚至可以精确地结束 4:16,但很多时候它会是别的东西。a
当元素多于b
结尾时,也可能会出现“不走运”的运行。
推荐阅读
- javascript - puppeteer 将变量插入 page.$eval
- django - Django Translation 国际化和本地化:表单、模型、表格
- python - 如何循环遍历数组
- r - 如何在 R markdown 输出中将 R 代码保留在页面内?
- android - 使用 Google Places API 解析 JSON 时出现问题
- c++ - 如何使用 CLion 为节点设置动态重新配置?
- testing - 在 Apache Flink 中测试 RichCoFlatMapFunction
- react-admin - 如何分离表单数据和文件字段
- javascript - 错误:无法在视图目录“public”中查找视图“index”
- python - 基于数据框Python对文件进行排序