我有一個相當大的數據集,我想分解,但太大,無法加載到內存中。研究我的選擇,似乎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