多項式迴歸(Polynomial Regression)
區分一下多元迴歸與多項式迴歸的區別:
多元迴歸可以分爲:多元線性迴歸和多元非線性迴歸,多元迴歸指的是:一個因變量(y)與多個自變量(,)之間的關係。其中若y與,之間關係是線性的,那麼就叫做多元線性迴歸,可以用下面的公式表示多元線性迴歸:
其實,我們常說的線性迴歸通常都是這種形式。
那麼如果y與,之間不是線性的,而是非線性的關係,這時應該怎麼辦?解決辦法:將非線性變成線性關係
解決辦法應該是:
(1)降低維度:可以利用PCA等方法降低自變量維度,捨棄一些因素後,再利用線性關係解決
(2)做一些變量變換將非線性的轉成線性的,其中多項式迴歸就是其中一種
多項式迴歸模型:
即可以看作:
這樣就可以轉成多元線性迴歸:利用多元線性迴歸的方法解決
補充:(1)線性關係與非線性關係:線性關係指的是自變量與因變量之間關係可以用一條直線,即變量的一次方的形式表示出來;(2)線性相關與非線性相關:指的是自變量中每個因素之間的關係,數學定義如下:
向量,如果存在一組不全爲零的數k1,k2,k3,使得 ,那麼這三個向量是線性相關的。如果只有k1=k2=k3=0時,等式才成立,那麼這三個向量就是線性無關的。
(3)線性不可分與線性可分:能否用一個平面或者直線將兩類不同的點分隔開,如果能夠分隔開則是線性可分的,反之爲線性不可分。
簡而言之,多項式迴歸是解決因變量與自變量之間的非線性關係的迴歸方法,通常做法是將非線性關係通過平方、冪指數等方式將非線性關係轉成線性關係從而求解。所以多項式迴歸可以稱作可化爲線性迴歸的曲線迴歸,除了多項式型外,以下也是常見的轉化方式。
(1)雙曲線型:,令,則y=a+bt
(2)冪函數型:,兩邊取對數,,令,則
(3)指數型:,兩邊取對數,,令,則
(4)S型曲線:,令,,則
實現
利用sklearn中的PolynomialFeatures來構造多項式特徵,再利用線性迴歸模型去做(sklearn中沒有直接封裝好的能用的多項式迴歸模型)
import numpy as np
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
##構造數據集
x = np.linspace(-3,3,100) #產生100個0,1之間的隨機數
X = x.reshape(-1,1)
y = x**3 + np.random.normal(0,0.5,size = 100)
####線性模型擬合#####
model = LinearRegression()
model.fit(X,y)
y_predict = model.predict(X)
#######多項式擬合#######
Polynomial = PolynomialFeatures(degree = 3,\
interaction_only=False,include_bias=False)
#interaction_only 默認值False
#include_bias 默認值 False
x_poly = Polynomial.fit_transform(X)
model.fit(x_poly,y)
y_poly_pre = model.predict(x_poly)
plt.scatter(X, y,color='blue',label='train_set')
plt.plot(X,y_predict,color = 'yellow',label='linear',linewidth = 4)
plt.plot(X,y_poly_pre,color = 'red',label='Polynomial',linewidth = 4)
plt.legend()
plt.show()
對比圖:
其中PolynomialFeatures類詳解可參考:https://blog.csdn.net/weixin_39175124/article/details/79475336