機器學習-線性回歸(Linear Regression)介紹與python實現
- 2019 年 10 月 4 日
- 筆記
微信公眾號:yale記 關注可了解更多的教程問題或建議,請公眾號留言。
背景介紹
本文討論了線性回歸的基礎知識及其在Python程式語言中的實現。線性回歸是一種統計方法,用於建模具有給定自變數集的因變數之間的關係。注意:在本文中,為簡單起見,我們將因變數作為響應和自變數引用作為特徵。為了提供線性回歸的基本理解,我們從最基本的線性回歸版本開始,即簡單線性回歸。
簡單線性回歸
簡單線性回歸是一種使用單個特徵預測響應的方法。假設這兩個變數是線性相關的。 因此,我們試圖找到一個線性函數,它儘可能準確地預測響應值(y)作為特徵或自變數(x)的函數。讓我們考慮一個數據集,其中我們對每個特徵x都有一個響應值y:

我們定義:
x作為特徵向量,即x = [x_1,x_2,…,x_n],
y作為響應向量,即y = [y_1,y_2,…,y_n]
對於n次觀察(在上面的例子中,n = 10)。
上面數據集的散點圖如下所示:

在,任務是在上面的散點圖中找到最適合的線,以便我們可以預測任何新特徵值的響應。(即數據集中不存在的x值)該行稱為回歸線。回歸線的方程表示為:

這裡,
- h(x_i)表示第i次觀察的預測響應值。
- b_0和b_1是回歸係數,分別代表回歸線的y軸截距和斜率。
要創建我們的模型,我們必須「學習」或估計回歸係數b_0和b_1的值。一旦我們估算了這些係數,我們就可以使用該模型來預測響應!在本文中,我們將使用最小二乘法技術。
現在考慮:

這裡,e_i是第i次觀察中的殘差。
因此,我們的目標是最大限度地減少總殘留誤差。
我們定義平方誤差或成本函數,J為:

我們的任務是找到j(b_0,b_1)最小的b_0和b_1的值!
在不進入數學細節的情況下,我們在此處提供結果:

其中SS_xy是y和x的交叉偏差之和:

和SS_xx是x的平方偏差之和:

注意:可以在此處找到在簡單線性回歸中查找最小二乘估計的完整推導。 下面給出了我們的數據集上面python實現的程式碼:
import numpy as npimport matplotlib.pyplot as plt def estimate_coef(x, y): n = np.size(x) # x和y向量的平均值 m_x, m_y = np.mean(x), np.mean(y) # 計算x的交叉偏差和偏差 SS_xy = np.sum(y*x) – n*m_y*m_x SS_xx = np.sum(x*x) – n*m_x*m_x # 計算回歸係數 b_1 = SS_xy / SS_xx b_0 = m_y – b_1*m_x return(b_0, b_1) def plot_regression_line(x, y, b): # 將實際點繪製為散點圖 plt.scatter(x, y, color = "m", marker = "o", s = 30) # 預測的響應向量 y_pred = b[0] + b[1]*x #繪製回歸線 plt.plot(x, y_pred, color = "g") # 設置標籤 plt.xlabel('x') plt.ylabel('y') # 顯示圖表 plt.show() def main(): x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) y = np.array([1, 3, 2, 5, 7, 8, 8, 9, 10, 12]) # 估計係數 b = estimate_coef(x, y) print("Estimated coefficients:nb_0 = {} nb_1 = {}".format(b[0], b[1])) # 繪製回歸線 plot_regression_line(x, y, b) if __name__ == "__main__": main() |
---|
上面程式碼的輸出結果為:
Estimated coefficients: b_0 = -0.0586206896552 b_1 = 1.45747126437
獲得的圖形如下所示:

多元線性回歸
多元線性回歸試圖通過將線性方程擬合到觀察數據來模擬兩個或更多個特徵與響應之間的關係。顯然,它只不過是簡單線性回歸的擴展。
考慮具有p個特徵(或獨立變數)和一個響應(或因變數)的數據集。
此外,數據集包含n行/觀察。
我們定義:
X(特徵矩陣)=大小為n×p的矩陣,其中x_ {ij}表示第i個觀察的第j個特徵的值。
所以:

y(響應向量)=大小為n的向量,其中y_ {i}表示第i次觀察的響應值。

p特徵的線性回歸表示:

其中h(x_i)是第i次觀測的預測響應值,b_0,b_1,…,b_p是回歸係數。
另外,我們可以寫:

其中e_i表示第i次觀察中的殘差。通過將特徵矩陣X表示為:我們可以更多地概括我們的線性模型:

所以現在,線性模型可以用矩陣表示為:

其中,

和

現在,我們確定b的估計,即使用最小二乘法的b'。
如已經解釋的,最小二乘法傾向於確定b',其總殘餘誤差被最小化。
我們直接在這裡展示結果:

其中'代表矩陣的轉置,而-1代表矩陣逆。
知道最小二乘估計,b',現在可以將多元線性回歸模型估計為:

其中y'是估計的響應向量。
注意:可以在此處找到在多元線性回歸中獲得最小二乘估計的完整推導。
下面給出了使用Scikit-learn在波士頓房屋定價數據集上實現多元線性回歸技術。
import matplotlib.pyplot as pltimport numpy as npfrom sklearn import datasets, linear_model, metrics # 載入波士頓數據集boston = datasets.load_boston(return_X_y=False) # 定義特徵矩陣(X)和響應向量(y)X = boston.datay = boston.target # 將X和y分成訓練和測試集from sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=1) # 創建線性回歸對象reg = linear_model.LinearRegression() # 使用訓練集訓練模型reg.fit(X_train, y_train) # 回歸係數print('Coefficients: n', reg.coef_) # 方差分數:1表示完美預測print('Variance score: {}'.format(reg.score(X_test, y_test))) # 繪製剩餘誤差 ## 設置圖表樣式plt.style.use('fivethirtyeight') ## 繪製訓練數據中的殘差plt.scatter(reg.predict(X_train), reg.predict(X_train) – y_train, color = "green", s = 10, label = 'Train data') 繪製測試數據中的殘差plt.scatter(reg.predict(X_test), reg.predict(X_test) – y_test, color = "blue", s = 10, label = 'Test data') ## 零殘差的繪圖線plt.hlines(y = 0, xmin = 0, xmax = 50, linewidth = 2) plt.legend(loc = 'upper right') plt.title("Residual errors") plt.show() |
---|
輸出的結果為:
Coefficients: [ -8.80740828e-02 6.72507352e-02 5.10280463e-02 2.18879172e+00 -1.72283734e+01 3.62985243e+00 2.13933641e-03 -1.36531300e+00 2.88788067e-01 -1.22618657e-02 -8.36014969e-01 9.53058061e-03 -5.05036163e-01] Variance score: 0.720898784611
殘差錯誤圖:

在上面的例子中,我們使用Explained Variance Score確定準確度分數。
我們定義:
explain_variance_score = 1 – Var {y – y'} / Var {y}
其中y'是估計的目標輸出,y是相應的(正確的)目標輸出,Var是方差,即標準偏差的平方。最好的分數是1.0,較低的值更差。
假設下面給出了線性回歸模型對應用它的數據集的基本假設:
線性關係:響應和特徵變數之間的關係應該是線性的。 可以使用散點圖來測試線性假設。 如下所示,第一個圖表示線性相關變數,其中第二個和第三個圖中的變數很可能是非線性的。 因此,第一個數字將使用線性回歸給出更好的預測。

- 很少或沒有多重共線性:假設數據中很少或沒有多重共線性。當特徵(或獨立變數)彼此不相互獨立時,就會發生多重共線性。
- 很少或沒有自相關:另一個假設是數據中很少或沒有自相關。當殘餘誤差彼此不相關時,發生自相關。您可以在此處參考以了解有關此主題的更多資訊。
- 同方差性:同方差性描述了一種情況,其中誤差項(即,自變數和因變數之間的關係中的「雜訊」或隨機擾動)在自變數的所有值上是相同的。如下所示,圖1具有同方差性,而圖2具有異方差性。

當我們到達本文末尾時,我們將討論下面的線性回歸的一些應用。
應用
1.趨勢線:趨勢線代表一些定量數據隨時間的變化(如GDP,油價等)。這些趨勢通常遵循線性關係。因此,可以應用線性回歸來預測未來值。然而,在其他潛在變化可能影響數據的情況下,該方法缺乏科學有效性。
2.經濟學:線性回歸是經濟學中主要的經驗工具。例如,它用於預測消費支出,固定投資支出,庫存投資,國家出口購買,進口支出,持有流動資產的需求,勞動力需求和勞動力供應。
3.財務:資本價格資產模型使用線性回歸來分析和量化投資的系統風險。
4.生物學:線性回歸用於模擬生物系統中參數之間的因果關係。