协方差/相关矩阵/相关系数

通过两组统计数据计算而得的协方差可以评估这两组统计数据的相似程度。

样本

A = [a1, a2, ..., an]
B = [b1, b2, ..., bn]

平均值

ave_a = (a1 + a2 +...+ an)/n
ave_b = (b1 + b2 +...+ bn)/m

离差(用样本中的每一个元素减去平均数,求得数据的误差程度):

dev_a = [a1, a2, ..., an] - ave_a
dev_b = [b1, b2, ..., bn] - ave_b

协方差

协方差可以简单反映两组统计样本的相关性,值为正,则为正相关;值为负,则为负相关,绝对值越大相关性越强。

cov_ab = ave(dev_a x dev_b)
cov_ba = ave(dev_b x dev_a)

案例:计算两组数据的协方差,并绘图观察。

import numpy as np
import matplotlib.pyplot as mp

a = np.random.randint(1, 30, 10)
b = np.random.randint(1, 30, 10)
#平均值
ave_a = np.mean(a)
ave_b = np.mean(b)
#离差
dev_a = a - ave_a
dev_b = b - ave_b
#协方差
cov_ab = np.mean(dev_a*dev_b)
cov_ba = np.mean(dev_b*dev_a)
print(‘a与b数组:‘, a, b)
print(‘a与b样本方差:‘, np.sum(dev_a**2)/(len(dev_a)-1), np.sum(dev_b**2)/(len(dev_b)-1))
print(‘a与b协方差:‘,cov_ab, cov_ba)
#绘图,查看两条图线的相关性
mp.figure(‘COV LINES‘, facecolor=‘lightgray‘)
mp.title(‘COV LINES‘, fontsize=16)
mp.xlabel(‘x‘, fontsize=14)
mp.ylabel(‘y‘, fontsize=14)
x = np.arange(0, 10)
#a,b两条线
mp.plot(x, a, color=‘dodgerblue‘, label=‘Line1‘)
mp.plot(x, b, color=‘limegreen‘, label=‘Line2‘)
#a,b两条线的平均线
mp.plot([0, 9], [ave_a, ave_a], color=‘dodgerblue‘, linestyle=‘--‘, alpha=0.7, linewidth=3)
mp.plot([0, 9], [ave_b, ave_b], color=‘limegreen‘, linestyle=‘--‘, alpha=0.7, linewidth=3)

mp.grid(linestyle=‘--‘, alpha=0.5)
mp.legend()
mp.tight_layout()
mp.show()

相关系数

协方差除去两组统计样本的乘积是一个[-1, 1]之间的数。该结果称为统计样本的相关系数。

# a组样本 与 b组样本做对照后的相关系数
cov_ab/(std_a x std_b)
# b组样本 与 a组样本做对照后的相关系数
cov_ba/(std_b x std_a)
# a样本与a样本作对照   b样本与b样本做对照   二者必然相等
cov_ab/(std_a x std_b)=cov_ba/(std_b x std_a)

通过相关系数可以分析两组数据的相关性:

若相关系数越接近于0,越表示两组样本越不相关。
若相关系数越接近于1,越表示两组样本正相关。
若相关系数越接近于-1,越表示两组样本负相关。

案例:输出案例中两组数据的相关系数。

print(‘相关系数:‘, cov_ab/(np.std(a)*np.std(b)), cov_ba/(np.std(a)*np.std(b)))

相关矩阵

a与a的相关系数  a与b的相关系数

b与a的相关系数  b与b的相关系数

矩阵正对角线上的值都为1。(同组样本自己相比绝对正相关)

# 相关矩阵
numpy.corrcoef(a, b)
# 相关矩阵的分子矩阵
# [[a方差,ab协方差], [ba协方差, b方差]]
numpy.cov(a, b)        
# 协方差
import numpy as np
import matplotlib.pyplot as mp
import datetime as dt
import matplotlib.dates as md

def dmy2ymd(dmy):
  """
  把日月年转年月日
  :param day:
  :return:
  """
  dmy = str(dmy, encoding=‘utf-8‘)
  t = dt.datetime.strptime(dmy, ‘%d-%m-%Y‘)
  s = t.date().strftime(‘%Y-%m-%d‘)
  return s

dates, bhp_closing_prices =   np.loadtxt(‘bhp.csv‘,
             delimiter=‘,‘,
             usecols=(1, 6),
             unpack=True,
             dtype=‘M8[D],f8‘,
             converters={1: dmy2ymd})  # 日月年转年月日
vale_closing_prices =   np.loadtxt(‘vale.csv‘,
             delimiter=‘,‘,
             usecols=(6,),
             unpack=True)  # 因为日期一样,所以此处不读日期
# print(dates)
# 绘制收盘价的折现图
mp.figure(‘COV‘, facecolor=‘lightgray‘)
mp.title(‘COV‘, fontsize=18)
mp.xlabel(‘Date‘, fontsize=14)
mp.ylabel(‘Price‘, fontsize=14)
mp.grid(linestyle=":")

# 设置刻度定位器
# 每周一一个主刻度,一天一个次刻度

ax = mp.gca()
ma_loc = md.WeekdayLocator(byweekday=md.MO)
ax.xaxis.set_major_locator(ma_loc)
ax.xaxis.set_major_formatter(md.DateFormatter(‘%Y-%m-%d‘))
ax.xaxis.set_minor_locator(md.DayLocator())
# 修改dates的dtype为md.datetime.datetiem
dates = dates.astype(md.datetime.datetime)
mp.plot(dates, bhp_closing_prices,
        color=‘dodgerblue‘,
        linewidth=2,
        linestyle=‘-‘,
        alpha=0.8,
        label=‘BHP Closing Price‘)
mp.plot(dates, vale_closing_prices,
        color=‘orangered‘,
        linewidth=2,
        linestyle=‘-‘,
        alpha=0.8,
        label=‘VALE Closing Price‘)
# 计算两只股票收盘价的协方差
# 求均值
mean_bhp = np.mean(bhp_closing_prices)
mean_vale = np.mean(vale_closing_prices)
# 求离差
dev_bhp = bhp_closing_prices - mean_bhp
dev_vale = vale_closing_prices - mean_vale
# 协方差(bhp的离差乘以vale的离差)
cov = (dev_bhp * dev_vale).mean()  # 用的是总体的数据
print(‘cov:‘, cov)  # cov: 3.135577333333333
# 两条图线的相关性
k = cov / np.std(bhp_closing_prices * np.std(vale_closing_prices))
print(k)  # 0.8664988296368301
# 相关系数 = a方差/(a标准差*a标准差)
k = np.corrcoef(bhp_closing_prices, vale_closing_prices)
print(k)
"""
[[1.         0.86649883]
 [0.86649883 1.        ]]
"""
# q秋两组数据的协方差
covm = np.cov(bhp_closing_prices, vale_closing_prices)  # 用的是 样本的数据
print(covm)
"""
[[8.53844379 3.24370069]
 [3.24370069 1.64122023]]
"""

mp.legend()
mp.gcf().autofmt_xdate()
mp.show()

原文地址:https://www.cnblogs.com/maplethefox/p/11466153.html

时间: 2024-10-08 23:11:45

协方差/相关矩阵/相关系数的相关文章

协方差、相关系数---通俗解释

一.协方差的意义 学过概率统计的孩子都知道,统计里最基本的概念就是样本的均值,方差,或者再加个标准差.首先我们给你一个含有n个样本的集合,依次给出这些概念的公式描述,这些高中学过数学的孩子都应该知道吧,一带而过. 均值: 标准差: 方差: 很显然,均值描述的是样本集合的中间点,它告诉我们的信息是很有限的, 而标准差给我们描述的则是样本集合的各个样本点到均值的距离之平均.以这两个集合为例,[0,8,12,20]和[8,9,11,12],两个集合的均值都是10,但显然两个集合差别是很大的,计算两者的

协方差与相关系数

协方差   二维随机变量(X,Y),X与Y之间的协方差定义为: Cov(X,Y)=E{[X-E(X)][Y-E(Y)]} 其中:E(X)为分量X的期望,E(Y)为分量Y的期望 协方差Cov(X,Y)是描述随机变量相互关联程度的一个特征数.从协方差的定义可以看出,它是X的偏差[X-E(X)]与Y的偏差[Y-E(Y)]的乘积的数学期望.由于偏差可正可负,因此协方差也可正可负. l  当协方差Cov(X,Y)>0时,称X与Y正相关 l  当协方差Cov(X,Y)<0时,称X与Y负相关 l  当协方差

度量线性相关性之协方差与相关系数

一.协方差 可以通俗的理解为:两个变量在变化过程中是同方向变化?还是反方向变化?同向或反向程度如何?(你变大,同时我也变大,说明两个变量是同向变化的) 协方差定义:Cov(X,Y)=E[(X-E(X))(Y-E(Y))] 公式简单翻译一下是:如果有X,Y两个变量,每个时刻的"X值与其均值之差"乘以"Y值与其均值之差"得到一个乘积,再对这每时刻的乘积求和并求出均值(这里求"期望"简单认为就是求均值了). 如果X.Y变化方向相同,即当X大于其均值时,

协方差 和 相关系数(剔除了两个变量量纲影响、标准化后的特殊协方差)

. 协方差:用来度量两个随机变量关系的统计量. 公式简单翻译一下是:对于X,Y两个变量,每个时刻的"X值与其均值之差" 乘以 "Y值与其均值之差"得到一个乘积,再对这每时刻的乘积求和并求出均值. 总结一下,如果协方差为正,说明X,Y同向变化,协方差越大说明同向程度越高:如果协方差为负,说明X,Y反向运动,协方差越小说明反向程度越高. 相关系数: 翻译一下:就是用X.Y的协方差除以X的标准差和Y的标准差. 所以,相关系数也可以看成协方差:一种剔除了两个变量量纲影响.标

Mathematics Base - 期望、方差、协方差、相关系数总结

参考:<深度学习500问> 期望 ?在概率论和统计学中,数学期望(或均值,亦简称期望)是试验中每次可能结果的概率乘以其结果的总和.它反映随机变量平均取值的大小. 线性运算: \(E(ax+by+c) = aE(x)+bE(y)+c\) ?推广形式: \(E(\sum_{k=1}^{n}{a_ix_i+c}) = \sum_{k=1}^{n}{a_iE(x_i)+c}\) 函数期望:设\(f(x)\)为\(x\)的函数,则\(f(x)\)的期望为 离散函数: \(E(f(x))=\sum_{k=

numpy中的方差、协方差、相关系数

一.np.var 数学上学过方差: $$D(X)=\sum_{i\in [0,n)} ({x-\bar{x}})^2 $$ np.var实际上是均方差. 函数原型:numpy.var(a, axis=None, dtype=None, out=None, ddof=0, keepdims=<class numpy._globals._NoValue>) 计算张量a在axis轴上的方差 a:一个ndarray,不一定是一维 axis:可取值为None,int,int元组.当取值为None时,会把

协方差和相关系数的关系

参考链接:https://www.zhihu.com/question/20852004 方差: 度量单个随机变量的离散程度,公式如下:  方差表示一位数据数据的离散程度,数值越大说明离均值的差距越大,越离散 协方差: 度量两个随机变量(变化趋势)的相似程度,定义如下: 协方差表示二维数据,表示两个变量在变化的过程中是正相关还是负相关还是不相关 正相关,你变大的同时,我也变大, 说明变量是同向变化,这时候协方差就是正的 负相关,你变大的同时,我变小,说明变量两个变量是反向变化的,这时候协方差就是

《A First Course in Probability》-chaper7-组合分析-期望的性质-协方差、相关系数

在实际的问题中,我们往往想要通过已有的数据来分析判断两个事件的发生是否有相关性.当然一个角度去寻找这两个事件内在的逻辑关系,这个角度需要深究两个事件的本质,而另外一个角度就是概率论提供的简单方法:基于两个事件发生的概率,我们就能够描述两个随机变量的相关性. 其实通过后边的计算式我们能够好的理解协方差为什么在一定程度上表征了两个随机变量的相关性,感性的来讲,E[XY]就是一个实际的X.Y同时发生的事件,而E[X]E[Y]则是我们为了进行比较给出的一个“假想X.Y独立”的模型,比较实际情况与理想情况

概率统计:数学期望,方差,协方差,相关系数,矩