2013-01-01 87 views
4

我有一個很大的數據集,並試圖從圖像中獲取gabor過濾器。當數據集變得太大時會出現內存錯誤。 到目前爲止,我有這樣的代碼:ICA在線學習scikit中的大型數據集

import numpy 
from sklearn.feature_extraction.image import extract_patches_2d 
from sklearn.decomposition import MiniBatchDictionaryLearning 
from sklearn.decomposition import FastICA 

def extract_dictionary(image, patches_size=(16,16), projection_dimensios=25, previous_dictionary=None): 
    """ 
    Gets a higher dimension ica projection image. 

    """ 
    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?

回答

4

不,沒有。你真的需要ICA過濾器嗎?試過MiniBatchDictionaryLearningMiniBatchKMeans是在線嗎?

此外,雖然不嚴格在線RandomizedPCA如果要提取的組件數量很小,就能夠處理中等到較大的數據。

+0

是的,我試過了,它的工作原理。 (它在上面的代碼中被註釋掉了)。只是想要一些圖像處理學習gabor濾波器的ICA的很好的屬性。 – RafaelLopes

+0

你可以試試minbatch字典學習。 –

+1

在scikit-learn(還沒有?)中目前*未實現的另一種替代方法是使用[RICA](http://cs.stanford.edu/~jngiam/papers/LeKarpenkoNgiamNg2011)而不是傳統的ICA。參考實現使用批量優化器(LBFGS),但如果真的需要外部學習,可能會使用SGD。 – ogrisel