数学里的协方差和皮尔逊相关系数到numpy模块的cov()和corrcoef()函数

仅适用本人记录
文档:
https://docs.scipy.org/doc/numpy/reference/generated/numpy.cov.html

https://docs.scipy.org/doc/numpy/reference/generated/numpy.corrcoef.html

重点:
1.方差和样本方差的不同点,除以样本数N还是除以N-1。在numpy函数里可以通过修改bias参数改变。
2.cov(),corrcoef()/协方差,皮尔逊系数都是客观的计算两个变量的相关情况,我们要根据具体的算法去判断我们比较的是哪两个变量,这在具体的算法是不一样的。例如,协方差在PCA计算的是特征之间的而非样本之间的。但是他在其他算法里不一定。又比如协同过滤里用皮尔逊系数表示相似度(这里说明一下在上面第二个链接可以看到协方差和皮尔逊相关系数是类似的,只是相关系数是消除了量纲,使相关系数对用户本身的打分量级不敏感),要看你是基于用户还是基于物品,基于用户就把用户作变量,基于物品就把物品作变量。然后选择相应的rowvar参数值(If rowvar is True (default), then each row represents a variable, with observations in the columns. Otherwise, the relationship is transposed: each column represents a variable, while the rows contain observations.)。
3.cov()的原型为cov(m,y=None,rowvar=True,bias=False,ddof=None,fweights=None,aweights=None),如果cov()用于PCA算法,它默认是将行认为是一个样本,列认为是一个特征(即变量)。可以通过修改rowvar = False来改成行是一个特征。
4.np.cov(X)其实就是把np.cov(x,y)中两个变量所有的维度纵向拼接在一起作为X参与运算,他并不是数学意义上的运算x,y的协方差。cov()的内部已经实现了这种数学意义上的运算,然后将其作为输出的协方差矩阵中的一个对应位置的元素,并不用我们自己去表示和操作。
4.cov(X),如果我们输入的X是一维的,它就是代表一个特征了,它在数学意义上求的是X与他自身的协方差,并不是说就是求的方差,同样不用我们自己去表示和操作。

你可能感兴趣的:(Python)