我有一个大型数据集,正在尝试从图像中提取Gabor滤波器。当数据集变得太大时,会出现内存错误。目前我的代码如下:
import numpyfrom sklearn.feature_extraction.image import extract_patches_2dfrom sklearn.decomposition import MiniBatchDictionaryLearningfrom sklearn.decomposition import FastICAdef extract_dictionary(image, patches_size=(16,16), projection_dimensios=25, previous_dictionary=None): """ 获取高维ICA投影图像。 """ patches = extract_patches_2d(image, patches_size) patches = numpy.reshape(patches, (patches.shape[0],-1))[:LIMIT] patches -= patches.mean(axis=0) patches /= numpy.std(patches, axis=0) #dico = MiniBatchDictionaryLearning(n_atoms=projection_dimensios, alpha=1, n_iter=500) #fit = dico.fit(patches) ica = FastICA(n_components=projection_dimensios) ica.fit(patches) return ica
当LIMIT值较大时,会出现内存错误。scikit或其他Python包中有没有ICA的在线(增量)替代方案?
回答:
没有。你真的需要ICA滤波器吗?你有没有试过使用MiniBatchDictionaryLearning
和MiniBatchKMeans
,这些都是在线方法?
另外,虽然不是严格意义上的在线方法,RandomizedPCA
能够处理中等到较大的数据集,如果要提取的成分数量较少的话。