1 定义#
协方差矩阵是用来衡量一组随机变量之间的线性关系的矩阵。我们都知道,对于n个随机变量X1,X2,...,Xn,总体协方差矩阵定义为:
⎡⎢
⎢
⎢
⎢
⎢⎣D(X1)Cov(X1,X2)…Cov(X1,Xn)Cov(X2,X1)D(X2)…Cov(X2,Xn)⋮Cov(Xn,X1)Cov(Xn,X2)…D(Xn)⎤⎥
⎥
⎥
⎥
⎥⎦
其中
D(Xi)=E(X2i)−E(Xi)2Cov(Xi,Xj)=E(XiXj)−E(Xi)E(Xj)
但是对于给定样本,怎么算样本协方差矩阵呢?
假设我们对以上n个随机变量同时进行独立抽样m次,定义第j次抽样获得的n个样本值为xj1,xj2,...,xjn。我们知道样本对总体方差的无偏估计为:
^σ2i=1m−1m∑j=1(xji−¯¯¯¯¯xi)2¯¯¯¯¯xi=1mm∑j=1xji(1)
样本对总体协方差的无偏估计也是类似的:
^Cov(xi,xj)=1m−1m∑k=1(xki−¯¯¯¯¯xi)(xkj−¯¯¯¯¯xj)(2)
所以样本协方差矩阵就是由(1),(2)两个估计量组成的。根据定义,样本协方差矩阵是能计算了,但是这样一个一个算的话时间复杂度是很高的。下面记录直接对矩阵进行的样本协方差矩阵的计算。
2 计算#
对于n个随机变量X1,X2,...,Xn,同时进行m次独立抽样,将获得的样本值排列为矩阵:
A=⎡⎢
⎢
⎢
⎢
⎢⎣x11x12…x1nx21x22…x2n⋮xm1xm2…xmn⎤⎥
⎥
⎥
⎥
⎥⎦
其中每行为某次抽样获得的n个随机变量的样本值,每列为某个随机变量在m次抽样种获得的样本值。
首先计算所有随机变量的均值,获得向量:
μ=1mm∑i=1Ai:
然后对A和μ做差(向量广播到矩阵后做差),获得所有样本减去均值后的矩阵
B=⎡⎢
⎢
⎢
⎢
⎢⎣x11−¯¯¯¯¯x1x12−¯¯¯¯¯x2…x1n−¯¯¯¯¯¯xnx21−¯¯¯¯¯x1x22−¯¯¯¯¯x2…x2n−¯¯¯¯¯¯xn⋮xm1−¯¯¯¯¯x1xm2−¯¯¯¯¯x2…xmn−¯¯¯¯¯¯xn⎤⎥
⎥
⎥
⎥
⎥⎦
最后计算BTB再除以m−1获得协方差矩阵。为了便于理解理解,下面列出BTB:
BTB=⎡⎢
⎢
⎢
⎢
⎢⎣⎡⎢
⎢
⎢
⎢
⎢⎣x11−¯¯¯¯¯x1x12−¯¯¯¯¯x2⋮x1n−¯¯¯¯¯¯xn⎤⎥
⎥
⎥
⎥
⎥⎦⎡⎢
⎢
⎢
⎢
⎢⎣x21−¯¯¯¯¯x1x22−¯¯¯¯¯x2⋮x2n−¯¯¯¯¯¯xn⎤⎥
⎥
⎥
⎥
⎥⎦…⎡⎢
⎢
⎢
⎢
⎢⎣xm1−¯¯¯¯¯x1xm2−¯¯¯¯¯x2⋮xmn−¯¯¯¯¯¯xn⎤⎥
⎥
⎥
⎥
⎥⎦⎤⎥
⎥
⎥
⎥
⎥⎦⎡⎢
⎢
⎢
⎢
⎢
⎢⎣[x11−¯¯¯¯¯x1x12−¯¯¯¯¯x2…x1n−¯¯¯¯¯¯xn][x21−¯¯¯¯¯x1x22−¯¯¯¯¯x2…x2n−¯¯¯¯¯¯xn]⋮[xm1−¯¯¯¯¯x1xm2−¯¯¯¯¯x2…xmn−¯¯¯¯¯¯xn]⎤⎥
⎥
⎥
⎥
⎥
⎥⎦
矩阵内部的括号表示某次抽样。以上这些操作用Python的numpy库都是很容易实现的。
实际上,BTB就是n个随机变量抽样m次获得的n个m维向量标准化后两两内积所形成的n维格拉姆矩阵。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!