1.前言
看論文的時候又看到了協(xié)方差矩陣這個破東西,以前看圖像處理的書籍的時候就特困擾,沒想到現(xiàn)在還是搞不清楚,索性開始查協(xié)方差矩陣的資料,惡補之后決定馬上記錄下來。
2.拼出身—統(tǒng)計學(xué)的定義
學(xué)過概率統(tǒng)計的孩子都知道,統(tǒng)計里最基本的概念就是樣本的均值,方差,或者再加個標準差。首先我們給你一個含有n個樣本的集合X={X1,…,Xn},依次給出這些概念的公式描述,這些高中學(xué)過數(shù)學(xué)的孩子都應(yīng)該知道吧,一帶而過。
image.png很顯然,均值描述的是樣本集合的中間點,它告訴我們的信息是很有限的,而標準差給我們描述的則是樣本集合的各個樣本點到均值的距離之平均。以這兩個集合為例,[0,8,12,20]和[8,9,11,12],兩個集合的均值都是10,但顯然兩個集合差別是很大的,計算兩者的標準差,前者是8.3,后者是1.8,顯然后者較為集中,故其標準差小一些,標準差描述的就是這種“散布度”。****之所以除以n-1而不是除以n,是因為這樣能使我們以較小的樣本集更好的逼近總體的標準差,即統(tǒng)計上所謂的“無偏估計”。而方差則僅僅是標準差的平方。
那么問題來了,上面介紹的參量難道不能描述統(tǒng)計學(xué)所有特性嗎?為啥還要搞出一個協(xié)方差出來?
上面幾個統(tǒng)計量看似已經(jīng)描述的差不多了,但我們應(yīng)該注意到,標準差和方差一般是用來描述一維數(shù)據(jù)的,但現(xiàn)實生活我們常常遇到含有多維數(shù)據(jù)的數(shù)據(jù)集,最簡單的大家上學(xué)時免不了要統(tǒng)計多個學(xué)科的考試成績。面對這樣的數(shù)據(jù)集,我們當(dāng)然可以按照每一維獨立的計算其方差,但是通常我們還想了解更多,比如,一個男孩子的猥瑣程度跟他受女孩子歡迎程度是否存在一些聯(lián)系啊,嘿嘿~協(xié)方差就是這樣一種用來度量兩個隨機變量關(guān)系的統(tǒng)計量,我們可以仿照方差的定義:
image.png
來度量各個維度偏離其均值的程度,協(xié)方差可以這么來定義:
那么,協(xié)方差的結(jié)果有什么意義呢?如果結(jié)果為正值,則說明兩個隨機變量是正相關(guān)的(從協(xié)方差可以引出“相關(guān)系數(shù)”的定義),也就是說一個人越猥瑣就越受女孩子歡迎,嘿嘿,那必須的~結(jié)果為負值就說明負相關(guān)的,越猥瑣女孩子越討厭,可能嗎?如果為0,也是就是統(tǒng)計上說的“相互獨立”。
從協(xié)方差的定義上我們也可以看出一些顯而易見的性質(zhì),如:
image.pngimage.png
3.協(xié)方差矩陣的由來
好幾十年前,魯迅爺爺就說過,世界上本沒有路,走的人多了也就有了路。協(xié)方差矩陣也是這樣,好多協(xié)方差湊合到一起就形成了協(xié)方差矩陣。當(dāng)然,數(shù)學(xué)的定義,不能如我這樣隨意。對于一個二維矩陣,每一個因子都可以視為兩個不同隨機變量的關(guān)系,這正好和協(xié)方差矩陣多少有點牽連,因此數(shù)學(xué)家們就把協(xié)方差矩陣引入到了二維矩陣中,衡量各個變量之間的緊密程度(就是關(guān)系度啦)。根據(jù)協(xié)方差的性質(zhì),我們可以類似的推出協(xié)方差矩陣的性質(zhì):
1.協(xié)方差矩陣一定是個對稱的方陣
2.協(xié)方差矩陣對角線上的因子其實就是變量的方差:cov(X,X)=var(X)
這個定義還是很容易理解的,我們可以舉一個簡單的三變量的例子,假設(shè)數(shù)據(jù)集有{x,y,z}{x,y,z}三個維度,則協(xié)方差矩陣為:
image.png再一次可以看出,協(xié)方差矩陣是一個對稱的矩陣,而且對角線是各個變量上的方差。
3.MATLAB實戰(zhàn)練習(xí)
上面涉及的內(nèi)容都比較容易,協(xié)方差矩陣似乎也很簡單,但實戰(zhàn)起來就很容易讓人迷茫了。必須要明確一點,###** 協(xié)方差矩陣計算的是不同維度之間的協(xié)方差,而不是不同樣本之間的**。
為了說明計算原理,不直接調(diào)用Matlab的cov函數(shù):
首先,隨機產(chǎn)生一個103維的整數(shù)矩陣作為樣本集,10為樣本的個數(shù),3為樣本的維數(shù)*。
MySample = fix(rand(10,3)*50)
image.png根據(jù)公式,計算協(xié)方差需要計算均值,那是按行計算均值還是按列呢,我一開始就老是困擾這個問題。前面我們也特別強調(diào)了,協(xié)方差矩陣是計算不同維度間的協(xié)方差,要時刻牢記這一點。樣本矩陣的每行是一個樣本,每列為一個維度,所以我們要按列計算均值。為了描述方便,我們先將三個維度的數(shù)據(jù)分別賦值:
dim1 = MySample(:,1);dim2 = MySample(:,2);dim3 = MySample(:,3);
計算dim1與dim2,dim1與dim3,dim2與dim3的協(xié)方差:
sum( (dim1-mean(dim1)) .* (dim2-mean(dim2)) ) / ( size(MySample,1)-1 ) % 得到 74.5333sum( (dim1-mean(dim1)) .* (dim3-mean(dim3)) ) / ( size(MySample,1)-1 ) % 得到 -10.0889sum( (dim2-mean(dim2)) .* (dim3-mean(dim3)) ) / ( size(MySample,1)-1 ) % 得到 -106.4000
搞清楚了這個后面就容易多了,協(xié)方差矩陣的對角線就是各個維度上的方差,下面我們依次計算:
std(dim1)^2 % 得到 108.3222 std(dim2)^2 % 得到 260.6222 std(dim3)^2 % 得到 94.1778
這樣,我們就得到了計算協(xié)方差矩陣所需要的所有數(shù)據(jù):
| C11=108.3222 | C12=74.5333 | C13=-10.0889 |
| C21=74.5333 | C22=260.6222 | C23=-106.4000 |
| C31=-10.0889 | C32=-106.4000 | C33=94.1778 |調(diào)用Matlab自帶的cov函數(shù)進行驗證:
image.png
4.心得感悟
理解協(xié)方差矩陣的關(guān)鍵就在于牢記它計算的是不同維度之間的協(xié)方差,而不是不同樣本之間,拿到一個樣本矩陣,我們最先要明確的就是一行是一個樣本還是一個維度,心中明確這個整個計算過程就會順流而下,這么一來就不會迷茫了。
其實還有一個更簡單的容易記還不容易出錯的方法:協(xié)方差矩陣一定是一個對稱的方陣,一定是一個對稱的方陣,一定是一個對稱的方陣!!!記住就好啦~