皮爾遜積矩線性相關系數(Pearson's r)用於計算兩組數組之間是否有線性關聯,舉個例子:
a = pd.Series([1,2,3,4,5,6,7,8,9,10])
b = pd.Series([2,3,4,5,6,7,8,9,10,11])
計算兩組數據的線性相關性,就是,b是否隨着a的增長而增長,或者隨着a的增長而減小,或者兩者不相關:
皮爾遜積矩線性相關系數的公式是: (標准化數據a * 標准化數據b).mean()
def correlation(x, y): meanX = x.mean() deviationX = x.std(ddof=0) stardardizedX = (x - meanX) / deviationX meanY = y.mean() deviationY = y.std(ddof=0) stardardizedY = (y - meanY) / deviationY return (stardardizedX*stardardizedY).mean()
*注意: 在計算皮爾遜積矩線性相關系數的時候,獲取數據標准差時必需添加參數 (ddof=0)
關於如何標准化數據,可以參考: numpy數組-標准化數據
下面以 a b 為例:
r = correlation(a,b) print(r)
# 1.0
結果是1.0,說明是正相關的
修改 a b,查看系數的變化:
a b負相關:
a = pd.Series([1,2,3,4,5,6,7,8,9,10])
b = pd.Series([10,9,8,7,6,5,4,3,2,1])
r = correlation(a,b) print(r) # -1.0
讓 a b負相關性低一點
a = pd.Series([1,2,3,4,5,6,7,8,9,10])
b = pd.Series([10,11,8,7,6,5,4,8,2,1])
r = correlation(a,b) print(r) # -0.867031357665
讓 a b沒有什么相關性:
a = pd.Series([1,2,3,4,5,6,7,8,9,10])
b = pd.Series([2,4,1,5,1,3,6,2,7,0])
r = correlation(a,b)
0.102336828287
這里只是隨便舉幾個例子.總之,皮爾遜積矩線性相關系數的范圍是-1.0到1.0,如果是正數,就是正相關,負數就是負相關
如果b完全隨着a的增加而增加,就是1.0,反之則是-1.0,越接近於0,兩者之間的相關性越小
http://rpsychologist.com/d3/correlation/
上面這個網站可以查看數據相關性情況和對應的皮爾遜積矩線性相關系數值