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
m = 8 # 8個樣本
n = 2 # 2個特征
featuremat = np.random.randint(1, 100, [m, n])
mean0 = np.mean(featuremat[:, 0]) # 求第一個特征列的均值,用于資料中心化
mean1 = np.mean(featuremat[:, 1]) # 求第二個特征列的均值,用于資料中心化
cov = np.sum((featuremat[:, 0] - mean0) * (featuremat[:, 1] - mean1))/(m-1)
print('cov: ', cov)
print('cov matrix: ')
print(np.cov(featuremat.T)) # 計算特征列之間的協方差矩陣
運作結果:
cov: 316.0357142857143
cov matrix:
[[646.26785714 316.03571429]
[316.03571429 883.92857143]]
在樣本資料矩陣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]《機器學習算法原理與程式設計實踐》鄭捷,第一章第三節