【发布时间】:2019-08-11 07:28:43
【问题描述】:
这个问题是关于在执行 PCA 之后如何去中心和“恢复”较低维度的数据。
我正在用 sklearn 做一个简单的principal component analysis。据我了解,实现应该注意(1)在创建组件时使数据居中,(2)在转换后使数据去中心。但是,在转换数据后,它仍然居中。如何在保留原始数据特征的同时将数据投影到低维空间?鉴于我会对高维数据进行降维,我不会对每个主成分都有适当的均值,如何推导出来?
将 3 个维度减少为 2 个维度:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
X = np.array([[-1, -1, -1], [-2, -1, -1], [-3, -2, -3], [1, 1, 1], [2, 1, 2], [3, 2, 3]]) + 3
X.shape
(6, 3)
fig = plt.figure(figsize=(10, 8), dpi= 80, facecolor='w', edgecolor='k')
ax = fig.add_subplot(111, projection='3d')
ax.scatter(X[:,0], X[:,1],X[:,2], '*')
plt.title('original')
plt.show()
具有 2 个组件的 PCA:
pca = PCA(n_components=2)
pca.fit(X)
X_trans =pca.transform(X)
X_trans.shape
(6, 2)
plt.plot(X_trans[:,0], X_trans[:,1], '*')
plt.show()
在这个阶段我想做的是在这个较低维度中“恢复”我的数据,使数据点的值与原始数据相对应。它仍然应该只有 2 个维度,但不能以均值为中心。
执行逆变换,如下所示,实际上让我回到了 3 维
X_approx = pca.inverse_transform(X_trans)
X_approx.shape
(6, 3)
我想保持二维,但我的数据仍然尽可能接近原始形式,而不是以平均值为中心。
【问题讨论】:
-
我同意这个答案,但我认为您的实际目标不是“恢复”数据,而是以某种方式将手段投射到低维空间中。对吗?
-
@kazemakase:我猜这就是这里正在做的事情。新恢复的数据是但在二维空间中投影的相同数据,因为在拟合期间
n_components=2。 -
将我的措辞改为“去中心化”
-
@Mountain_sheep:我现在看到了问题所在。阅读我的评论和我编辑的答案
标签: python scikit-learn mean pca dimensionality-reduction