【发布时间】:2016-12-12 10:59:13
【问题描述】:
我试图检查我的 PCA 实现,看看我是否理解它,并尝试使用 MNIST 数据集上的 12 个组件进行 PCA(我使用 tensorflow 接口为我进行了规范化)。我得到了sklearn给出的主成分,然后进行了如下重构:
pca = PCA(n_components=k)
pca = pca.fit(X_train)
X_pca = pca.transform(X_train)
# do manual PCA
U = pca.components_
my_reconstruct = np.dot( U.T , np.dot(U, X_train.T) ).T
然后我使用sklearn给出的重构接口尝试重构如下:
pca = PCA(n_components=k)
pca = pca.fit(X_train)
X_pca = pca.transform(X_train)
X_reconstruct = pca.inverse_transform(X_pca)
然后检查错误如下(因为行是数据点和列特征):
print 'X_recon - X_my_reconstruct', (1.0/X_my_reconstruct.shape[0])*LA.norm(X_my_reconstruct - X_reconstruct)**2
#X_recon - X_my_reconstruct 1.47252586279
您可以看到的错误是非零的,实际上非常明显。为什么?他们的重建与我的有何不同?
【问题讨论】:
-
我自己从未实现过 PCA,但您是否考虑过查看源代码。他们的操作非常不同link(这暗示了不同的算法/内部数据结构)。
标签: python machine-learning scipy scikit-learn pca