您的位置:首頁技術文章
文章詳情頁

如何在python中實現線性回歸

瀏覽:5日期:2022-07-14 14:23:40

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

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

回歸

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

簡單線性回歸 多元線性回歸 多項式回歸

如何在python中實現線性回歸

用到的packages

NumPy

NumPy是Python的基礎科學軟件包,它允許在單維和多維數組上執行許多高性能操作。

scikit-learn

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

statsmodels

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

scikit-learn的簡單線性回歸

1.導入用到的packages和類

import numpy as npfrom 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:’, y_pred, 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 npfrom sklearn.linear_model import LinearRegressionx = [[0, 1], [5, 1], [15, 2], [25, 5], [35, 11], [45, 15], [55, 34], [60, 35]]y = [4, 5, 20, 14, 32, 22, 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, y)>>> print(’coefficient of determination:’, 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:’, y_pred, 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 npfrom sklearn.linear_model import LinearRegressionfrom sklearn.preprocessing import PolynomialFeaturesx = np.array([5, 15, 25, 35, 45, 55]).reshape((-1, 1))y = np.array([15, 11, 2, 8, 25, 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_, y)>>> print(’coefficient of determination:’, 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:’, y_pred, sep=’n’)predicted response:[15.46428571 7.90714286 6.02857143 9.82857143 19.30714286 34.46428571]

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

以上就是如何在python中實現線性回歸的詳細內容,更多關于Python實現線性回歸的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
国产综合久久一区二区三区