В прошлом я пытался использовать IncrementalPCA scikit-learn, чтобы уменьшить использование памяти. Я использовал этот ответ в качестве шаблона для моего кода. Но, как сказал @aarslan в разделе комментариев: «Я заметил, что объясненная дисперсия, похоже, уменьшается на каждой итерации». Я всегда подозревал последний for loop
в данном ответе. Итак, мой вопрос: мне нужно для l oop, чтобы поддерживать постоянное использование памяти во время шага partial_fit
, или достаточно batch_size
в одиночку? Ниже вы можете найти код:
import h5py
import numpy as np
from sklearn.decomposition import IncrementalPCA
h5 = h5py.File('rand-1Mx1K.h5')
data = h5['data'] # it's ok, the dataset is not fetched to memory yet
n = data.shape[0] # how many rows we have in the dataset
chunk_size = 1000 # how many rows we feed to IPCA at a time, the divisor of n
icpa = IncrementalPCA(n_components=10, batch_size=16)
for i in range(0, n//chunk_size):
ipca.partial_fit(data[i*chunk_size : (i+1)*chunk_size])