簡體   English   中英

numpy 和 sklearn PCA 返回不同的協方差向量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM