標籤:

線性回歸中的相關度和決定係數

起步

訓練集中可能是有若干維度的特徵。但有時並不是所有特徵都是有用的,有的特徵其實和結果並沒有關係。因此需要一個能衡量自變數和因變數之間的相關度。

皮爾遜相關係數

皮爾遜相關係數( Pearson correlation coefficient),是用於度量兩個變數 X 和 Y 之間的相關(線性相關),其值介於 -1 與 1 之間。

在說皮爾遜相關係數之前,要先理解協方差( Covariance ) ,協方差是一個反映兩個隨機變數相關程度的指標,如果一個變數跟隨著另一個變數同時變大或者變小,那麼這兩個變數的協方差就是正值,反之相反,公式如下:

皮爾遜相關係數的公式如下:

Var表示方差,相關度越高,皮爾遜相關係數其值趨於 1 或 -1 (趨於1表示它們呈正相關, 趨於 -1 表示它們呈負相關);如果相關係數等於0,表明它們之間不存在線性相關關係。

對應的python代碼:

import mathnimport numpy as npnndef computeCorrelation(x: list, y: list) -> float:n x_mean = np.mean(x)n y_mean = np.mean(y)n SSR = 0n var_x = 0 # x的方差n var_y = 0 # y的方差n for xi, yi in zip(x, y):n diff_x = xi - x_meann diff_y = yi - y_meann SSR += diff_x * diff_yn var_x += diff_x ** 2n var_y += diff_y ** 2n SST = math.sqrt(var_x * var_y)n return SSR / SSTn

決定係數

決定係數即 R 平方值,反應因變數的全部變異能通過回歸關係被自變數解釋的比例。如R平方為0.8,則表示回歸關係可以解釋因變數80%的變異。換句話說,如果我們能控制自變數不變,則因變數的變異程度會減少 80%。 在簡單線性回歸中,絕對係數可以是 R^2 = r * r。而更通用的是:

SST 其實是兩部分組成的,一部分是模型可預測的,一部分是變異的SSError無法用模型解釋的。它們之間的計算公式是:

對應的 python 代碼,因為需要創建模型來進行預測,這邊使用 sklearn 中的線性回歸模型:

from sklearn import linear_modelnndef polyfit(x, y):n linear = linear_model.LinearRegression()n linear.fit(x, y)n y_hat = linear.predict(x)n y_mean = np.mean(y)n SSR = 0n SST = 0n for i in range(len(y)):n SSR += (y_hat[i] - y_mean) ** 2n SST += (y[i] - y_mean) ** 2n return SSR / SSTn

測試:

train_x = [1, 3, 8, 7, 9]ntrain_y = [10, 12, 24, 21, 34]nnprint(computeCorrelation(train_x, train_y)) # output: 0.940310076545nntrain_x_2d = [[x] for x in train_x] # 通用的方式,訓練集至少是二維的nprint(polyfit(train_x_2d, train_y)) # output: 0.884183040052n

修正決定係數

R 平方也有其局限性,隨著自變數數目的增加,R 方是會增加的,這部分的定理是:

證明過程:

調整後的R 方表示為:

其中,n 表示樣本大小,p 表示模型中解釋變數的總數(不包括常數)。

附錄

本次代碼:regression_relativity.py


推薦閱讀:

Python3《機器學習實戰》學習筆記(十一):線性回歸基礎篇之預測鮑魚年齡
《Machine Learning:Regression》課程1-3章問題集
譯文 | 與TensorFlow的第一次接觸第二篇:線性回歸
[R]線性回歸

TAG:线性回归 |