[英]numpy and sklearn PCA return different covariance vector
试图彻底学习 PCA 但有趣的是,当我使用 numpy 和 sklearn 时,我得到了不同的协方差矩阵结果。
numpy 结果与此处的解释性文本相匹配,但 sklearn 的结果与两者不同。
有什么原因吗?
d = pd.read_csv("example.txt", header=None, sep = " ")
print(d)
0 1
0 0.69 0.49
1 -1.31 -1.21
2 0.39 0.99
3 0.09 0.29
4 1.29 1.09
5 0.49 0.79
6 0.19 -0.31
7 -0.81 -0.81
8 -0.31 -0.31
9 -0.71 -1.01
Numpy 结果
print(np.cov(d, rowvar = 0))
[[ 0.61655556 0.61544444]
[ 0.61544444 0.71655556]]
sklearn 结果
from sklearn.decomposition import PCA
clf = PCA()
clf.fit(d.values)
print(clf.get_covariance())
[[ 0.5549 0.5539]
[ 0.5539 0.6449]]
因为对于np.cov
,
默认归一化为(N-1),其中N是给出的观察数(无偏估计)。 如果偏差为1,则归一化为N。
设置bias=1
,结果与PCA
相同:
In [9]: np.cov(df, rowvar=0, bias=1)
Out[9]:
array([[ 0.5549, 0.5539],
[ 0.5539, 0.6449]])
所以我遇到了同样的问题,我认为它返回不同的值,因为协方差的计算方式不同。 根据sklearn 文档, get_covariance()
方法使用噪声方差来获得协方差矩阵。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.