对于keras
,ImageDataGenerator
函数似乎有一个zca_whitening,可以直接使用。但如果设置了此选项,则需要在整个数据集X上调用ImageDataGenerator.fit
。因此,这不是一个选项。
对于sklearn
,IncrementalPCA
似乎适用于庞大的数据集,但我不知道如何以生成器方式将PCA旋转到ZCA。
感谢您的帮助!
答案 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,如下所示: