当前位置: 首页 > news >正文

矩阵运算_矩阵的协方差矩阵/两个矩阵的协方差矩阵_求解详细步骤示例

1. 协方差矩阵定义

        在统计学中,方差是用来度量单个随机变量离散程度,而协方差则一般用来刻画两个随机变量相似程度。

参考: 带你了解什么是Covariance Matrix协方差矩阵 - 知乎

2. 协方差矩阵计算过程

  • 将输入数据A进行中心化处理得到A'。即通过减去每个维度的平均值来实现中心化。
    • 注意:平均值的计算有两种方式,按行计算(如numpy)和按列计算(如matlab),两者结果是不一样的,但原理是一样的,本文采用按行计算平均值为例。
    • 按列计算均值(每一行是一个observation(样本),那么每一列就是一个随机变量(特征))的一个实例:协方差矩阵计算方法_如何算瞬时协方差矩阵-CSDN博客
  • 对于按行计算方式:协方差矩阵等于去中心化后的数据A'乘以A'的转置矩阵, 然后除以 (列数-1)。如果输入数据的维度为(N,M),则该乘积的形状为(N,M)和(M,N),得到一个形状为(N,N)的矩阵。即对于NxM的矩阵A, 去中心化后的矩阵为A', 则协方差等于:

    • cov(A_{N\times M}) =\frac{1}{M-1}A'A'^{T}

3. 示例

一个矩阵A的协方差矩阵计算

设2x4的矩阵A为:

A = \begin{bmatrix} 1 & 2 & 4 & 1\\ 2& 3& 2 & 5 \end{bmatrix}

按行计算均值,意味着每一列是一个observation(样本)那么每一行就是一个随机变量(特征)举例如对于随机变量X,Y, 有四组采样结果(1,2), (2,3), (4,2), (1,5), 写成矩阵相乘的形式为:

\begin{bmatrix} X & Y \end{bmatrix}\begin{bmatrix} 1 & 2 & 4 & 1\\ 2& 3& 2 & 5 \end{bmatrix}

则均值向量为

a = \begin{bmatrix} 2\\ 3 \end{bmatrix}

去中心化后的矩阵A'为:

A' = \begin{bmatrix} -1 & 0 & 2 & -1\\ -1 &0 & -1 & 2 \end{bmatrix}

则协方差矩阵cov(A)为:

cov(A)=\frac{1}{4-1} A'A'^T

cov(A)=\frac{1}{3}\begin{bmatrix} -1 & 0 & 2 & -1\\ -1 &0 & -1 & 2 \end{bmatrix} \begin{bmatrix} -1 & -1\\ 0 & 0\\ 2 & -1\\ -1& 2 \end{bmatrix} = \frac{1}{3} \begin{bmatrix} 6 & -3 \\ -3 & 6 \end{bmatrix} 

所以,

 cov(A) ==\begin{bmatrix} 2 & -1\\ -1 & 2 \end{bmatrix}

代码numpy验算

import numpy as npA = np.array([[1, 2, 4, 1], [2, 3, 2, 5]])
print("======= cov(A) =======")
print(np.cov(A))mean_A = np.mean(A,axis=1,keepdims=True)
print("======= mean_A =======")
print(mean_A)A1 = A - mean_A
print("======= A - mean_A =======")
print(A1)covA =np.matmul(A1, A1.T)/(A1.shape[1]-1)
print("======= covA =======")
print(covA)

输出结果:

两个矩阵A、B的协方差矩阵计算 

设矩阵A (维度NxM), B (维度NxM),去中心化后的矩阵为A', B', 则两个矩阵的协方差矩阵cov(A,B)为:

 cov(A,B) = \frac{1}{M-1}\begin{bmatrix} A'A'^T& A'B'^T \\ B'A'^T& B'B'^T \end{bmatrix}

设A,B (维度为2x4)值分别为:

A = \begin{bmatrix} 1 & 2 & 4 & 1\\ 2& 3& 2 & 5 \end{bmatrix},    B = \begin{bmatrix} 5 & 3& 4 & 4\\ 2& 2& 8 & 8 \end{bmatrix}

则 按行求平均值, 得平均值向量为a=[2,3]^Tb = [4,5]^T, 去中心化后,得到:

A' = \begin{bmatrix} -1 & 0 & 2 & -1\\ -1 &0 & -1 & 2 \end{bmatrix}, B' = \begin{bmatrix} 1 & -1 & 0 & 0\\ -3 & -3 & 3 & 3 \end{bmatrix}

则其协方差矩阵 cov(A,B)(维度为4x4)为

cov(A,B) = \frac{1}{3}\begin{bmatrix} A'A'^T& A'B'^T \\ B'A'^T& B'B'^T \end{bmatrix} = \begin{bmatrix} 2 & -1 & -\frac{1}{3} & 2\\ -1 & 2 & -\frac{1}{3} & 2\\ -\frac{1}{3} & -\frac{1}{3} &\frac{2}{3} & 0 \\ 2& 2& 0 & 12 \end{bmatrix} 

性质: cov(B,A) = (cov(A,B))^T

代码numpy验算


A = np.array([[1, 2, 4, 1], [2, 3, 2, 5]])
B = np.array([[5, 3, 4, 4], [2, 2, 8, 8]])B1 = B - np.mean(B,axis=1,keepdims=True)
A1 = A - np.mean(A,axis=1,keepdims=True)C11 = np.cov(A)
C22 = np.cov(B)
C12 = np.matmul(A1, B1.T)/(B1.shape[1]-1)
C21 = np.matmul(B1, A1.T)/(A1.shape[1]-1)C = np.vstack((np.hstack((C11,C12)),np.hstack((C21,C22))))print("======= np.cov(A,B) =======")
print(np.cov(A,B))print("======= C =======")
print(C)

结果:

参考:

协方差矩阵计算实例_协方差矩阵例子-CSDN博客

协方差的计算方法_协方差计算-CSDN博客 (matlab计算)

带你了解什么是Covariance Matrix协方差矩阵

https://wenku.csdn.net/answer/2408abac75f64f0186adff81be057f99

http://www.lryc.cn/news/236245.html

相关文章:

  • 100天精通Python(可视化篇)——第108天:Pyecharts绘制多种炫酷词云图参数说明+代码实战
  • Spark 平障录
  • 基于一致性算法的微电网分布式控制MATLAB仿真模型
  • Android 10.0 系统修改usb连接电脑mtp和PTP的显示名称
  • 飞鼠异地组网工具实战之访问k8s集群内部服务
  • 【Flink】窗口(Window)
  • 读像火箭科学家一样思考笔记03_第一性原理(上)
  • npm私有云
  • 莹莹API管理系统源码附带两套模板
  • 【Kingbase FlySync】命令模式:安装部署同步软件,实现KES到KES实现同步
  • python使用selenium webDriver时 报错
  • 【ROS2机器人入门到实战】
  • Nuxt3框架局部文件引用外部JS/CSS文件的相关配置方法
  • Docker 可视化面板 ——Portainer
  • Java 教育局民办教育信息服务与监管平台
  • 小迪笔记(1)——操作系统文件下载反弹SHELL防火墙绕过
  • Pytorch D2L Subplots方法对画图、图片处理
  • MATLAB算法实战应用案例精讲-【目标检测】YOLOV5(补充篇)
  • WPF中可视化树和逻辑树的区别是什么
  • 小迪安全笔记(2)——web应用架构搭建漏洞HTTP数据包代理服务器
  • [AI]ChatGPT4 与 ChatGPT3.5 区别有多大
  • node实战——koa实现文件上传
  • C++中的this指针
  • 分析日志的一般套路
  • 使用Flink处理Kafka中的数据_题库子任务_Java语言实现
  • k8s运维管理
  • 【最新Tomcat】IntelliJ IDEA通用配置Tomcat教程(超详细)
  • 安装2023最新版PyCharm来开发Python应用程序
  • 【c++随笔13】多态
  • 数据结构【DS】图的应用