协方差

定义

随机变量X、Y 的协方差Cov(X,Y):

Cov(X,Y) = E[(X-E(X))(Y-E(Y))]= E[XY] - E[Y]E[X]

从直观上来看,协方差表示的是两个变量总体误差的期望。

意义

表示两个变量的变化趋势一致性大小。

如果X与Y是统计独立的,那么二者之间的协方差就是0。

但是,反过来并不成立。即如果X与Y的协方差为0,二者并不一定是统计独立的。

相关性系数是归一化后的协方差:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-puSHwD9U-1645611629569)(attachment:equation.svg)]

最优线性预测系数A :
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NtoF6v63-1645611629570)(attachment:equation.svg)]

同时也可以得到A:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VF1pCKsL-1645611629571)(attachment:equation.svg)]

性质

(1)Cov(X,Y) = Cov(Y,X);

(2)Cov(aX,bY) = abCov(X,Y),(a,b是常数);

(3)Cov(X1+X2,Y) = Cov(X1,Y)+Cov(X2,Y);

(4)Cov(X+a,Y+b) = Cov(Y,X)

协方差与方差

在统计描述中,方差用来计算每一个变量(观察值)与总体均数之间的差异。=》一个变量误差平方后的期望

协方差表示两个变量总体误差的期望

代码以及协方差矩阵

def Cov(x,y):import numpy as npx = np.array(list(x))y = np.array(list(y))cov = sum(np.multiply(x-np.mean(x), y-np.mean(y)))/(len(x)-1)return cov# or
def Cov(x,y):import numpy as npx = np.array(x)y = np.array(y)X = np.stack((x,y),axis=0)cov = np.cov(X)return cov[0,1]# or
def Cov(x,y):import numpy as npx = np.array(x)y = np.array(y)cov = np.cov(x,y)return cov[0,1]
x = [-2.1, -1,  4.3]
y = [3,  1.1,  0.12]
X = np.stack((x, y), axis=0)
X
array([[-2.1 , -1.  ,  4.3 ],[ 3.  ,  1.1 ,  0.12]])
X.shape
(2, 3)
np.cov(X)
array([[11.71      , -4.286     ],[-4.286     ,  2.14413333]])
np.cov(x, y)
array([[11.71      , -4.286     ],[-4.286     ,  2.14413333]])
np.cov(x)
array(11.71)
np.cov(y)
array(2.14413333)
def Cov(x,y):import numpy as npx = np.array(list(x))y = np.array(list(y))cov = sum(np.multiply(x-np.mean(x), y-np.mean(y)))/(len(x)-1)return covCov(x,y)
-4.2860000000000005
def Cov(x,y):import numpy as npx = np.array(x)y = np.array(y)X = np.stack((x,y),axis=0)cov = np.cov(X)return cov[0,1]
Cov(x,y)
-4.2860000000000005
def Cov(x,y):import numpy as npx = np.array(x)y = np.array(y)cov = np.cov(x,y)return cov[0,1]Cov(x,y)
-4.2860000000000005

其他博主的博文

# -*- coding: utf-8 -*-
"""
@author: 蔚蓝的天空Tom
Talk is cheap, show me the code
Aim:计算两个维度的协方差covariance
"""import numpy as npclass CCovariance(object):'''计算X,Y这俩维度的协方差'''def __init__(self, X, Y):self.X = Xself.Y = Yself.Covariance_way1()self.Covariance_way2()self.Covariance_way3()def Covariance_way1(self):'''协方差公式法计算两个等长向量的协方差convariance'''X,Y = np.array(self.X), np.array(self.Y)meanX, meanY = np.mean(X), np.mean(Y)n = np.shape(X)[0]#按照协方差公式计算协方差,Note:分母一定是n-1covariance = sum(np.multiply(X-meanX, Y-meanY))/(n-1)print('协方差公式法求得的协方差:', covariance)return covariancedef Covariance_way2(self):'''向量中心化方法计算两个等长向量的协方差convariance'''X,Y = np.array(self.X),np.array(self.Y)n = np.shape(X)[0]centrX = X-np.mean(X)centrY = Y-np.mean(Y)convariance = sum(np.multiply(centrX, centrY))/(n-1)print('向量中心化方法求得协方差:', convariance)return convariancedef Covariance_way3(self):'''numpy.conv(X,Y)提供的协方差函数求协方差'''conv = np.cov(self.X, self.Y)print('np.cov(X,Y)求得的X的方差:', conv[0,0])print('np.cov(X,Y)求得的Y的方差:', conv[1,1])print('np.cov(X,Y)求得的X和Y的协方差:',conv[0,1])if __name__=='__main__':X = [10,15,23,11,42,9,11,8,11,21]Y = [15,46,21,9,45,48,21,5,12,20]c = CCovariance(X,Y)
# -*- coding: utf-8 -*-
"""
@author: 蔚蓝的天空Tom
Talk is cheap, show me the code
Aim:计算一个多维度样本的协方差矩阵covariance matrix
Note:协方差矩阵是计算的样本中每个特征之间的协方差,所以协方差矩阵是特征个数阶的对称阵
"""import numpy as npclass CCovMat(object):'''计算多维度样本集的协方差矩阵Note:请保证输入的样本集m×n,m行样例,每个样例n个特征'''def __init__(self, samples):#样本集shpae=(m,n),m是样本总数,n是样本的特征个数self.samples = samplesself.covmat1 = [] #保存方法1求得的协方差矩阵self.covmat2 = [] #保存方法1求得的协方差矩阵#用方法1计算协方差矩阵self._calc_covmat1()#用方法2计算协方差矩阵self._calc_covmat2()def _covariance(self, X, Y):'''计算两个等长向量的协方差convariance'''n = np.shape(X)[0]X, Y = np.array(X), np.array(Y)meanX, meanY = np.mean(X), np.mean(Y)#按照协方差公式计算协方差,Note:分母一定是n-1cov = sum(np.multiply(X-meanX, Y-meanY))/(n-1)return covdef _calc_covmat1(self):'''方法1:根据协方差公式和协方差矩阵的概念计算协方差矩阵'''S = self.samples #样本集na = np.shape(S)[1] #特征attr总数self.covmat1 = np.full((na, na), fill_value=0.) #保存协方差矩阵for i in range(na):for j in range(na):self.covmat1[i,j] = self._covariance(S[:,i], S[:,j])return self.covmat1def _calc_covmat2(self):'''方法2:先样本集中心化再求协方差矩阵'''S = self.samples #样本集ns = np.shape(S)[0] #样例总数mean = np.array([np.mean(attr) for attr in S.T]) #样本集的特征均值print('样本集的特征均值:\n',mean)centrS = S - mean ##样本集的中心化print('样本集的中心化(每个元素将去当前维度特征的均值):\n', centrS)#求协方差矩阵self.covmat2 = np.dot(centrS.T, centrS)/(ns - 1)return self.covmat2def CovMat1(self):return self.covmat1def CovMat2(self):return self.covmat2if __name__=='__main__':'10样本3特征的样本集'samples = np.array([[10, 15, 29],[15, 46, 13],[23, 21, 30],[11, 9,  35],[42, 45, 11],[9,  48, 5],[11, 21, 14],[8,  5,  15],[11, 12, 21],[21, 20, 25]])cm = CCovMat(samples)print('样本集(10行3列,10个样例,每个样例3个特征):\n', samples)print('按照协方差公式求得的协方差矩阵:\n', cm.CovMat1())print('按照样本集的中心化求得的协方差矩阵:\n', cm.CovMat1())print('numpy.cov()计算的协方差矩阵:\n', np.cov(samples.T))

协方差与皮尔森相关性系数相关推荐

  1. 皮尔森相关性系数的计算python代码(一)

    部分代码 from math import sqrt import numpy as np import pandas as pddef excel_one_line_to_list():def mu ...

  2. 皮尔森相关性系数的计算python代码(四)(热力图版)

    部分代码: import numpy import pandas as pd import numpy as np from matplotlib.font_manager import FontPr ...

  3. 皮尔森相关性系数的计算python代码(三)

    部分代码 import os import pandas as pd import numpy as np from scipy.stats import pearsonrdef Pearson(da ...

  4. 相关性分析-皮尔森、斯皮尔曼肯德尔相关性系数

    def person_func(x,y):"""1. person correlation coefficient(皮尔森相关性系数)皮尔逊相关系数通常用r或ρ表示,度量 ...

  5. 斯皮尔 皮尔森 肯德尔_统计学-三大相关性系数 | 生物统计学基础系列课

    原标题:统计学-三大相关性系数 | 生物统计学基础系列课 什么是生物统计学 生物统计学是一种很有用的工具,正确使用这一工具可以使科学研究更加有效,使科学研究可以更加高效的开展.因此,它是每位生物科学工 ...

  6. 数理统计01:线性相关性系数,斯皮尔曼相关性系数计算及详解

    在统计学中有三个可以衡量两个变量之间相关程度的指标:线性相关系数(linear correlation coefficient).斯皮尔曼相关性系数(Spearman's rank correlati ...

  7. 如何理解相关性系数(pearson、spearman、kendall)

    转载: https://www.jianshu.com/p/7697eb89926a 三个相关性系数(pearson, spearman, kendall)反应的都是两个变量之间变化趋势的方向以及程度 ...

  8. 相关性系数及其python实现

    参考文献: 1.python 皮尔森相关系数 https://www.cnblogs.com/lxnz/p/7098954.html 2.统计学之三大相关性系数(pearson.spearman.ke ...

  9. 机器学习——统计学三大相关性系数(pearson、spearman、kendall)

    应用场景 当想要比较变量间变化趋势时,可以先做出散点图从视觉上判断是否存在相关性(趋势一致).然后再采用相关性分析从统计角度衡量. 1. pearson correlation coefficient ...

最新文章

  1. 《数据库原理与应用(第3版)》——习题
  2. 自学python有哪些方向-机械想自学python可以学习哪个方向?
  3. c++基础_特殊回文数
  4. 什么原因导致百度搜索比Google要少很多?
  5. cmd 进入mysql-python_MySQL在cmd和python下的常用操作
  6. mojing SDK根据坐标进行移动
  7. RabbitMQ之Topic交换器模式开发
  8. 腾讯地图api_为你的小程序插上地图的“翅膀”,腾讯位置服务亮相阿拉丁大会...
  9. 【Java8 新特性 3】java8 supplier
  10. 将class文件反编译成java文件-(纯实际操作)
  11. foo bar foobar?
  12. 头条python后台一面凉经
  13. UED团队规范设计参考及建议
  14. 22. 将文件映射到内存
  15. Java in Tarena_Spring Note04
  16. css 文本背景色透明_如何使用CSS将文本或图像的背景设置为透明?
  17. python后端滴滴、网易、老虎证券
  18. Quartz定时任务学习(一)简单任务
  19. 机房收费系统(二)-登录
  20. 重学JavaSE 第11章 : 常用类API、String、日期API、比较器、BigDecimal、System等

热门文章

  1. 程序员如何用技术变现(上)
  2. 按键精灵两种方法对大漠进行注册regsvr32
  3. 互斥锁 、 自旋锁、读写锁和RCU锁
  4. 邓宁-克鲁格心理效应
  5. Android 再按一次退出程序(模拟Home键退出)
  6. 智能机器人无法智能对话_关于智能语音机器人使用中可能出现的问题
  7. 利物浦大学计算机qs排名,利物浦大学qs世界排名
  8. Docker swarm 通过 docker-compose 部署应用
  9. vue-element-admin安装时报错
  10. 【转载】风控-风控策略逻辑