写在篇前

  在概率论和统计学中,协方差用于衡量两个变量的总体误差。而方差是协方差的一种特殊情况,即当两个变量是相同的情况。其定义的数学形式是:Cov(X,Y)=E[(X−E(X))(Y−E(Y))]=E[XY]−E[X]E[Y]Cov(X,Y)=E[(X-E(X))(Y-E(Y))] =E[XY]-E[X]E[Y]Cov(X,Y)=E[(X−E(X))(Y−E(Y))]=E[XY]−E[X]E[Y]

协方差数学形式

  1. 公式

    cov(X,Y)=∑i=1n(Xi−Xˉ)(Yi−Yˉ)n−1cov(X,Y) = \frac{\sum_{i=1}^n(X_i-\bar{X})(Y_i-\bar{Y})}{n-1} cov(X,Y)=n−1∑i=1n​(Xi​−Xˉ)(Yi​−Yˉ)​

  2. 结果形式

C=(cov(1,1)cov(1,2)cov(1,3)⋯cov(1,n)cov(2,1)cov(2,2)cov(2,3)⋯cov(2,n)cov(3,1)cov(3,2)cov(3,3)⋯cov(3,n)⋮⋮⋮⋱⋮cov(n,1)cov(n,2)cov(n,3)⋯cov(n,n))C = \begin{pmatrix} \color{#F00}{cov(1,1)} & \color{#0F0}{cov(1,2)} & \color{#F0F}{cov(1,3)} & \cdots & cov(1,n) \\ \color{#0F0}{cov(2,1)} & \color{#F00}{cov(2,2)} & cov(2,3) & \cdots & cov(2,n) \\ \color{#F0F}{cov(3,1)} & cov(3,2) &\color{#F00}{cov(3,3)} & \cdots & cov(3,n) \\ \vdots & \vdots& \vdots & \ddots & \vdots \\ cov(n,1) & cov(n,2) & cov(n,3) & \cdots & \color{#F00}{cov(n,n)} \end{pmatrix} C=⎝⎜⎜⎜⎜⎜⎛​cov(1,1)cov(2,1)cov(3,1)⋮cov(n,1)​cov(1,2)cov(2,2)cov(3,2)⋮cov(n,2)​cov(1,3)cov(2,3)cov(3,3)⋮cov(n,3)​⋯⋯⋯⋱⋯​cov(1,n)cov(2,n)cov(3,n)⋮cov(n,n)​⎠⎟⎟⎟⎟⎟⎞​

协方差代码形式

函数原型:def cov(m, y=None, rowvar=True, bias=False, ddof=None, fweights=None,aweights=None)

  • m:一维或则二维的数组,默认情况下每一行代表一个变量(属性),每一列代表一个观测
  • y:与m具有一样的形式的一组数据
  • rowvar:默认为True,此时每一行代表一个变量(属性),每一列代表一个观测;为False时,则反之
  • bias:默认为False,此时标准化时除以n-1;反之为n。其中n为观测数
  • ddof:类型是int,当其值非None时,bias参数作用将失效。当ddof=1时,将会返回无偏估计(除以n-1),即使指定了fweights和aweights参数;当ddof=0时,则返回简单平均值。
  • frequency weights:一维数组,代表每个观测要重复的次数(相当于给观测赋予权重)
  • analytic weights:一维数组,代表观测矢量权重。对于被认为“重要”的观察,这些相对权重通常很大,而对于被认为不太重要的观察,这些相对权重较小。如果ddof = 0,则可以使用权重数组将概率分配给观测向量。

代码示例

基本使用

import numpy as np# 计算协方差的时候,一行代表一个特征
# 下面计算cov(T, S, M)
T = np.array([9, 15, 25, 14, 10, 18, 0, 16, 5, 19, 16, 20])
S = np.array([39, 56, 93, 61, 50, 75, 32, 85, 42, 70, 66, 80])
M = np.asarray([38, 56, 90, 63, 56, 77, 30, 80, 41, 79, 64, 88])
X = np.vstack((T, S, M))
# X每行代表一个属性
#  每列代表一个示例,或者说观测
print(np.cov(X))# [[ 47.71969697 122.9469697  129.59090909]
#  [122.9469697  370.08333333 374.59090909]
#  [129.59090909 374.59090909 399.        ]]

  重点:协方差矩阵计算的是不同维度之间的协方差,而不是不同样本之间。拿到一个样本矩阵,首先要明确的就是行代表什么,列代表什么。

fweights

  frequency weights:一维数组,代表每个观测要重复的次数(相当于给观测赋予权重)

T = np.array([9, 15, 25, 14, 10, 18, 0, 16, 5, 19, 16, 20])
S = np.array([39, 56, 93, 61, 50, 75, 32, 85, 42, 70, 66, 80])
M = np.asarray([38, 56, 90, 63, 56, 77, 30, 80, 41, 79, 64, 88])
X = np.vstack((T, S, M))
print(np.cov(X, None, True, False, fweights=[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
# 和上面例子结果一样
# [[ 47.71969697 122.9469697  129.59090909]
#  [122.9469697  370.08333333 374.59090909]
#  [129.59090909 374.59090909 399.        ]]T = np.array([9, 15, 25, 14, 10, 18, 0, 16, 5, 19, 16, 20])
S = np.array([39, 56, 93, 61, 50, 75, 32, 85, 42, 70, 66, 80])
M = np.asarray([38, 56, 90, 63, 56, 77, 30, 80, 41, 79, 64, 88])
X = np.vstack((T, S, M))
print(np.cov(X, None, True, False, fweights=[2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
# 结果变了,就是因为相当于在X中增加了一列[9,39,38].T
# [[ 45.6025641  121.55769231 128.43589744]
#  [121.55769231 381.42307692 389.30769231]
#  [128.43589744 389.30769231 415.76923077]]T = np.array([9, 9, 15, 25, 14, 10, 18, 0, 16, 5, 19, 16, 20])
S = np.array([39, 39, 56, 93, 61, 50, 75, 32, 85, 42, 70, 66, 80])
M = np.asarray([38, 38, 56, 90, 63, 56, 77, 30, 80, 41, 79, 64, 88])
X = np.vstack((T, S, M))
print(np.cov(X, None, True, False))
# 这样就验证了上面的话咯~
# [[ 45.6025641  121.55769231 128.43589744]
#  [121.55769231 381.42307692 389.30769231]
#  [128.43589744 389.30769231 415.76923077]]

aweights

  很遗憾,暂时不知道它的计算方式,等有时间我仔细看看源码怎么算的,再修正!

注意事项

参数y
T = np.array([9, 15, 25, 14, 10, 18, 0, 16, 5, 19, 16, 20])
S = np.array([39, 56, 93, 61, 50, 75, 32, 85, 42, 70, 66, 80])
M = np.asarray([38, 56, 90, 63, 56, 77, 30, 80, 41, 79, 64, 88])
X = np.vstack((T, S, M))# 你会惊奇发现,这个结果和上面的结果一致,这就是参数 m, y,不知道为什么要设置这样一个参数,hhh
print(np.cov(X[0:1], X[1:]))# [[ 47.71969697 122.9469697  129.59090909]
#  [122.9469697  370.08333333 374.59090909]
#  [129.59090909 374.59090909 399.        ]]
和方差的区别
>>> a = [1,2,3,4]  # 当a是一维向量时
>>> import numpy as np
>>> np.cov(a)  # 计算样本方差
array(1.66666667)
>>> np.var(a)  # 计算总体方差
1.25下面是 cov(a) 和 var(a)的区别
>>> 1.666666666666666667*3/4
1.25
>>>

【Numpy学习记录】np.cov详解相关推荐

  1. 协方差矩阵数学原理,numpy计算协方差矩阵(np.cov)函数详解与源码剖析

    协方差矩阵详解以及numpy计算协方差矩阵(np.cov) 协方差矩阵详解 均值,标准差与方差 由简单的统计学基础知识,我们有如下公式: X ˉ = ∑ i = 1 n X i n \bar X{\r ...

  2. 三位数组的轴python_关于numpy数组轴的使用详解

    概述 按照图一中aixs=0,对aixs=0上下对应的数据进行相加在学习numpy的时候,最难理解的就是轴的概念,我们知道坐标系中有轴的概念,那么两个轴是否有关联呢?为了便于理解,特写此博客进行梳理. ...

  3. 【强化学习】Sarsa算法详解以及用于二维空间探索【Python实现】

    Sarsa算法 Sarsa算法,是基于Q-Learning算法.改动其实很小. 本文工作基于之前的Q-Learning的项目,如果有疑问可以看下面两个问题: [强化学习]Q-Learning算法详解以 ...

  4. python numpy dtype object_关于Numpy数据类型对象(dtype)使用详解

    常用方法 #记住引入numpy时要是用别名np,则所有的numpy字样都要替换 #查询数值类型 >>>type(float) dtype('float64') # 查询字符代码 &g ...

  5. 深度学习网络模型——RepVGG网络详解、RepVGG网络训练花分类数据集整体项目实现

    深度学习网络模型--RepVGG网络详解.RepVGG网络训练花分类数据集整体项目实现 0 前言 1 RepVGG Block详解 2 结构重参数化 2.1 融合Conv2d和BN 2.2 Conv2 ...

  6. ELK学习笔记之Logstash详解

    0x00 Logstash概述 官方介绍:Logstash is an open source data collection engine with real-time pipelining cap ...

  7. Activiti工作流学习之流程图应用详解

    Activiti工作流学习之流程图应用详解 1.目的 了解Activiti工作流是怎样应用流程图的. 2.环境准备 2.1.相关软件及版本 jdk版本:Jdk1.7及以上 IDE:eclipse 数据 ...

  8. [联邦学习] FedAvg聚合算法详解及代码实现

    该文章首发于若绾 [联邦学习] FedAvg聚合算法详解及代码实现,转载请标注出处. 论文原文:Communication-Efficient Learning of Deep Networks fr ...

  9. numpy之linspace()函数使用详解

    numpy之linspace()函数使用详解 linspace() 函数 作为序列生成器, numpy.linspace()函数用于在线性空间中以均匀步长生成数字序列. Numpy通常可以使用nump ...

最新文章

  1. RESTful API 设计最佳实践
  2. dict()与{},list()与[]性能对比
  3. Github | TensorFlow Extended (TFX) 面向机器学习工具
  4. 2143亿!2018年天猫“双11”成交总额是这样预测的
  5. 《基于CapsNet的汉字字形表征模型》文章理解
  6. 以高通camera 申请ion内存看dma-buf
  7. 显卡 真假测试软件,Gpuinfo beta6 显示卡信息检测工具,主要改进 NV 假卡识别
  8. 山东大学项目实训十五——开源万能解码框架解决
  9. php条形码宽度,PHP条形码生成封装类
  10. 警惕!关于5G的最新骗局!
  11. MAC 如何隐藏dock栏上你不想看见的图标
  12. Region Proposal by Guided Anchoring阅读笔记
  13. 自然底数e究竟“自然”在哪?
  14. spreadsheetControl
  15. 概率分布 ---- 均匀分布
  16. 学习笔记_ncl_读取nc文件中的变量_制作nc文件的方法
  17. Python_人人车_字体加密的破解
  18. flash和RAM的关系
  19. 自动抠图,一个细致都透明头发丝都能抠出来的开源项目
  20. python中用while语句求1到100的和

热门文章

  1. Effective Java之检查参数的有效性(三十八)
  2. canal原理的一些学习-2(HA 模式搭建)
  3. 大数据图数据库之数据分片
  4. 【终极办法】Client does not support authentication protocol requested by server; consider upgrading mysql
  5. 26行代码AC——习题3-2 分子量 (UVa1586,Molar Mass)——解题报告
  6. [leetcode]101.对称二叉树
  7. matlab中的图像类型
  8. xavier初始化_深入解读xavier初始化(附源码)
  9. css3属性文字换行,CSS3让文本自动换行——word-break属性
  10. 单片机编程php,STC单片机内部FLASH读写程序(最新整理)