首页 > 解决方案 > 使用 Numpy 获得第一个主成分并减少 PCA 的方差

问题描述

我在这里关注这个例子:https ://machinelearningmastery.com/calculate-principal-component-analysis-scratch-python/

A = array([[1, 2], [3, 4], [5, 6]])
print(A)
# calculate the mean of each column
M = mean(A.T, axis=1)
print(M)
# center columns by subtracting column means
C = A - M
print(C)
# calculate covariance matrix of centered matrix
V = cov(C.T)
print(V)
# eigendecomposition of covariance matrix
values, vectors = eig(V)
print(vectors)
print(values)
# project data
P = vectors.T.dot(C.T)
print(P.T) 

这使:

original data
[[1 2]
 [3 4]
 [5 6]]
column mean
[ 3.  4.]
centered matrix
[[-2. -2.]
 [ 0.  0.]
 [ 2.  2.]]
covariance matrix
[[ 4.  4.]
 [ 4.  4.]]
vectors
[[ 0.70710678 -0.70710678]
 [ 0.70710678  0.70710678]]
values
[ 8.  0.]
projected data
[[-2.82842712  0.        ]
 [ 0.          0.        ]
 [ 2.82842712  0.        ]]

如果我想找到第一个主方向,我是否只需取最大特征向量对应的特征值?因此:[0.70710678, 0.70710678]?

在此基础上,第一个主成分是投影到数据上的最高特征向量吗?就像是:

vectors[:,:1].T.dot(C.T)

这使:

array([[-2.82842712,  0.        ,  2.82842712]]) 

我只是担心我的术语混淆了,或者我过于简单化了。提前致谢!

标签: pythonnumpypca

解决方案


推荐阅读