線性回歸與多項式回歸

2021-09-24 23:41:54 字數 2168 閱讀 5867

線性回歸是最簡單的一種機器學習演算法,可分為一元線性回歸和多元線性回歸(也就是特徵數量不同),這裡先主要介紹一元線性回歸。舉乙個簡單的例子,有一組帶標籤樣本(xi,yi),x是特徵y是響應變數(標籤),認為他們服從線性方程:

y i=

a+bx

i+

cy_i=a+bx_i+c

yi​=a+

bxi​

+c其中b是回歸係數,a+bxi是回歸函式,c則是隨機誤差。

我們要做的就是估計a、b,使得函式對資料盡可能好地擬合,同時也具有較好的泛化能力。雖然實際上我們可以從理論上推導出a、b的最優值,但是既然是機器學習,就應該把這些工作交給計算機完成。按照機器學習的流程,我們首先為ab定義乙個初始點(比如(0,0)),然後定義損失函式,這裡我們採取最小二乘法,定義每點的誤差再相加,得到的函式稱為rss(residual sum of squares):

r ss

=(y1

−β^0

−β^1

x1)2

+(y2

−β^0

−β^1

x2)2

+...

+(yn

−β^0

−β^1

xn)2

rss = (y_1 - \hat\beta_0 - \hat\beta_1 x_1)^2 + (y_2 - \hat\beta_0 - \hat\beta_1 x_2)^2 + ... + (y_n - \hat\beta_0 - \hat\beta_1 x_n)^2

rss=(y

1​−β

^​0​

−β^​

1​x1

​)2+

(y2​

−β^​

0​−β

^​1​

x2​)

2+..

.+(y

n​−β

^​0​

−β^​

1​xn

​)2

通過rss進一步構建損失函式mse(均方誤差)。得到損失函式和初始點之後,就可以採取梯度下降法,計算梯度,然後得到新的a、b取值,不斷重複這個過程,直到最後mse小於一定值,即可完成對ab的估計。

針對更一般的多元線性回歸,可把多個變數寫成矩陣形式,並得到更一般的回歸方程:

f (x

i)=w

txi+

bf(x_i) = w^t x_i +b

f(xi​)

=wtx

i​+b

雖然特徵變多了,本質上我們還是估計引數,讓mse變小,所以只是改變了輸入格式,整個流程還是一樣的。

我們可以擴充套件一下線性回歸,之前假設特徵和響應變數之間服從一元一次方程的關係,可是如果遇到一元函式沒辦法很好擬合資料的情況,就需要多項式回歸了。

多項式回歸主要是加入了特徵的更高次項,相當於增加了模型的自由度,或者說增加了模型的複雜度,使得模型可以更好更靈活地擬合資料(正則化裡有講述相關模型複雜度和特徵次數的關係)。

假如現在有乙個特徵,那麼多項式回歸方程為:

h ^=

θ0+θ

1x1+

...+

θnxn

\hat h = \theta_0 + \theta_1 x^1 + ... + \theta_n x^n

h^=θ0​

+θ1​

x1+.

..+θ

n​xn

有了向量形式,即使我們考慮多個特徵,也可以很簡潔地寫出來了:

h ^=

x⋅θ0

\hat h = x·\theta_0

h^=x⋅θ

0​事實上,線性回歸就是特殊的多項式回歸,這很好理解,最後,我想說的是,不考慮過擬合之類的問題,理論上來說,多項式回歸應該是可以擬合任何的資料的,因為我們有泰勒定理,任意的函式都可以通過泰勒級數逼近,或許我們構建的多項式過於複雜,有很多項是不需要的(因為多項式回歸必須把同一次項的所有情況都要考慮,比如兩個特徵的三次多項式,只要是特徵的冪是三就需要稱為多項式的項,而不僅僅是每個特徵的一二三次冪),但是我們也要知道,在訓練模型的過程中,對資料影響不大的項的引數是會最終趨於零的,所以不考慮計算量、過擬合等問題,哪怕我們只用多項式回歸這個方法,也足夠擬合任意的資料集了。

想瀏覽更多關於數學、機器學習、深度學習的內容,可瀏覽本人部落格

線性回歸(三) 多項式回歸

多項式回歸不再用直線擬合,而是使用曲線或曲面,我們要找的函式變成了h x 0 1x 2x 2 nxnh x theta 0 theta 1x theta 2x 2 theta nx n h x 0 1 x 2 x 2 n xn 還是要找到這些係數。其實跟多元線性回歸一模一樣,把x nx n xn看成...

多項式回歸

import numpy as np import matplotlib.pyplot as plt x np.random.uniform 3,3,size 100 x x.reshape 1,1 y 0.5 x 2 x 2 np.random.normal 0,1,100 plt.scatter...

多項式回歸

多項式回歸 import torch import numpy defmake features x 獲取 x,x 2,x 3 的矩陣 x x.unsqueeze 1 將一維資料變為 n,1 二維矩陣形式 return torch.cat x i for i in range 1 4 1 按列拼接 ...