發表於 2017-12-05 15:58:43
在統計學與概率論中,協方差矩陣的每個元素是各個向量元素之間的協方差,是從標量隨機變量到高維度隨機向量的自然推廣。
矩陣中的數據按行排列與按列排列求出的協方差矩陣是不同的,這裡默認數據是按行排列。即每一行是一個observation(or sample),那麼每一列就是一個隨機變量。
協方差矩陣:
協方差矩陣的維度等於隨機變量的個數,即每一個 observation 的維度。在某些場合前邊也會出現 1 / m,而不是 1 / (m - 1)。
協方差矩陣計算公式在統計學與概率論中,協方差矩陣是一個矩陣,其每個元素是各個向量元素之間的協方差。這是從標量隨機變量到高維度隨機向量的自然推廣。
舉個例子,矩陣 X 按行排列:
1. 求每個維度的平均值
2. 將 X 的每一列減去平均值
其中:
3. 計算協方差矩陣
注意:
有時候在書上或者網上會看到這樣的公式,協方差矩陣 Σ:
這裡之所以會是 X * X『 是因為原始數據集 X 是按列排列的,即:
另外在 opencv 文檔中關於計算協方差矩陣的 calcCovarMatrix 函數的說明我覺得是有問題的,
在正常的 CV_COVAR_NORMAL 狀態下它給出的 cov = scale * X * X』,而這個定義僅僅是在數據按列排列下才有的,即 CV_COVAR_COLS.
URL:http://docs.opencv.org/modules/core/doc/operations_on_arrays.html?highlight=calccovarmatrix#cv.CalcCovarMatrix
這裡有一個按列排列的 PCA 教程,可以參考一下:
http://ufldl.stanford.edu/wiki/index.php/%E4%B8%BB%E6%88%90%E5%88%86%E5%88%86%E6%9E%90
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)
打開APP閱讀更多精彩內容
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容圖片侵權或者其他問題,請聯繫本站作侵刪。 侵權投訴