协方差计算方法

网络上爬了一通协方差、协方差矩阵计算方法,留个备注。

假设:

x = [0, 1, 2, 3, 4]
y = [1, 2, 3, 4, 5]

第一种计算方法

N = x, y的size
E(X) = X的平均值
E(Y) = Y的平均值
E(XY) = (XY逐项相乘的和) / N
Cov(X, Y) = E(XY) - E(X)E(Y)
举例:

E(X) = 2.0
E(Y) = 3.0
E(XY) = (0x1+1x2+2x3+3x4+4x5)/5 = 8.0
Cov(X, Y) = 8.0 - 6.0 = 2.0

上面计算方法结果,对应 numpy中的:

import numpy as np

np.cov(x, y, bias=1)

另一种:

在这里插入图片描述

举例

Cov(X, Y) = ((0-2.0)(1-3.0)+(1-2.0)(2-3.0)+(2-2.0)(3-3.0)+(3-2.0)(4-3.0)+(4-2.0)(5-3.0)) / (5 - 1) = 2.5

计算方法结果,对应 numpy中的:

import numpy as np

np.cov(x, y, bias=0)

协方差矩阵

  • 数据矩阵:
    在这里插入图片描述
  • 协方差矩阵:
    在这里插入图片描述
    那么在我们的例子里,c1 就是 x,c2就是 y,自己写好一个cov函数,逐个代入c1, c2就能得到协方差矩阵啦。结果是和 numpy 算出来的一模一样的。
import numpy as np

y = np.array([1,2,3,4,5])
x = np.arange(y.size)

# 第一种
def cov(x, y):
	return (x * y).mean() - x.mean() * y.mean()

# 第二种
def cov2(x, y):
	return ((x - x.mean()) * (y - y.mean())).sum() / (x.size - 1)

matrix = [[cov(x, x), cov(x, y)], [cov(y, x), cov(y, y)]]
print(matrix)

[[2.0, 2.0], [2.0, 2.0]]

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值