在機器學習模式識別相關算法中,經常需要求樣本的協方差矩陣C和散布矩陣S。如在PCA主成分分析中,就需要計算樣本的散度矩陣,而有的教材資料是計算協方差矩陣。實質上協方差矩陣和散度矩陣的意義就是一樣的,散布矩陣(散度矩陣)前乘以系數1/(n-1)就可以得到協方差矩陣了。
在模式識別的教程中,散布矩陣也稱為散度矩陣,有的也稱為類內離散度矩陣或者類內離差陣,用一個等式關系可表示為:
關系:散度矩陣=類內離散度矩陣=類內離差陣=協方差矩陣×(n-1)
樣本的協方差矩陣乘以n-1倍即為散布矩陣,n表示樣本的個數,散布矩陣的大小由特征維數d決定,是一個為d×d的半正定矩陣。
一、協方差矩陣的基礎
對于二維隨機變量(X,Y)之間的相互關系的數字特征,我們用協方差來描述,記為Cov(X,Y):
那么二維隨機變量(X,Y)的協方差矩陣,為:
對于3維隨機變量(X, Y, Z)的協方差矩陣可表示為:
現實應用中,上式n表示樣本的個數,隨機變量(X, Y,Z)可以看作樣本的特征(屬性);
需要特別說明的是:
(1)協方差矩陣是一個對稱矩陣,且是半正定矩陣,主對角線是各個隨機變量的方差(各個維度上的方差)。
(2)標準差和方差一般是用來描述一維數據的;對于多維情況,而協方差是用于描述任意兩維數據之間的關系,一般用協方差矩陣來表示。因此協方差矩陣計算的是不同維度之間的協方差,而不是不同樣本之間的。
(3)協方差計算過程可簡述為:先求各個分量的均值E(Xi)和E(Xj),然后每個分量減去各自的均值得到兩條向量,在進行內積運算,然后求內積后的總和,最后把總和除以n-1。
例子:設有8個樣本數據,每個樣本有2個特征:(1,2);(3 3);(3 5);(5 4);(5 6);(6 5);(8 7);(9 8),那么可以看作二維的隨機變量(X,Y),即
X=[1 3 3 5 5 6 8 9]
Y=[2 3 5 4 6 5 7 8]
Matlab中可以使用cov(X, Y)函數計算樣本的協方差矩陣,其中X,Y都是特征向量。當然若用X表示樣本的矩陣(X中每一行表示一個樣本,每列是一個特征),那么可直接使用cov(X)計算了。
clear?all
clc
X=[1,2;3?3;3?5;5?4;5?6;6?5;8?7;9?8]%樣本矩陣:8個樣本,每個樣本2個特征
covX=?cov(X)%使用cov函數求協方差矩陣運行結果為:
covX?=
7.1429????4.8571
4.8571????4.0000當然,可以按定義計算,Matlab代碼如下:
clear?all
clc
X=[1,2;3?3;3?5;5?4;5?6;6?5;8?7;9?8]%樣本矩陣:8個樣本,每個樣本2個特征
covX=?cov(X)%使用cov函數求協方差矩陣
%%?按定義求協方差矩陣
meanX=mean(X)??????????%樣本均值
varX=var(X)????????????%樣本方差
dimNum=8;??????????????%s樣本個數ize(X,1)=8
dim1=X(:,1);???????????%特征分量1
dim2=X(:,2);???????????%而在分量2
c11=sum(?(dim1-mean(dim1))?.*?(dim1-mean(dim1))?)?/?(?dimNum-1?);
c21=sum(?(dim2-mean(dim2))?.*?(dim1-mean(dim1))?)?/?(?dimNum-1?);
c12=sum(?(dim1-mean(dim1))?.*?(dim2-mean(dim2))?)?/?(?dimNum-1?);
c22=sum(?(dim2-mean(dim2))?.*?(dim2-mean(dim2))?)?/?(?dimNum-1?);
C33=[c11,c12;c21,c22]%協方差矩陣運行結果:
varX?=
7.1429????4.0000
C33?=
7.1429????4.8571
4.8571????4.0000說明:
從中可以發現,樣本的協方差矩陣的對角線即為樣本的方差。
二、協方差矩陣的幾何意義
為了更好理解協方差矩陣的幾何意義,下面以二維正態分布圖為例(假設樣本服從二維正態分布):
clear?all;clc
mu=[0,0];?????????%?均值向量
C=[5?0;0?1]???????%樣本的協方差矩陣
[V,D]?=eigs(C)????%求協方差矩陣的特征值D和特征向量V
%%?繪制二維正態分布圖
[X,Y]=meshgrid(-10:0.3:10,-10:0.3:10);%在XOY面上,產生網格數據
p=mvnpdf([X(:)?Y(:)],mu,C);%求取聯合概率密度,相當于Z軸
p=reshape(p,size(X));%將Z值對應到相應的坐標上
figure
set(gcf,'Position',get(gcf,'Position').*[1?1?1.3?1])
subplot(2,3,[1?2?4?5])
surf(X,Y,p),axis?tight,title('二維正態分布圖')
subplot(2,3,3)
surf(X,Y,p),view(2),axis?tight,title('在XOY面上的投影')
subplot(2,3,6)
surf(X,Y,p),view([0?0]),axis?tight,title('在XOZ面上的投影');
協方差矩陣C的特征值D和特征向量V分別為:
V?=
1?????0
0?????1
D?=
5?????0
0?????1
說明:
1)均值[0,0]代表正態分布的中心點,方差代表其分布的形狀。
2)協方差矩陣C的最大特征值D對應的特征向量V指向樣本分布的主軸方向。例如,最大特征值D1=5對應的特征向量V1=[1 0]T即為樣本分布的主軸方向(一般認為是數據的傳播方向)。次大特征值D2=1對應的特征向量V2=[0 1]T,即為樣本分布的短軸方向。
協方差矩陣C的特征值D和特征向量V分別為:
V?=
0?????1
1?????0
D?=
5?????0
0?????5
說明:
1)由于協方差矩陣C具有兩個相同的特征值D1=D2=5,因此樣本在V1和V2特征向量方向的分布是等程度的,故樣本分布是一樣圓形。
2)特征值D1和D2的比值越大,數據分布形狀就越扁;當比值等于1時,此時樣本數據分布為圓形。
協方差矩陣C的特征值D和特征向量V分別為:
V?=
0.7071???-0.7071
0.7071????0.7071
D?=
6?????0
0?????4
說明:
1)特征值的比值D1/D2=6/4=1.5>1,因此樣本數據分布形狀是扁形,數據傳播方向(樣本的主軸方向)為V1=[0.7071 0.7071]T
綜合上述,可知:
(1)樣本均值決定樣本分布中心點的位置。
(2)協方差矩陣決定樣本分布的扁圓程度。
是扁還是圓,由協方差矩陣的特征值決定:當特征值D1和D2的比值為1時(D1/D2=1),則樣本分布形狀為圓形。當特征值的比值不為1時,樣本分布為扁形;
偏向方向(數據傳播方向)由特征向量決定。最大特征值對應的特征向量,總是指向數據最大方差的方向(橢圓形的主軸方向)。次大特征向量總是正交于最大特征向量(橢圓形的短軸方向)。
三、協方差矩陣的應用
協方差矩陣(散布矩陣)在模式識別中應用廣泛,最典型的應用是PCA主成分分析了,PCA主要用于降維,其意義就是將樣本數據從高維空間投影到低維空間中,并盡可能的在低維空間中表示原始數據。這就需要找到一組最合適的投影方向,使得樣本數據往低維投影后,能盡可能表征原始的數據。此時就需要樣本的協方差矩陣。PCA算法就是求出這堆樣本數據的協方差矩陣的特征值和特征向量,而協方差矩陣的特征向量的方向就是PCA需要投影的方向。
關于PCA的原理和分析,請見鄙人的博客:
《PCA主成分分析原理分析和Matlab實現方法》:http://blog.csdn.NET/guyuealian/article/details/68487833
如果你覺得該帖子幫到你,還望貴人多多支持,鄙人會再接再厲,繼續努力的~