機器學習_學習筆記系列(10):多項式迴歸(Polynomail Regression)和過度擬合(Overfitting)

--

上一個章節我們介紹如何運用特徵轉換,將原本線性不可分的資料,投影到更高維度來解決。那對於迴歸上的問題,我們一樣也可以用特徵轉換來來解決一些,原本使用線性迴歸效果出來很差的問題。

一開始我們先回顧一下線性回歸的方程式

然後我們再根據我們的cost function

來設計我們更新權重的方程式:

今天同樣的道理,我們一樣可以把這個方程式做特徵轉換。如果是二次的為

我們的cost function就會變成

然後一樣把cost function對三個權重分別進行微分

那如果我們今天對其作三次方的特徵轉換,方程式則為:

cost function則為:

對四個權重分別進行微分

相信大家看到這裡,應該能找出一些規律了吧,如果我們今天做M次方特徵轉換,然後總共有N筆資料,那我們cost function對各項權重的微分等於:

而為了使我們的權重w收斂速度加快,還有避免梯度爆炸和梯度消失的問題產生,我們用一些小技巧先初始化我們的w。我們知道

,其中e就是指誤差(error),也就是我們的估計值h和實際值y相差的大小,而且這個誤差是永遠無法消除的。所以我們可以先假設一個權重w’滿足

這裡我們要解的是權重w,而這個就是我們線性代數所學的

,那在這裡相信大家應該都很熟習要怎麼解了,我們先將兩邊同乘:

然後我們就可以得到:

最後我們就可以根據這樣的式子初始化我們的權重w。

那我們現在實際拿真實資料來做看看,這裡我們就拿我們護國神山「台積電」的股票來做為我們的範例。這裡呢我們的訓練集就以民國107年1月到民國109年12月整整36個月的股市走向來當作我們餵給電腦的訓練集,而110年1月的資料就拿來當作我們的測試集,看看我們的模型預測效果如何。資料來源來自:台灣證券交易所[1]

警告:這裡強烈建議大家,如果是初學者,先不要用爬蟲,請先直接下載CSV檔。因為如果你用requests爬蟲的頻率太高,網頁資安系統很有可能判斷你是駭客,把你列入黑名單。如果真的想用爬蟲的話,建議大概間格5~10秒爬一次資料。

在這裡我們把開盤價當作我們預測的目標,我們可以看到以下為整整36個月的資料輸出結果,這裡為了方便運算,我們有把日期x和開盤價y做normalize讓我們進行梯度下降時,比較不容易發生梯度爆炸或梯度消失的問題。

接著我們用多項式迴歸擬合這些數據,而以下為不同次方數特徵轉換,產生的擬合結果。圖中藍色的線為107年1月到109年12月開盤價的訓練資料。紅色的線為我們想要預測的110年1月開盤價。而綠色的線則是我們用機器學習所預測的曲線

這裡我們可以看到一件很有趣的事情,就是雖然我們把次方數提高,的確對於訓練集資料的擬合效果越來越好,但是我們也可以看到,擬合出的結果對於在測試集上的預測,卻不是次方數越大越好,而這個就是所謂的過擬合overfitting問題。

我們進一步把次方數大小,和訓練集錯誤率、測試集錯誤率的曲線畫出來

我們可以看到訓練集錯誤率,大致上會隨著次方數提高而減少,但是在測試集我們可以看到,到後面突然暴增,甚至比我們用線性迴歸,也就是一次方時的錯誤率來得大,所以在這種情況下,我們會選擇次方數為10的特徵轉換做為我們預測股票的模型。

但實際上要預測股票趨勢,沒這麼簡單,其還需要用到很多技巧,像是分析上下游廠商的股票趨勢、物價指數、匯率,甚至是用自然語言處理分析政治人物的發言等等。

而在下一個章節,我們就要來探討,要怎麼對付overfitting的問題。

Python Sample Code:

Github:

Reference:

[1] 台灣證券交易所:https://www.twse.com.tw/zh/

***本系列完全沒有開任何營利***

作者:劉智皓

linkedin: CHIH-HAO LIU

--

--

劉智皓 (Chih-Hao Liu)
劉智皓 (Chih-Hao Liu)

Written by 劉智皓 (Chih-Hao Liu)

豬屎屋AI RD,熱愛AI研究、LLM/SD模型、RAG應用、CUDA/HIP加速運算、訓練推論加速,同時也是5G技術愛好者,研讀過3GPP/ETSI/O-RAN Spec和O-RAN/ONAP/OAI開源軟體。

No responses yet