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)
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)