使用 SKLearn 和 Python 的 PCA - 使用给定的组件/基本向量计算 PCA 值
PCA with SKLearn and Python - computing PCA values with given components / basis vectors
我想了解 sklearn
在 运行 和 PCA
时在做什么。不幸的是,我对 PCA
了解不多,所以我的理解可能是错误的。
让我们用 iris 数据集做一个简单的例子:
iris = datasets.load_iris()
X = iris.data
pca.fit(X)
Xfit = pca.transform(X)
Xfit
现在看起来像这样:
[[-2.68412563e+00, 3.19397247e-01, -2.79148276e-02, -2.26243707e-03], ...
我认为要获得这些投影值,我基本上只需要构建原始值和转置的 basic vectors
/components
的 点积 .所以我假设这应该给出相同的结果:
np.dot(X, np.transpose(pca.components_))
但不幸的是这是结果:
[[ 2.81823951e+00, 5.64634982e+00, -6.59767544e-01, 3.10892758e-02],..
所以我的问题是:
为什么会有差异?我认为来自 pca.transform(X)
的那个是正确的,但我做错了什么,但是如果我只有组件并且想自己计算主成分值,我需要做什么?
好的,我找到问题了。在应用 np.dot
之前,我必须 mean-center 原始值。因此,当仅使用 pd.DataFrame
时,mean-center 变得非常容易,它看起来像这样:
np.dot(pd.DataFrame(X)-pd.DataFrame(X).mean(), np.transpose(pd.DataFrame(pca.components_)))
并且结果与使用拟合函数时的结果相同:
[[-2.68412563e+00, 3.19397247e-01, -2.79148276e-02, -2.26243707e-03], ...
我想了解 sklearn
在 运行 和 PCA
时在做什么。不幸的是,我对 PCA
了解不多,所以我的理解可能是错误的。
让我们用 iris 数据集做一个简单的例子:
iris = datasets.load_iris()
X = iris.data
pca.fit(X)
Xfit = pca.transform(X)
Xfit
现在看起来像这样:
[[-2.68412563e+00, 3.19397247e-01, -2.79148276e-02, -2.26243707e-03], ...
我认为要获得这些投影值,我基本上只需要构建原始值和转置的 basic vectors
/components
的 点积 .所以我假设这应该给出相同的结果:
np.dot(X, np.transpose(pca.components_))
但不幸的是这是结果:
[[ 2.81823951e+00, 5.64634982e+00, -6.59767544e-01, 3.10892758e-02],..
所以我的问题是:
为什么会有差异?我认为来自 pca.transform(X)
的那个是正确的,但我做错了什么,但是如果我只有组件并且想自己计算主成分值,我需要做什么?
好的,我找到问题了。在应用 np.dot
之前,我必须 mean-center 原始值。因此,当仅使用 pd.DataFrame
时,mean-center 变得非常容易,它看起来像这样:
np.dot(pd.DataFrame(X)-pd.DataFrame(X).mean(), np.transpose(pd.DataFrame(pca.components_)))
并且结果与使用拟合函数时的结果相同:
[[-2.68412563e+00, 3.19397247e-01, -2.79148276e-02, -2.26243707e-03], ...