我该如何将一个大型(约50Gb)数据集分成训练集、测试集和验证集?
我有一个很大的数据集。现在这些数据是以未压缩的numpy数组文件形式存在的,这些文件是用numpy.array.tofile()
创建的。每个文件大约有100000行,每行有363个浮点数。总共有192个文件,大小加起来是52GB。
我想把这部分数据随机分成五分之一作为测试集,然后再从这个测试集中随机抽取五分之一作为验证集。
另外,我每次只能处理1GB的数据(因为我的GPU内存有限)。所以我需要随机打乱所有数据的顺序,这样就不会因为按照收集的顺序训练数据而引入偏差。
我的主内存是8GB。有没有人能推荐一个方法来随机打乱和划分这个庞大的数据集?
2 个回答
0
你可以给每一行数据分配一个独特的顺序编号,然后随机选择一些这些编号,再把对应的行提取到一个新文件里。
1
我在这个链接找到了我需要的答案:外部洗牌:处理大量数据时的洗牌
简单来说,你需要找到一个足够随机的哈希函数来处理数字(在这个例子中,我使用的是Murmur3),然后再进行外部归并排序。