如何在内存有限的巨大图像数据集上应用zca?

时间:2017-11-04 02:59:43

标签: machine-learning deep-learning pca

谷歌告诉我的是:

  1. 对于kerasImageDataGenerator函数似乎有一个zca_whitening,可以直接使用。但如果设置了此选项,则需要在整个数据集X上调用ImageDataGenerator.fit。因此,这不是一个选项。

  2. 对于sklearnIncrementalPCA似乎适用于庞大的数据集,但我不知道如何以生成器方式将PCA旋转到ZCA。

  3. 感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我已经定义了一个在ZCA transformation之后可能有用的功能:

def ZCAtransform(X,IPCA_model): 
      # get the Eigenvectors and Eigenvalues
      U = IPCA_model.components_.transpose()
      S = np.sqrt(IPCA_model.explained_variance_) 
      Xdemeand = (X-np.mean(X,0)).transpose()

      #get the transformed data 
      # Xproj' =  U * diag(1/(S+I*epsilon)) * U' * X_data 
      return (U.dot(np.diag(1/(S+IPCA_model.noise_variance_))).dot(U.transpose()).dot(Xdemeand)).transpose()

Xproj = ZCAtransform(X, ipca)

在Scikit-learn上给定example之后,我能够生成Iris数据集的ZCA,如下所示:

ZCA Whitened PCA