1. 期望
2. 方差
3. 協方差和相關系數
協方差(或者相關系數)如果是正的,表明X和Y之間同時增加或減小;如果是負的,表明X和Y之間有一個增加而另一個減小;如果它的值為0,則表明X和Y之間是獨立的。
4. 協方差矩陣
在機器學習中,計算兩個特征X、Y(都是向量)的協方差公式為
式中n表示n個樣本。兩個特征X、Y之間的協方差矩陣為
如果有多個特征(特征1, 特征2, 特征3,...,特征N),它們的協方差矩陣:
下面以兩個特征為例計算協方差矩陣:
import numpy as np featuremat = np.random.randint(1, 100, [8, 2]) # 8個樣本,2個特征 mean0 = np.mean(featuremat[:, 0]) # 求第一個特征列的均值,用於數據中心化 mean1 = np.mean(featuremat[:, 1]) # 求第二個特征列的均值,用於數據中心化 cov = np.mean((featuremat[:, 0]-mean0)*(featuremat[:, 1]-mean1)) print('cov: ', cov) print('cov matrix: ') print(np.cov(featuremat.T)) # 計算特征列之間的協方差矩陣
運行結果:
cov: 247.96875 cov matrix: [[714.21428571 283.39285714] [283.39285714 697.41071429]]
在樣本數據矩陣X(注意上文中我用X表示一個特征,這里我用X表示整個樣本數據矩陣)中,如果數據是按行排列的,即一行是一個樣本,一列是一個特征,那么協方差矩陣計算公式為
如果數據是按列排列的,即一列是一個樣本,一行是一個特征,那么協方差矩陣計算公式為
在機器學習中,理解協方差矩陣的關鍵在於牢記它計算的是同一個樣本不同特征維度之間的協方差,而不是不同樣本之間。拿到樣本矩陣之后,我們首先要明確一行是樣本還是特征維度。下圖可幫助理解:
此外,在統計學與概率論中,協方差矩陣的計算好像有所不同(存疑),其每個元素是各個向量元素之間的協方差,這是從標量隨機變量到高維度隨機向量的自然推廣:
5.相關系數矩陣
相關系數矩陣的計算原理和協方差矩陣的差不多,只不過前者計算的是相關系數,后者計算的是協方差,而相關系數和協方差的關系,在前面的第3小節介紹過了。下面用python-numpy實現一個簡單的求相關系數矩陣的例子,例子中一行表示一個樣本,一列表示一個特征:
import numpy as np featuremat = np.random.rand(8, 2) # 8個樣本,2個特征 # compute mean mean0 = np.mean(featuremat[:, 0]) # 求第一個特征列的均值 mean1 = np.mean(featuremat[:, 1]) # 求第二個特征列的均值 # comupte standard deviation std0 = np.std(featuremat[:, 0]) std1 = np.std(featuremat[:, 1]) corref = np.mean((featuremat[:, 0]-mean0)*(featuremat[:, 1]-mean1)) / (std0*std1) print('corref: ', corref) print('corref matrix: ') print(np.corrcoef(featuremat.T)) # 計算特征之間的相關系數矩陣
運行結果:
corref: -0.11352065914068718 corref matrix: [[ 1. -0.11352066] [-0.11352066 1. ]]
參考文獻
[1] 概率論與數理統計,黃清龍等,北京大學出版社
[2]《機器學習算法原理與編程實踐》鄭捷,第一章第三節