[機器學習首部曲] 迴歸模型簡介 Regression

迴歸模型是處理連續變數常用的一種方法。本單元針對迴歸模型做一個簡單的介紹,並介紹其運作原理、在程式中常見的運算模式以及針對過度擬合的相關處理方式。

(一) 迴歸模型種類

迴歸模型主要用來探討自變數(因)與依變數(果)之間的關係,套在機器學習裡面,就是特徵(因)與目標(果)之間的關係。依照特徵數目與模型維度的不同,可以簡單分為以下幾類。

1. 簡單線性回歸 Simple Linear Regression

這就是最常見的,可以很直接地看到特徵與目標之間的關係。

$$ y(x)=w_0+w_1 x $$

2. 多項式迴歸 Polynomial Regression

當然,有些特徵與目標之間的關係並非為線性,故我們可以透過高維度的多項式迴歸來建構合適的模型。

$$y(x)=w_0+w_1x+w_2x^2+…+w_nx^n$$

3. 多元迴歸 Multivariable Regression

另外,一般來說我們的特徵通常不只一個,因此也可以透過多元回歸來建構多個特徵的迴歸模型。

$$y(x)=w_0+w_1x_1+w_2x_2+…+w_nx_n$$

(二) 迴歸模型的運作原理

一般來說,我們會用最小平方法來建構迴歸模型。簡單來說,就是找到一個方程式,讓所有預測值與真實值之間的誤差和最小。其中,誤差和就是所謂的成本函數,而預測值的方程式就是我們的迴歸模型。

成本函數(Cost Function):

$$\text{CF}= \sum_{j=1}^{n}(y_j-y(x_j))^2$$

以簡單線性回歸來說,學過統計的朋友們可能都很清楚,不是直接用聯立方程組就可以求解了嗎? 是這樣沒錯! 但先前我們提到,迴歸包含了相當多的種類,在簡單線性回歸我們可能可以這樣做。但是,在高維度或複雜的多元迴歸上,這就會變得相當複雜! 為了解決這樣的問題,我們可以透過梯度下降法求解!

什麼是梯度下降法呢? 我們想像自己在山坡上,要怎麼樣才能最快到達山底(極小值)呢? 直覺當然就是找最陡的路啊! 因為距離最短! 因此,很自然的,式子的後方就是對成本函數的微分,用來計算陡峭程度。而式子前方所乘以$\alpha$係數,則是Learning rate,代表一步距離的大小。 $\alpha$ 太小會導致走的速度很慢,需要迭代很多次才能找到最佳解。然而, $\alpha$ 過大雖然初期的效率高速度快,卻也會造成在山谷時因步伐太大走不到最低點的問題。因此,選擇適當的 $\alpha$ 或是在更新的過程中調整 $\alpha$ 也是值得注意的事情。本單元,我們分享兩種常用的梯度下降法。

$$w_j \leftarrow w_j-\alpha \frac{\partial}{\partial w_j}CF(w)$$

本單元,我們分享兩種常用的梯度下降法。

1. Batch gradient descent

每次調整參數時,都會採用所有的樣本進行計算。這樣的優點就是會比較精確,在小樣本尤其好用! 然而,當樣本過大時,每一次的調整都要將所有的樣本計算一次,計算成本相當可觀!

$$w_0 \leftarrow w_0+\alpha \sum_{j}(y_j-y(x_j))$$

$$w_1 \leftarrow w_1+\alpha \sum_{j}(y_j-y(x_j))x_j$$

2. Stochastic gradient descent

因此發展出隨機梯度下降法,每次樣本更新時僅隨機採用單一樣本進行計算。好處是計算效率大幅提升,當然也會相對犧牲一點精確度。

$$w_0 \leftarrow w_0+\alpha (y-y(x))$$

$$w_1 \leftarrow w_1+\alpha (y-y(x))x$$

另外,亦有綜合兩者的mini-batch 梯度下降法,則像是綜合Batch gradient descent 及 stochastic gradient descent, 以部分樣本來代替全部樣本或單一樣本。

(三)低度擬和與過度擬和

在建構迴歸模型的過程中,若是參數使用太少,可能會造成低度擬合的問題。如下圖左,我們可以很清楚的看到,簡單線性回歸無法達到有效的預測結果,這個案例應採用多項式迴歸來建構模型。另一方面,過多的參數卻會導致過度擬和(如下圖右),造成模型對於這組樣本可以有很精準的預測,然而當有新的樣本加入時,卻沒辦法有好的預測效果。因此,在建構迴歸模型前,可以考慮先把圖畫出來,再進行模型的選擇, 心裡會比較有底唷!

此外,在建構迴歸模型時,特徵數不宜太少,但也不宜過多,至少應小於等於樣本數。然而,當樣本數與特徵數相近時,仍然容易造成過度擬合的效果。因此,特徵數的拿捏也是相當重要的關鍵。

(四) 如何避免過度擬和

先前提到,當特徵數過多時,容易造成過度擬和的問題。另一方面,在建構特徵的過程中,我們很多時候都忽略了特徵共線性的問題。以股票市場為例,市值大的股票通常都是比較大的公司,其營收或營業現金流量等數值相較其他公司來說有很大的可能性也比較大,因此若我們的特徵同時包含三者,即很可能產生共線性的問題。面對這樣的問題,我們可以採用正規化(regularization)迴歸,亦即在原始的成本含數上外加懲罰項,以降低過度擬合的問題。以下介紹兩種正規化法。

1. Lasso Regression (L1)

$$ min\ \ \text{CF}+ \alpha\sum_{j=1}^{n}|w_j|$$

在這裡我們可以很清楚的看到,當特徵係數的絕對值愈大時,其懲罰項的總和也會愈大。因此,讓一些不重要特徵的係數為零,即可有效降低懲罰。故此方法藉由讓特徵變的比較稀疏來達到避免過度擬合的效果,同時也達到了特徵篩選的功能!

2. Ridge Regression (L2)

$$ min\ \ \text{CF}+ \alpha\sum_{j=1}^{n}w_j^2$$

另一方面,在脊回歸的部分我們可以看到,懲罰項為特徵係數平方的加總。因此,在這樣的方法下,只要讓特徵的係數趨近於零,即能達到降低懲罰項的效果。故此方法以降低特徵係數來達到避免過度擬合的效果。

綜合以上,我們學會了迴歸模型背後的基本原理,以及探討過度擬和的問題及處理方式。下個單元,我們將一起用Python來建構迴歸模型!

Share

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *