多項式回歸原理及在sklearn中的使用+pipeline


相對於線性回歸模型只能解決線性問題,多項式回歸能夠解決非線性回歸問題。

拿最簡單的線性模型來說,其數學表達式可以表示為:y=ax+b,它表示的是一條直線,而多項式回歸則可以表示成:y=ax2+bx+c,它表示的是二次曲線,實際上,多項式回歸可以看成特殊的線性模型,即把x2看成一個特征,把x看成另一個特征,這樣就可以表示成y=az+bx+c,其中z=x2,這樣多項式回歸實際上就變成線性回歸了。

下面介紹如何在sklearn中使用多項式回歸

首先導入相應的庫以及創造數據

1 import numpy as np
2 import matplotlib.pyplot as plt
3 x = np.random.uniform(-3,3,size=100)
4 X = x.reshape(-1,1)
5 y = 0.5 * x**2 + x + 2 + np.random.normal(0,1,100)

數據分布如圖所示

接下來介紹sklearn中的PolynomialFeatures類:

由於多項式回歸會產生x的高次項,所以需要對x進行處理,先上代碼:

1 from sklearn.preprocessing import PolynomialFeatures
2 X = np.arange(1,11).reshape(-1,2)
3 poly = PolynomialFeatures(degree=2)
4 poly.fit(X)
5 X2 = poly.transform(X)

注意:此處的代碼是單獨的,跟上面的代碼沒有關系,我們先看一下X如下

它是一個5行2列的矩陣,再看一下X2:

它是一個5行6列的矩陣,它的第一列是X的第一列或者第二列的0次方,它的第二列和第三列就是X,第四列是X的第一列的平方,第五列是X的第一列與第二列的乘積,第六列是X的第二列的平方,用數學表達式:X = [X1,X2],X2=[1,X1,,X2,X12,X1*X2,X22],在PolynomialFeatures中有一個超參數degree,它代表的就是多項式的最高次數。

在處理完X之后,我們就可以將得到的X2以及y送入線性模型去訓練,由於在sklearn的線性模型是采用梯度下降法(后續會更新)求解的,故在訓練之前需要對數據進行歸一化,為了方便一條龍服務,我們使用sklearn中的Pipeline類,上代碼:

1 from sklearn.preprocessing import StandardScaler
2 from sklearn.pipeline import Pipeline
3 poly_reg = Pipeline([
4     ('poly',PolynomialFeatures(degree=2)),
5     ('std_scaler',StandardScaler()),
6     ('lin_reg',LinearRegression())
7 ])

說明一下Pipeline如何使用:Pipeline里面需要一個列表,列表里元素是一個個元組,每個元組代表對數據的處理,元組的第一個參數是處理的別名,隨便取,第二個參數是處理的函數,如本例就是第一步構造高次項,第二步歸一化,第三步使用線性回歸,然后調用的時候sklearn會順序執行這些步驟,這是sklearn的Pipeline的思想,代碼如下:

1 poly_reg.fit(X,y)
2 y_predict = poly_reg.predict(X)
3 plt.scatter(x,y)
4 plt.plot(np.sort(x),y_predict[np.argsort(x)],color='r')
5 plt.show()

訓練,預測並畫出圖示:

當然,degree參數不能設置太大,否則會過擬合。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM