我有一个相当大的数据集,我想分解,但太大,无法加载到内存中。研究我的选择,似乎sklearn's IncrementalPCA是一个不错的选择,但我无法弄清楚如何使它工作。如何使用sklearn的IncrementalPCA partial_fit
我可以在数据加载就好:
f = h5py.File('my_big_data.h5')
features = f['data']
而且从this example,看来我需要决定我想从它读什么大小的块:
num_rows = data.shape[0] # total number of rows in data
chunk_size = 10 # how many rows at a time to feed ipca
然后我就可以创建我的IncrementalPCA,逐块传输数据,部分适合它(也来自上面的示例):
ipca = IncrementalPCA(n_components=2)
for i in range(0, num_rows//chunk_size):
ipca.partial_fit(features[i*chunk_size : (i+1)*chunk_size])
这一切都没有错误,但我不知道下一步该怎么做。我怎么实际上做降维和获得一个新的numpy数组我可以进一步操作和保存?
编辑
上面的代码是对我的数据的一个较小的子测试 - 作为@ImanolLuengo正确地指出,这将是更好的方式来使用的最终代码尺寸更大数量和块大小。
所以我根本不使用'partial_fit'?我的理解(这可能是错误的)是,你首先通过数据执行'partial_fit',然后转换整个事情。 – JeffThompson
@JeffThompson是的,你必须这样做,那就是你已经完成了部分合体。你必须首先适应你的所有数据,然后完成所有数据。 –
我明白了 - 所以你必须在'partial_fit'循环后再次循环块? – JeffThompson