【Numpy学习记录】np.cov详解
写在篇前
在概率论和统计学中,协方差用于衡量两个变量的总体误差。而方差是协方差的一种特殊情况,即当两个变量是相同的情况。其定义的数学形式是: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]
协方差数学形式
公式
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ˉ)
结果形式
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详解相关推荐
- 协方差矩阵数学原理,numpy计算协方差矩阵(np.cov)函数详解与源码剖析
协方差矩阵详解以及numpy计算协方差矩阵(np.cov) 协方差矩阵详解 均值,标准差与方差 由简单的统计学基础知识,我们有如下公式: X ˉ = ∑ i = 1 n X i n \bar X{\r ...
- 三位数组的轴python_关于numpy数组轴的使用详解
概述 按照图一中aixs=0,对aixs=0上下对应的数据进行相加在学习numpy的时候,最难理解的就是轴的概念,我们知道坐标系中有轴的概念,那么两个轴是否有关联呢?为了便于理解,特写此博客进行梳理. ...
- 【强化学习】Sarsa算法详解以及用于二维空间探索【Python实现】
Sarsa算法 Sarsa算法,是基于Q-Learning算法.改动其实很小. 本文工作基于之前的Q-Learning的项目,如果有疑问可以看下面两个问题: [强化学习]Q-Learning算法详解以 ...
- python numpy dtype object_关于Numpy数据类型对象(dtype)使用详解
常用方法 #记住引入numpy时要是用别名np,则所有的numpy字样都要替换 #查询数值类型 >>>type(float) dtype('float64') # 查询字符代码 &g ...
- 深度学习网络模型——RepVGG网络详解、RepVGG网络训练花分类数据集整体项目实现
深度学习网络模型--RepVGG网络详解.RepVGG网络训练花分类数据集整体项目实现 0 前言 1 RepVGG Block详解 2 结构重参数化 2.1 融合Conv2d和BN 2.2 Conv2 ...
- ELK学习笔记之Logstash详解
0x00 Logstash概述 官方介绍:Logstash is an open source data collection engine with real-time pipelining cap ...
- Activiti工作流学习之流程图应用详解
Activiti工作流学习之流程图应用详解 1.目的 了解Activiti工作流是怎样应用流程图的. 2.环境准备 2.1.相关软件及版本 jdk版本:Jdk1.7及以上 IDE:eclipse 数据 ...
- [联邦学习] FedAvg聚合算法详解及代码实现
该文章首发于若绾 [联邦学习] FedAvg聚合算法详解及代码实现,转载请标注出处. 论文原文:Communication-Efficient Learning of Deep Networks fr ...
- numpy之linspace()函数使用详解
numpy之linspace()函数使用详解 linspace() 函数 作为序列生成器, numpy.linspace()函数用于在线性空间中以均匀步长生成数字序列. Numpy通常可以使用nump ...
最新文章
- RESTful API 设计最佳实践
- dict()与{},list()与[]性能对比
- Github | TensorFlow Extended (TFX) 面向机器学习工具
- 2143亿!2018年天猫“双11”成交总额是这样预测的
- 《基于CapsNet的汉字字形表征模型》文章理解
- 以高通camera 申请ion内存看dma-buf
- 显卡 真假测试软件,Gpuinfo beta6 显示卡信息检测工具,主要改进 NV 假卡识别
- 山东大学项目实训十五——开源万能解码框架解决
- php条形码宽度,PHP条形码生成封装类
- 警惕!关于5G的最新骗局!
- MAC 如何隐藏dock栏上你不想看见的图标
- Region Proposal by Guided Anchoring阅读笔记
- 自然底数e究竟“自然”在哪?
- spreadsheetControl
- 概率分布 ---- 均匀分布
- 学习笔记_ncl_读取nc文件中的变量_制作nc文件的方法
- Python_人人车_字体加密的破解
- flash和RAM的关系
- 自动抠图,一个细致都透明头发丝都能抠出来的开源项目
- python中用while语句求1到100的和
热门文章
- Effective Java之检查参数的有效性(三十八)
- canal原理的一些学习-2(HA 模式搭建)
- 大数据图数据库之数据分片
- 【终极办法】Client does not support authentication protocol requested by server; consider upgrading mysql
- 26行代码AC——习题3-2 分子量 (UVa1586,Molar Mass)——解题报告
- [leetcode]101.对称二叉树
- matlab中的图像类型
- xavier初始化_深入解读xavier初始化(附源码)
- css3属性文字换行,CSS3让文本自动换行——word-break属性
- 单片机编程php,STC单片机内部FLASH读写程序(最新整理)