機器視覺中,常用到協方差相關的知識,特別是基於統計框架下的機器學習算法,幾乎無處不在的用到它,因此了解協方差是再基礎不過的了。這里推薦一個很不錯的基礎教程:協方差的意義和計算公式
-
均值和方差
引入協方差之前,先簡單回顧下概率統計中的兩個重要基礎概念:均值和方差。均值,顧名思義就是一堆樣本的平均值,方差就是樣本和均值的平均偏差。對於給定的n個樣本,那么樣本集的均值和方差可以分別這樣來定義:
名稱 |
公式 |
解釋 |
均值 |
\(\bar{X}=\frac{\sum_{i=1}^{n}X_{i}}{n}\) |
樣本的平均值,即樣本的中心點,例如{1 2,3,4}的均值是2.5 |
標准差 |
\(S=\sqrt{\frac{\sum_{i=1}^{n}(X_{i}-\bar{X})^2}{n-1}}\) |
樣本點到中心點的平均距離,所以這里做了平方再開方。注意這里采用了除以n-1,目的是為了用更少的樣本就可以趨近於總體的標准差。例如{1 2,3,4}的標准差 |
方差 |
\(S^2=\frac{\sum_{i=1}^{n}(X_{i}-\bar{X})^2}{n-1}\) |
樣本點到中心點的平均距離的平方,用平方是為了方便計算,因為是一一對應的正相關關系,所以意義和標准差一樣,免去了開放帶來的復雜計算。 |
均值(中心點)和方差的圖示如下所示:
-
協方差和相關系數
方差描述的是一維數據上的統計量。而在實際中,還會考察兩個統計量之間的相關性,例如人的身高和兩手撐開的長度是否由相關性?男人越壞是不是女人就越愛?那這個時候就可以用協方差來刻畫了。
以男人越壞女人越愛為例,假設采訪了二十對情侶,得到下面的數據:
男人壞的程度 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
女人愛的程度 |
2.58 |
3.39 |
3.75 |
4.80 |
4.93 |
5.91 |
5.68 |
6.26 |
6.64 |
7.13 |
8.36 |
8.57 |
9.04 |
9.14 |
10.35 |
10.62 |
10.85 |
11.51 |
11.90 |
12.07 |
我們畫個二維點圖,很容易發現,他們是線性相關的,如下圖所示:
直觀上,如果男人壞的程度和女人愛的程度如果是成正比例的話,就是說如果男人越壞女人越愛男人,那么我們就認為他們是正相關的,如果是反比例的話,就是說男人越壞女人越不愛男人,那么我們就認為他們是負相關的。如果女人愛不愛男人和男人壞不壞沒有任何毛關系的話,那么我們就是他們兩個變量是毫無關系的,我們也認為他們是獨立的,因為互不搭杠嘛。那怎么來描述正相關呢?我們可以這么想,如果兩個變量偏離中心點的變化量越一致,那么我們就可以認為他們越正相關的;同樣地如果兩個變量偏離中心點的變化量剛好相反,那么就是負相關了。根據這個思想我們可以仿照方差來定義協方差:
名稱 |
公式 |
解釋 |
方差 |
\(var(X)=\frac{\sum_{i=1}^{n}(X_{i}-\bar{X})^2}{n-1}\) |
樣本點到中心點的平均距離的平方,用平方是為了方便計算,因為是一一對應的正相關關系,所以意義和標准差一樣,免去了開放帶來的復雜計算。 |
協方差 |
\(cov(X,Y)=\frac{\sum_{i=1}^{n}(X_{i}-\bar{X})(Y_{i}-\bar{Y})}{n-1}\) |
兩個樣本的相關性刻畫 |
從定義不難發現,當兩個變量正相關性很強的時候,那么其協方差就越大,當兩個變量負相關越強,那么其協方差是負數且很小;當兩個變量關系不大的時候,那么他們協方差趨於0,越接近獨立。根據上面表格的數據,我們計算相應的協方差,其結果為:33.2500,為正,說明是正相關的。需要注意的是,協方差的定義是沒有將數據進行歸一化的,即兩個變量的數據如果尺度不一樣,就會導致其中的變量影響大於另外一個變量,例如一個變量的取值范圍為0.1-1,另一個變量取值范圍為100-1000,這樣后者在計算中起到決定作用,而前者影響則微乎其微,導致協方差不能反應相關性的強弱程度。下面的這段代碼解釋了這種情況:
value = []; for w = 0:5:50 x = 1:50; y = roundn(0.1*x+2+w*rand(1,size(x,2)),-2); plot(x,y,'bo'); value = [value sum((x(1,:)-mean(x(1,:))).*(y(1,:)-mean(y(1,:))))/(size(x,2))]; value = roundn(value,-2); end
結果為:
隨着噪聲的增加,協方差並不能刻畫相關性的強弱。其實是因為數據沒有歸一化而導致的結果,這就引入了相關系數的定義,如下:
\(coef(X,Y)=\frac{\frac{\sum_{i=1}^{n}(X_{i}-\bar{X})(Y_{i}-\bar{Y})}{n-1}}{\sqrt{\frac{\sum_{i=1}^{n}(X_{i}-\bar{X})^2}{n-1}}\sqrt{\frac{\sum_{i=1}^{n}(Y_{i}-\bar{Y})^2}{n-1}}}\)
\(coef(X,Y)=\frac{\sum_{i=1}^{n}(X_{i}-\bar{X})(Y_{i}-\bar{Y})}{\sqrt{\sum_{i=1}^{n}(X_{i}-\bar{X})^2}\sqrt{\sum_{i=1}^{n}(Y_{i}-\bar{Y})^2}}\)
再來看下上面的例子用相關系數得到的結果
代碼如下:
value = []; coef = []; for w = 0:5:50 x = 1:50; y = x+w*rand(1,size(x,2)); plot(x,y,'bo'); coef = [coef sum((x(1,:)-mean(x(1,:))).*(y(1,:)-mean(y(1,:))))/(std(x)*std(y)*(size(x,2)))]; coef = roundn(coef,-2); end
結果為:
由此可見隨着噪聲的增加,相關性會降低,而相關系數的值也會趨於0.相關性越強,則相關系數的值會越大。
從定義可知,協方差和相關系數具有交換性,即
\( cov(X,Y) = cov(Y,X) \)
\( coef(X,Y) = coef(Y,X) \)
當兩個變量相同時,協方差等於方差,即
\( cov(X,Y) = s^{2},if \; X=Y \)
實際上,如果數據歸一化后,得到的協方差,是具有相關系數相同的性質,也可以用來刻畫相關性的強弱。
3、協方差矩陣
當一個樣本含有很多變量的時候,如何刻畫兩兩樣本之間的相關性呢?需要使用協方差矩陣來表示,就是用一個矩陣把兩兩變量之間的協方差存儲起來而已,由於協方差具有交換性,只需
要計算上三角或下三角的協方差即可,計算量為\( \frac{n!}{(n-2)!*2}\) ,協方差矩陣定義如下:
\(C=\begin{bmatrix}
c_{11} &\cdots & c_{1n}\\
\vdots &\ddots & \vdots \\
c_{n1} &\cdots & c_{nn}
\end{bmatrix}\)
其中\(c_{i,j} = cov(X^{i},Y^{j}) \)。顯而易見地協方差矩陣是一個對角矩陣 ,因此是一個正定矩陣,通常也可逆;對角線上的元素是各個維度上方差。
因此:協方差矩陣是維度之間的協方差構成的矩陣,而不是樣本個數構成的,因此拿到樣本時,需要搞清楚維度是行還是列。
關於協方差矩陣的示例和意義,請參考資料:協方差矩陣的實例與意義
4、參考文獻