pandas通過皮爾遜積矩線性相關系數(Pearson's r)計算數據相關性


皮爾遜積矩線性相關系數(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/

上面這個網站可以查看數據相關性情況和對應的皮爾遜積矩線性相關系數值

 


免責聲明!

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



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