皮爾遜相關系數:
用於度量兩個變量X和Y之間的相關(線性相關),其值介於-1與1之間。
幾組的點集,以及各個點集中
和
之間的相關系數。我們可以發現相關系數反映的是變量之間的線性關系和相關性的方向(第一排),而不是相關性的斜率(中間),也不是各種非線性關系(第三排)。請注意:中間的圖中斜率為0,但相關系數是沒有意義的,因為此時變量
是0。
它的幾何意義,就是夾角的余弦值:
下面是python的程序實現:
def multipl(a,b):
"""
傳入的是兩個序列
傳出的是這兩個序列的乘積之和。
"""
sumofab=0.0
for i in range(len(a)):
temp=a[i]*b[i]
sumofab+=temp
return sumofab
def corrcoef(x,y):
"""
傳入的是兩個序列,得到的是兩個序列的相關系數
"""
n=len(x)
#求和
sum1=sum(x)
sum2=sum(y)
#求乘積之和
sumofxy=multipl(x,y)
#求平方和
sumofx2 = sum([pow(i,2) for i in x])
sumofy2 = sum([pow(j,2) for j in y])
num=sumofxy-(float(sum1)*float(sum2)/n)
#計算皮爾遜相關系數
den=sqrt((sumofx2-float(sum1**2)/n)*(sumofy2-float(sum2**2)/n))
return num/den
上面的程序是根據下面的公式推導得到的:
但是這個程序在輸入
x = [1,2,3,4]
y = [1,1,1,1]
時會出現問題:分母會有0的出現(橘色方框部分就是0)
報錯:ZeroDivisionError: float division by zero
這個是公式的漏洞嗎?????
按理說,完整的相關系數應該考慮到這一點才對。