Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python numpy和sklearn PCA返回不同的协方差向量_Python_Numpy_Scikit Learn - Fatal编程技术网

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

Python numpy和sklearn PCA返回不同的协方差向量,python,numpy,scikit-learn,Python,Numpy,Scikit Learn,尝试通过和通过学习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

尝试通过和通过学习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]]
from sklearn.decomposition import PCA
clf = PCA()
clf.fit(d.values)
print(clf.get_covariance())

[[ 0.5549  0.5539]
 [ 0.5539  0.6449]]
sklearn结果

print(np.cov(d, rowvar = 0))
[[ 0.61655556  0.61544444]
 [ 0.61544444  0.71655556]]
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]])

这不应该影响协方差。在本例中,数据已经居中。