[线性代数] 如何求协方差矩阵

1. 协方差定义

X、Y 是两个随机变量,X、Y 的协方差 cov(X, Y) 定义为:

其中:

 、

2. 协方差矩阵定义

矩阵中的数据按行排列与按列排列求出的协方差矩阵是不同的,这里默认数据是按行排列。即每一行是一个observation(or sample),那么每一列就是一个随机变量。

协方差矩阵:

协方差矩阵的维度等于随机变量的个数,即每一个 observation 的维度。在某些场合前边也会出现 1 / m,而不是 1 / (m - 1).

3. 求解协方差矩阵的步骤

举个例子,矩阵 X 按行排列:



1. 求每个维度的平均值




2. 将 X 的每一列减去平均值




其中:


3. 计算协方差矩阵






注意
有时候在书上或者网上会看到这样的公式,协方差矩阵 Σ:


这里之所以会是 X * X' 是因为原始数据集 X 是按列排列的,即:



另外在 opencv 文档中关于计算协方差矩阵的 calcCovarMatrix 函数的说明我觉得是有问题的,
在正常的 CV_COVAR_NORMAL 状态下它给出的 cov = scale * X * X',而这个定义仅仅是在数据按列排列下才有的,即 CV_COVAR_COLS.

这里有一个按列排列的 PCA 教程,可以参考一下:


matlab 代码:
clear; clc;

% data are stored as rows.
X = [1 2 3;
     3 1 1];
 
Y = X;
 
[rows, cols] = size(X);
 
% get mean of each dimension(each column).
meanMatrix = mean(X);

% X - mean.
X = X - ones(rows, 1) * meanMatrix;

% get the cov matrix.
covMatrix = 1 / (rows - 1) * (X' * X)

% the given 'cov' function
cov(Y)
 




  • 48
    点赞
  • 155
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值