我有一个35GB的CSV文件(将来会更大),用于Keras中的二进制分类问题。为了训练和测试我的模型,我想将数据分为每个正样本中具有相同比例的训练/测试数据集。像这样:
|Dataset type | Total samples | negative samples | positive instances | |-------------|---------------|------------------|--------------------| |Dataset | 10000 | 8000 | 2000 | |Train | 7000 | 6000 | 1000 | |Test | 3000 | 2000 | 1000 |
由于该数据集太大而无法容纳到内存中,因此我创建了一个自定义生成器来批量加载数据并通过fit_generator
训练模型。因此,我无法应用Scikitlearn的StratifiedShuffleSplit
方法来执行此操作,因为它需要整个数据集而不是仅一部分数据,以保持训练数据集和测试数据集的阳性实例的比例。
编辑:我的数据具有以下形状:11500 x 160000
有人知道我该怎么做吗?
我一步步跟随着林恩的回答。请注意,如果您有大量的列,则将数据帧转换为hdf5可能会失败。因此,直接从一个numpy数组创建hdf5文件
此外,要将数据附加到hdf5文件中,我必须执行以下操作(将maxshape=None
设置为要无限制调整大小的数据集的每个维度。在我的情况下,我调整了数据集的大小以追加无限制具有固定列号的行):
path = 'test.h5'
mydata = np.random.rand(11500, 160000)
if not os.path.exists(path):
h5py.File(path, 'w').create_dataset('dataset', data=mydata, maxshape=(None, mydata.shape[1]))
else:
with h5py.File(path, 'a') as hf:
hf['dataset'].resize(hf['dataset'].shape[0] + mydata.shape[0], axis=0)
hf["dataset"][-mydata.shape[0]:, :] = mydata
答案 0 :(得分:3)
我通常这样做:
router.route('/my-page')
或pytables)pandas.DataFrame.to_hdf()
的东西生成整数索引如果您使用range(dataset.shape[0])
作为生成器,则可以引用我写的here助手来更轻松地重新索引数据。