1. 皮爾遜相關係數(Pearson Correlation Coefficient)python
1.1 衡量兩個值線性相關強度的量測試
1.2 取值範圍[-1, 1]spa
正相關:>0, 負相關:<0, 無相關:=0ssr
1.3 要理解Pearson相關係數,首先要理解協方差(Covariance),協方差是一個反映兩個隨機變量相關程度的指標,若是一個變量跟隨着另外一個變量同時變大或者變小,那麼這兩個變量的協方差就是正值,反之相反,公式以下: blog
方差:utf-8
Pearson相關係數公式以下:ci
注意:有了協方差,爲何還使用皮爾遜相關係數?雖然協方差能反映兩個隨機變量的相關程度(協方差大於0的時候表示二者正相關,小於0的時候表示二者負相關),可是協方差值的大小並不能很好地度量兩個隨機變量的關聯程度,例如,如今二維空間中分佈着一些數據,咱們想知道數據點座標X軸和Y軸的相關程度,若是X與Y的相關程度較小可是數據分佈的比較離散,這樣會致使求出的協方差值較大,用這個值來度量相關程度是不合理的。
爲了更好的度量兩個隨機變量的相關程度,引入了Pearson相關係數,其在協方差的基礎上除以了兩個隨機變量的標準.it
2. 計算方法舉例:io
x yast
1 10
3 12
8 24
7 21
9 34
在Excel中計算:
3. 其餘例子
4. R平方值
4.1 定義:決定係數,反應因變量的所有變異能經過迴歸關係被自變量解釋的比例。
也就是說,對於已經建模的模型,多大程度上能夠解釋數據
4.2 描述:如R平方爲0.8,則表示迴歸關係能夠解釋因變量80%的變異。換句話說,若是咱們控制自變量不變,則因變量的變異程度會減小80%。
4.3 簡單線性迴歸:R^2 = r * r (r爲皮爾遜相關係數)
多元線性迴歸:
R平方也有侷限性:R平方隨着自變量的增長會變大,R平方和樣本量是有關係的。所以,咱們要對R平方進行修正。修正方法:
實際中通常會選擇修正後的R平方值對線性迴歸模型對擬合度進行評判
Python實現:
# -*- coding:utf-8 -*-
import numpy as np
from astropy.units import Ybarn
import math
#相關度
def computeCorrelation(X, Y):
xBar = np.mean(X)
yBar = np.mean(Y)
SSR = 0
varX = 0
varY = 0
for i in range(0, len(X)):
diffXXbar = X[i] - xBar
diffYYbar = Y[i] - yBar
SSR += (diffXXbar * diffYYbar)
varX += diffXXbar**2
varY += diffYYbar**2
SST = math.sqrt(varX * varY)
return SSR / SST
#測試
testX = [1, 3, 8, 7, 9]
testY = [10, 12, 24, 21, 34]
# print("相關度r:", computeCorrelation(testX, testY))
#相關度r: 0.940310076545
#R平方
#簡單線性迴歸:
# print("r^2:", str(computeCorrelation(testX, testY)**2))
#r^2: 0.884183040052
#多個x自變量時:
def polyfit(x, y, degree): #degree自變量x次數
result = {}
coeffs = np.polyfit(x, y, degree)
result['polynomial'] = coeffs.tolist()
p = np.poly1d(coeffs)
yhat = p(x)
ybar = np.sum(y)/len(y)
ssreg = np.sum((yhat - ybar)**2)
sstot = np.sum((y - ybar)**2)
result['determination'] = ssreg / sstot
return result
#測試
print(polyfit(testX, testY, 1)["determination"])
#r^2:0.884183040052