協方差的定義
對於一般的分布,直接代入e(x)之類的就可以計算出來了,但真給你乙個具體數值的分布,要計算協方差矩陣,根據這個公式來計算,還真不容易反應過來。網上值得參考的資料也不多,這裡用乙個例子說明協方差矩陣是怎麼計算出來的吧。
記住,x、y
是乙個列向量,它表示了每種情況下每個樣本可能出現的數。比如給定
則x表示x軸可能出現的數,y表示y軸可能出現的。注意這裡是關鍵,給定了4個樣本,每個樣本都是二維的,所以只可能有x和y兩種維度。所以
用中文來描述,就是:
協方差(i,j)=(第i列的所有元素-第i列的均值)·(第j列的所有元素-第j列的均值)
注:這裡(第i列的所有元素-第i列的均值)形成的行向量·(第j列的所有元素-第j列的均值)形成的行向量的轉置
,再將該點乘結果做平均(在這裡,就是除以4)才得到協方差(i,j),但是,由於下面的例子中要求的協方差陣中各個協方差均需要取相同的平均4,因此該協方差求解中省去了求平均的過程,最後求的協方差陣與未求平均的協方差陣擁有相同的特徵向量(特徵根變為原來的1/4),所以不做平均也可以
這裡只有x,y兩列,所以得到的協方差矩陣是2x2的矩陣,下面分別求出每乙個元素:
所以,按照定義,給定的4個二維樣本的協方差矩陣為:
(注:實際python求解該x,y的協方差陣也是得到其各個元素的1/4),如下圖所示
)用matlab計算這個例子
z=[1,2;3,6;4,2;5,2]
cov(z)
ans =
2.9167 -0.3333
-0.3333 4.0000
可以看出,matlab計算協方差過程中還將元素統一縮小了3倍。所以,協方差的matlab計算公式為:
協方差(i,j)=(第i列所有元素-第i列均值)*(第j列所有元素-第j列均值)/(樣本數-1)
下面在給出乙個4維3樣本的例項,注意4維樣本與符號x,y就沒有關係了,x,y表示兩維的,4維就直接套用計算公式,不用x,y那麼具有迷惑性的表達了。
常見的4維樣本的計算如下:
(3)與matlab計算驗證
z=[1 2 3 4;3 4 1 2;2 3 1 4]
cov(z)
ans =
1.0000 1.0000 -1.0000 -1.0000
1.0000 1.0000 -1.0000 -1.0000
-1.0000 -1.0000 1.3333 0.6667
-1.0000 -1.0000 0.6667 1.3333
可知該計算方法是正確的。我們還可以看出,協方差矩陣都是方陣,它的維度與樣本維度有關(相等)。參考2中還給出了計算協方差矩陣的源**,非常簡潔易懂,在此感謝一下!
參考:
[1]
[2]
詳解協方差與協方差矩陣
協方差的定義 對於一般的分布,直接代入 e x 之類的就可以計算出來了,但真給你乙個具體數值的分布,要計算協方差矩陣,根據這個公式來計算,還真不容易反應過來。網上值得參考的資料也不多,這裡用乙個例子說明協方差矩陣是怎麼計算出來的吧。記住,x y 是乙個列向量,它表示了每種情況下每個樣本可能出現的數。...
詳解協方差與協方差矩陣
來自 協方差的定義 對於一般的分布,直接代入e x 之類的就可以計算出來了,但真給你乙個具體數值的分布,要計算協方差矩陣,根據這個公式來計算,還真不容易反應過來。網上值得參考的資料也不多,這裡用乙個例子說明協方差矩陣是怎麼計算出來的吧。記住,x y是乙個列向量,它表示了每種情況下每個樣本可能出現的數...
詳解協方差與協方差矩陣
協方差的定義 對於一般的分布,直接代入e x 之類的就可以計算出來了,但真給你乙個具體數值的分布,要計算協方差矩陣,根據這個公式來計算,還真不容易反應過來。網上值得參考的資料也不多,這裡用乙個例子說明協方差矩陣是怎麼計算出來的吧。記住,x y是乙個列向量,它表示了每種情況下每個樣本可能出現的數。比如...