【數學】方差、協方差、協方差矩陣


設有樣本集合\(a=[a_1,a_2,\cdots,a_m]\)。【注意,下文所述的如向量\(a=[a_1,a_2,\cdots,a_m]\),並不意味着就是一個樣本,代表其中有m個特征,而是有m個樣本,由每個樣本的第一個特征組成的向量\(a\),具體看下文就知道了。】

均值(mean)

均值描述的是一個樣本集合的中間點。

\[\mu=\frac 1m \sum_{i=1}^{m}a_i \]

標准差(standard deviation)

標准差可以用來描述單個點到均值的距離的平均值,或者說其描述的就是一種分散程度。【注意:標准差和方差中求平均時除以m-1而不是m,是因為這樣能使我們以較小的樣本集更好的逼近總體的標准差,即統計上所謂的“無偏估計”,若除以m則為有偏】

\[s=\sqrt{ \frac 1{m-1}.\sum_{i=1}^{m} {(a_i-\mu)^2}} \]

  • 如兩個向量[0,5,10]和[4,5,6].兩者均值都是5,但是可以看出兩者有很大的差別,計算得到標准差分別為5和1。也可以明顯看出,后者較前者數據更為集中,所以其標准差也更小。

方差 (variance):單個向量

方差用來描述數值的分散(離散)程度,也即數據偏離均值的程度。某個向量的方差可以用該向量的每個元素減去均值的完全平方再求平均來求得。方差僅僅是標准差的平方,則有

\[s^2=Var(a) = \frac 1{m-1}.\sum_{i=1}^{m} {(a_i-\mu)^2} \]

零均值化(也叫中心化)處理是將原數據集減去該數據集的均值,即\(a=a-\mu\),這樣數據\(a\)的均值就是零了。再說一句,零均值化不是簡單的將均值令為零,而是要減去均值,這樣才有零均值,這里之所以看到還是\(a_i\)是因為相減后還令為了\(a_i\),即\(a_i=a_i-\mu\),或者說將下文中的\(a_i\)還是要視為$a_i=a_i-\mu $。 則將向量零均值化處理,可以有

\[Var(a) = \frac 1{m-1}.\sum_{i=1}^{m} {a_i^2} \]

協方差(covariance):兩個向量

協方差可以用來表示兩個向量之間的相關性,如在PCA降維中,我們希望降維后的向量可以保存更多的原始信息,所以盡可能的減少向量之間的相關性,因為相關性越大,則就代表着兩個變量不是完全獨立的,也即必然有重復的信息。

\[Cov(a,b) = \frac 1{m-1}.\sum_{i=1}^{m} {(a_i-\mu_a)(b_i-\mu_b)} \]

同樣,若零均值化,則有

\[Cov(a,b) = \frac 1{m-1}.\sum_{i=1}^{m} {a_ib_i} \]

協方差可以衡量兩個向量(變量)同時變化的程度,若協方差cov(a,b)>0,則表示a若增大,b也增大;小於0時,a增大,b減小。
后話:當協方差為0的時候,也即表示兩個變量之間不相關。在PCA降維時,就是選擇幾個基,使得原始數據變換到該組基上時,各變量之間的協方差為零,而變量的方差卻很大。
而為了讓協方差為0,選擇第二個基的時候,與第一個基正交,第三個與第二個正交,這樣兩兩正交的基,最后的相關性就是0。

協方差矩陣(covariance matrix):多個向量之間

上述只是單個向量的方差和兩個向量之間的協方差,若有多個向量,則可以用矩陣來表示兩兩的相關性。如有向量a,b,c【注意:這里不要誤解為一個向量就代表着一個樣本數據,其實在這里更貼合的說,向量a等表示的是不同樣本數據的同一位置(如第一個特征)的特征,而\((a_1,b_1,c_1)\)才代表一個樣本數據。具體看后文matlab計算就清楚了,之所以這樣表示是在計算均值等表達上有方便之處】,用矩陣X表示這三個向量,則其兩兩之間的協方差可以用矩陣來表示。

\[X=\begin{pmatrix} a\\b\\c\end{pmatrix}=\begin{pmatrix} a_1 & a_2&...&a_m \\ b_1& b_2 &...&b_m \\c_1&c_2&...&c_m \end{pmatrix} \]

計算的均值是所有樣本相同位置的特征求均值,則有:

\[\mu_a=\frac 1m \sum_{i=1}^{m}a_i  \mu_b=\frac 1m \sum_{i=1}^{m}b_i  \mu_c=\frac 1m \sum_{i=1}^{m}c_i \]

則有均值矩陣(向量):

\[\mu=\begin{pmatrix} \mu_a\\\mu_b\\\mu_c\end{pmatrix} \]

對原樣本矩陣去均值化(零均值化),則有:

\[X=X-\hat{\mu} \\這里的\hat{\mu}是每列均為\mu,列數與矩陣X相同的矩陣。因為\mu是個列向量,不能直接與矩陣X相減,所以才有的這步 \]

則可以得到協方差矩陣

\[cov(X)=\begin{pmatrix} cov(a,a)&cov(a,b)&cov(a,c)\\ cov(b,a)&cov(b,b)&cov(b,c) \\cov(c,a)&cov(c,b)&cov(c,c)\end{pmatrix} \]

同時從上文協方差處可以看出,零均值化后的協方差就是向量的內積求平均,所以對於上述協方差矩陣則可以寫為

\[\begin{aligned} cov(X)&=\begin{pmatrix} cov(a,a)&cov(a,b)&cov(a,c)\\ cov(b,a)&cov(b,b)&cov(b,c) \\cov(c,a)&cov(c,b)&cov(c,c)\end{pmatrix}\\ & =\begin{pmatrix} \frac 1{m-1}.\sum_{i=1}^{m} {a_ia_i}&\frac 1{m-1}.\sum_{i=1}^{m} {a_ib_i}&\frac 1{m-1}.\sum_{i=1}^{m} {a_ic_i}\\ \frac 1{m-1}.\sum_{i=1}^{m} {b_ia_i}&\frac 1{m-1}.\sum_{i=1}^{m} {b_ib_i}&\frac 1{m-1}.\sum_{i=1}^{m} {b_ic_i}\\\frac 1{m-1}.\sum_{i=1}^{m} {c_ia_i}&\frac 1{m-1}.\sum_{i=1}^{m} {c_ib_i}&\frac 1{m-1}.\sum_{i=1}^{m} {c_ic_i}\end{pmatrix}\\ & =\frac 1{m-1}XX^T(這是零均值化后的,也即經過了X=X-\hat{\mu})\\ & =\frac 1{m-1}(X-\hat{\mu})(X-\hat{\mu})^T(沒有零均值化時,注意維度匹配) \end{aligned} \]

若沒有零均值化,則有下面的計算,其中的均值也是行向量的均值.

\[設P=\begin{pmatrix}P_{11}& P_{12}&\cdots&P_{1m}\\ P_{21}&P_{22}&\cdots&P_{2m}\\ \vdots&\vdots&&\vdots\\ P_{n1}&P_{n2}&\cdots&P_{nm}\end{pmatrix} =\begin{pmatrix}P_{1}\\ P_{2}\\ \vdots\\ P_{n}\end{pmatrix}  設\hat\mu=\begin{pmatrix}\mu_{1}&\mu_{1}&\cdots&\mu_{1}\\ \mu_{2}&\mu_{2}&\cdots&\mu_{2}\\ \vdots&\vdots&&\vdots\\ \mu_{n}&\mu_{n}&\cdots&\mu_{n}\end{pmatrix}\\ 則計算協方差矩陣,cov(P)=\frac 1{m-1}(P-\hat\mu)(P-\hat\mu)^T\\ =\frac1{m-1}\begin{pmatrix}P_{11}-\mu_1& P_{12}-\mu_1&\cdots&P_{1m}-\mu_1\\ P_{21}-\mu_2&P_{22}-\mu_2&\cdots&P_{2m}-\mu_2\\ \vdots&\vdots&&\vdots\\ P_{n1}-\mu_n&P_{n2}-\mu_n&\cdots&P_{nm}-\mu_n\end{pmatrix}\begin{pmatrix}P_{11}-\mu_1& P_{21}-\mu_2&\cdots&P_{n1}-\mu_n\\ P_{12}-\mu_1&P_{22}-\mu_2&\cdots&P_{n2}-\mu_n\\ \vdots&\vdots&&\vdots\\ P_{1m}-\mu_1&P_{2m}-\mu_2&\cdots&P_{nm}-\mu_n\end{pmatrix}\\ =\frac1{m-1}\begin{pmatrix}\sum_{i=1}^m(P_{1i}-\mu_1)(P_{1i}-\mu_1)&\sum_{i=1}^m(P_{1i}-\mu_1)(P_{2i}-\mu_2)&\cdots&\sum_{i=1}^m(P_{1i}-\mu_1)(P_{ni}-\mu_n)\\\sum_{i=1}^m(P_{2i}-\mu_2)(P_{1i}-\mu_1)&\sum_{i=1}^m(P_{2i}-\mu_2)(P_{2i}-\mu_2)&\cdots&\sum_{i=1}^m(P_{2i}-\mu_2)(P_{ni}-\mu_n)\\ \vdots&\vdots&&\vdots\\\sum_{i=1}^m(P_{ni}-\mu_n)(P_{1i}-\mu_1)&\sum_{i=1}^m(P_{ni}-\mu_n)(P_{2i}-\mu_2)&\cdots&\sum_{i=1}^m(P_{ni}-\mu_n)(P_{ni}-\mu_n) \end{pmatrix}\\ =\begin{pmatrix}cov(P_1,P_1)&cov(P_1,P_2)&\cdots&cov(P_1,P_n)\\ cov(P_2,P_1)&cov(P_2,P_2)&\cdots&cov(P_2,P_n)\\\vdots&\vdots&\ddots&\vdots\\ cov(P_n,P_1)&cov(P_n,P_2)&\cdots&cov(P_n,P_n)\end{pmatrix} \]

注注注注注注注注注注注注注注注注注注注注意!!!!!!協方差矩陣計算的是特征之間的相關程度,而不是樣本之間的相關程度,如上述協方差矩陣中的一個元素cov(a,b)就是計算在某個樣本中,其特征a和特征b之間的相關程度。進一步,如有m個樣本,每個樣本有k個特征,那么計算得到的協方差矩陣就是k階方陣,和樣本有多少個沒有啥關系。

Matlab實現協方差矩陣

下面分別用上述的公式和自帶函數實現協方差矩陣的計算,得到的結果是一樣的

  1. 用公式\(cov(X)=\frac{1}{m-1}XX^T\)計算
clc;
clear;
%我們隨機產生一個矩陣來作為樣本數據,分別用公式自行編程和用matlab自帶函數實現協方差計算,
%計算得到結果,兩者是相同的
A=rand(3,10);%3行10列的矩陣,這里代表10個樣本數據,每個樣本有3個特征;
B=mean(A,2);%求取矩陣均值時,按照行求取,也即每個樣本的第一個特征相加再平均,得到3行1列的矩陣;
C=zeros(3,10);%創建零矩陣,用來存放去均值后的結果;
for i=1:10
    C(:,i)=A(:,i)-B;%矩陣C即為零均值后的樣本數據,是3行10列,代表10個樣本數據,每個樣本有3個特征;
end
cov_C=(C*C')/9%按照公式求取協方差矩陣,是無偏估計,所以除以m-1=10-1=9;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%下面用matlab自帶的cov函數求取協方差,注意其輸入的矩陣的行數代表着樣本的個數,
%列數代表着每個樣本的特征數,故下面用轉置后的A求取;
cov(A')%自帶的函數會自行零均值化等處理,所以只管輸入就好;
  1. 用公式\(cov(X)=\begin{pmatrix} cov(a,a)&cov(a,b)&cov(a,c)\\ cov(b,a)&cov(b,b)&cov(b,c) \\cov(c,a)&cov(c,b)&cov(c,c)\end{pmatrix}\)計算,先把矩陣中的每個元素算出來,最后組合成協方差矩陣。
%%同上,一樣要先零均值化,矩陣C即為零均值后的樣本數據
A=rand(3,10);%3行10列的矩陣,這里代表10個樣本數據,每個樣本有3個特征;
B=mean(A,2);%求取矩陣均值時,按照行求取,也即每個樣本的第一個特征相加再平均,得到3行1列的矩陣;
C=zeros(3,10);%創建零矩陣,用來存放去均值后的結果;
for i=1:10
	C(:,i)=A(:,i)-B;%矩陣C即為零均值后的樣本數據,是3行10列,代表10個樣本數據,每個樣本有3個特征;
end
%與公式保持一致,令矩陣中的行向量為a,b,c
a=C(1,:);
b=C(2,:);
c=C(3,:);
%則計算協方差矩陣中的第一個元素cov(a,a)
cov_aa=(a*a')/9  %這就是向量的內積,除了這樣直接向量相乘外,還可以用對應元素相乘,最后再相加計算。
%同理還有其他的幾個
cov_ab=(a*b')/9
cov_ac=(a*c')/9
cov_ba=(b*a')/9
cov_bb=(b*b')/9
cov_bc=(b*c')/9
cov_ca=(c*a')/9
cov_cb=(c*b')/9
cov_cc=(c*c')/9
%計算結果與上述相同

References

降維——PCA

淺談協方差矩陣


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM