1. 程式人生 > 程式設計 >如何在python中實現線性迴歸

如何在python中實現線性迴歸

線性迴歸是基本的統計和機器學習技術之一。經濟,電腦科學,社會科學等等學科中,無論是統計分析,或者是機器學習,還是科學計算,都有很大的機會需要用到線性模型。建議先學習它,然後再嘗試更復雜的方法。

本文主要介紹如何逐步在Python中實現線性迴歸。而至於線性迴歸的數學推導、線性迴歸具體怎樣工作,引數選擇如何改進迴歸模型將在以後說明。

迴歸

迴歸分析是統計和機器學習中最重要的領域之一。有許多可用的迴歸方法。線性迴歸就是其中之一。而線性迴歸可能是最重要且使用最廣泛的迴歸技術之一。這是最簡單的迴歸方法之一。它的主要優點之一是線性迴歸得到的結果十分容易解釋。那麼迴歸主要有:

  • 簡單線性迴歸
  • 多元線性迴歸
  • 多項式迴歸

如何在python中實現線性迴歸

用到的packages

  • NumPy

NumPy是Python的基礎科學軟體包,它允許在單維和多維陣列上執行許多高效能操作。

  • scikit-learn

scikit-learn是在NumPy和其他一些軟體包的基礎上廣泛使用的Python機器學習庫。它提供了預處理資料,減少維數,實現迴歸,分類,聚類等的方法。

  • statsmodels

如果要實現線性迴歸並且需要功能超出scikit-learn的範圍,則應考慮使用statsmodels可以用於估算統計模型,執行測試等。

scikit-learn的簡單線性迴歸

1.匯入用到的packages和類

import numpy as np
from sklearn.linear_model import LinearRegression

2.建立資料

x = np.array([5,15,25,35,45,55]).reshape((-1,1))
y = np.array([5,20,14,32,22,38])

現在就生成了兩個陣列:輸入x(迴歸變數)和輸出y(預測變數),來看看

>>> print(x)
[[ 5]
 [15]
 [25]
 [35]
 [45]
 [55]]
>>> print(y)
[ 5 20 14 32 22 38]

可以看到x是二維的而y是一維的,因為在複雜一點的模型中,係數不只一個。這裡就用到了.reshape()來進行轉換。

3.建立模型

建立一個類的例項LinearRegression,它將代表迴歸模型:

model = LinearRegression()

現在開始擬合模型,首先可以呼叫.fit()函式來得到優的?₀和?₁,具體有下面兩種等價方法

model.fit(x,y)
model = LinearRegression().fit(x,y)

4.檢視結果

擬合模型之後就是檢視與模型相關的各項引數

>>> r_sq = model.score(x,y)
>>> print('coefficient of determination:',r_sq)
coefficient of determination: 0.715875613747954

.score()函式可以獲得模型的?²,再看看係數

>>> print('intercept:',model.intercept_)
intercept: 5.633333333333329
>>> print('slope:',model.coef_)
slope: [0.54]

可以看到係數和截距分別為[0.54]和5.6333,注意係數是一個二維陣列哦。

5.預測效果

一般而言,線性模型最後就是用來預測,我們來看下預測效果

>>> y_pred = model.predict(x)
>>> print('predicted response:',y_pred,sep='\n')
predicted response:
[ 8.33333333 13.73333333 19.13333333 24.53333333 29.93333333 35.33333333]

當然也可以使用下面的方法

>>> y_pred = model.intercept_ + model.coef_ * x
>>> print('predicted response:',sep='\n')
predicted response:
[[ 8.33333333]
 [13.73333333]
 [19.13333333]
 [24.53333333]
 [29.93333333]
 [35.33333333]]

除了可以利用樣本內的資料進行預測,也可以用樣本外的資料進行預測。

>>> x_new = np.arange(5).reshape((-1,1))
>>> print(x_new)
[[0]
 [1]
 [2]
 [3]
 [4]]
>>> y_new = model.predict(x_new)
>>> print(y_new)
[5.63333333 6.17333333 6.71333333 7.25333333 7.79333333]

至此,一個簡單的線性迴歸模型就建立起來了。

scikit-learn的多元線性迴歸

直接開始吧

1.匯入包和類,並建立資料

import numpy as np
from sklearn.linear_model import LinearRegression

x = [[0,1],[5,[15,2],[25,5],[35,11],[45,15],[55,34],[60,35]]
y = [4,5,38,43]
x,y = np.array(x),np.array(y)

看看資料

>>> print(x)
[[ 0 1]
 [ 5 1]
 [15 2]
 [25 5]
 [35 11]
 [45 15]
 [55 34]
 [60 35]]
>>> print(y)
[ 4 5 20 14 32 22 38 43]

2.建立多元迴歸模型

model = LinearRegression().fit(x,y)

3.檢視結果

>>> r_sq = model.score(x,r_sq)
coefficient of determination: 0.8615939258756776
>>> print('intercept:',model.intercept_)
intercept: 5.52257927519819
>>> print('slope:',model.coef_)
slope: [0.44706965 0.25502548]

4.預測

#樣本內
>>> y_pred = model.predict(x)
>>> print('predicted response:',sep='\n')
predicted response:
[ 5.77760476 8.012953  12.73867497 17.9744479 23.97529728 29.4660957
 38.78227633 41.27265006]
#樣本外
>>> x_new = np.arange(10).reshape((-1,2))
>>> print(x_new)
[[0 1]
 [2 3]
 [4 5]
 [6 7]
 [8 9]]
>>> y_new = model.predict(x_new)
>>> print(y_new)
[ 5.77760476 7.18179502 8.58598528 9.99017554 11.3943658 ]

所有的結果都在結果裡,就不再過多解釋。再看看多項式迴歸如何實現。

多項式迴歸

匯入包和建立資料

import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
x = np.array([5,1))
y = np.array([15,11,2,8,32])

多項式迴歸和之前不一樣的是需要對資料轉換,因為模型裡包含?²等變數,所以在建立資料之後要將x轉換為?²。

transformer = PolynomialFeatures(degree=2,include_bias=False)

再看看資料

>>> print(x_)
[[  5.  25.]
 [ 15. 225.]
 [ 25. 625.]
 [ 35. 1225.]
 [ 45. 2025.]
 [ 55. 3025.]]

建模

接下來的步驟就和之前的類似了。其實多項式迴歸只是多了個數據轉換的步驟,因此從某種意義上,多項式迴歸也算是線性迴歸。

model = LinearRegression().fit(x_,y)

檢視結果

>>> r_sq = model.score(x_,r_sq)
coefficient of determination: 0.8908516262498564
>>> print('intercept:',model.intercept_)
intercept: 21.372321428571425
>>> print('coefficients:',model.coef_)
coefficients: [-1.32357143 0.02839286]

預測

>>> y_pred = model.predict(x_)
>>> print('predicted response:',sep='\n')
predicted response:
[15.46428571 7.90714286 6.02857143 9.82857143 19.30714286 34.46428571]

那麼本次多項式迴歸的所有結果都在上面了,一目瞭然。

以上就是如何在python中實現線性迴歸的詳細內容,更多關於Python實現線性迴歸的資料請關注我們其它相關文章!