码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 矩阵运算_矩阵的协方差矩阵/两个矩阵的协方差矩阵_求解详细步骤示例


    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=[12412325]" role="presentation" style="position: relative;">A=[12234215]A=[12412325]

    按行计算均值,意味着每一列是一个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验算

    1. import numpy as np
    2. A = np.array([[1, 2, 4, 1], [2, 3, 2, 5]])
    3. print("======= cov(A) =======")
    4. print(np.cov(A))
    5. mean_A = np.mean(A,axis=1,keepdims=True)
    6. print("======= mean_A =======")
    7. print(mean_A)
    8. A1 = A - mean_A
    9. print("======= A - mean_A =======")
    10. print(A1)
    11. covA =np.matmul(A1, A1.T)/(A1.shape[1]-1)
    12. print("======= covA =======")
    13. 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=[12412325]" role="presentation" style="position: relative;">A=[12234215]A=[12412325],    B = \begin{bmatrix} 5 & 3& 4 & 4\\ 2& 2& 8 & 8 \end{bmatrix}

    则 按行求平均值, 得平均值向量为a=[2,3]^T, b = [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验算

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

    结果:

    参考:

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

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

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

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

  • 相关阅读:
    MybatisPlus乐观锁悲观锁和分页查询逻辑删除
    [git] git diff
    独立站推广引流的8个渠道
    linux服务器超简单安装配置nginx
    Web前端:使用React的10大理由
    北邮《计算机网络》网络层笔记
    100 个基本 Python 面试问题
    【Unity3D赛车游戏制作】设置面板搭建——UGUI复合控件Toggle
    码住这些视频配音软件,一键完成配音
    绝地求生msvcp140.dll丢失的解决方法,教你轻松解决
  • 原文地址:https://blog.csdn.net/shyjhyp11/article/details/134454259
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号