2015-10-12 60 views
1

試圖通過和通過學習PCA,但有趣的是,當我使用numpy和sklearn時,我得到了不同的協方差矩陣結果。numpy和sklearn PCA返回不同的協方差向量

numpy結果匹配此說明文字here,但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]] 
+0

這應該不會影響協方差。在這個例子中,數據已經居中。 – canyon289

回答

1

因爲對於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]])