iT邦幫忙

2025 iThome 鐵人賽

DAY 16
0
AI & Data

ㄧ個八卦的時間也能了解AI最新趨勢系列 第 16

Day 16 模型還可以更好? -- 試試看交叉驗證吧!

  • 分享至 

  • xImage
  •  

嗨嚕大家~
轉眼這個鐵人賽已經剩下一半啦!實在是有夠快(跟自己說聲加油)

昨天雖然跟大家說,了解模型評估之後差不多就已經了解整個模型訓練的流程,但要讓模型表現更穩定,其實還有很多細節可以優化!
你會發現目前訓練出來的模型表現可能都沒有預期的好,不過不用太擔心,因為其實還有很多細節是我們沒有帶到的,許多可以調整優化的地方像是如何篩選重要特徵、怎麼調內部參數等等都可能影響模型最終的表現~
我們今天就來介紹一個,在切分測試集以及訓練集時一個常見實用的小技巧,那就是交叉驗證(cross-validation)
廢話不多說,我們就開始吧!

什麼是交叉驗證?

交叉驗證是一種可以評估模型泛化能力的方法之一,這裡說的泛化能力,指的是模型在沒看過的新資料上依然能維持良好表現的能力,也就是說,我們不只希望模型在訓練資料上表現好,更希望它在真正的實際應用情境(測試集或未來資料)中,也能正確做出預測。
那交叉驗證的方式是她不只把資料單純切成一次「訓練集」和「測試集」,而是反覆地切分、訓練和驗證,藉此更全面的檢驗模型的表現。
而這樣做的好處是可以避免資料在切分的時候剛好很不平均而導致的評估偏差。

為什麼會需要交叉驗證??

講到這邊或許你還是會有點一頭霧水,什麼情況叫做資料切分不均??什麼叫做資料只切分ㄧ次訓練集和測試集呢?

在前面幾天的實作中,我們在切分測試集跟訓練集的這個步驟只做了一次,是吧訓練/測試集的資料切分成 8:2
但一次切分可能會有一些風險,大家可以想一下 假設我們今天的任務是要模型分出是假訊息還是非假訊息的任務,我們在切分時給模型的資料中剛好全部都是非假訊息,在測試集的資料中則全部都是假訊息,那因為模型在訓練的時候根本沒有看過假訊息的資料,可想而知它在測試上面就會表現得非常不理想。但這真的是模型的表現不好嗎?其實只是我們給模型的資料不夠平均,讓他沒辦法知道假訊息有什麼特徵導致他的結果不盡理想,這就是為什麼我們會需要交叉驗證來避免這種問題出現。

而除此之外還會有另一個風險是,即使這次切分的資料分布還算均勻,但模型可能剛好對這次的資料表現的好,但這個表現度好其實只有對這一組資料而已,並不代表它真的能處理各種新的資料,如果模型的如果泛化能力很好 那應該是不管怎麼換資料,測試結果都差不多。而透過交叉驗證,我們可以讓每一筆資料都既當過訓練資料,也當過測試資料且此得到更穩定且具代表性的平均評估指標(如準確率、F1-score 等)。

交叉驗證的種類

那在了解使用交叉驗證的目的後,我們就來看看常見的交叉驗證種類吧!

K-Fold
第一種類型是k-Fold validation
他的做法是先把所有資料分成k等份,而每次測試集的資料都取其中的一份,剩下的k-1份都當作是訓練集的資料,以此類推,計算 k 次測試結果後取平均,得到模型的整體表現,可以參考下圖會比較好了解一點!
https://ithelp.ithome.com.tw/upload/images/20250930/20178745w5vvwvHEve.png

通常K的值會設定是5或是10,在這邊的例子是把資料集分成10等份,每一次取一份當作是訓練,其餘當作是測試

Leave-One-Out (LOO)
這其實可以視為 K-Fold 的一種特例,只是這裡的 k 等於資料的總筆數。
換句話說,每次驗證都會留下 1 筆資料作為測試集,而把其他所有資料都當作訓練集;接著再換下一筆資料當測試集,直到每一筆資料都被測過一次。這種作法的缺點是非常耗費時間,但適合用在資料量較少的情況。

https://ithelp.ithome.com.tw/upload/images/20250930/20178745CtjECe7LmZ.png
Holdout Method
那第三種方式是最簡單的做法,就是直接隨機把資料分成三等份:訓練、驗證、測試
其中訓練集用來訓練模型,驗證集用來在訓練過程中檢視訓練的模型表現,讓我們可以方便我們調整參數或挑選模型。在最後調整出最佳參數後再用測試集檢驗模型的真正表現。
https://ithelp.ithome.com.tw/upload/images/20250930/20178745dPzauBlM7G.png

小小總結

好啦~那今天最主要就是跟大家介紹在訓練模型中的三種常見的交叉驗證方法,分別是
(1) K-Fold:將資料平均分成 K 份,輪流做訓練與驗證,能得到較穩定的評估。
(2) Leave-One-Out:K 值等於資料筆數,每次只留 1 筆作測試,理論最完整但計算成本高。
(3) Holdout:一次性切分訓練、驗證、測試集,最快速但對資料切分的隨機性較敏感。

交叉驗證的核心目的就是希望能更準確地評估模型的泛化能力,避免模型只對特定資料切分表現良好。
在實際專案中,可以根據資料量與計算資源自行選擇最合適的方法~ 也能根據交叉驗證更全面了解模型表現!

好嚕~那今天就先到這邊~ 我們明天見啦

Leave-One-Out 圖片參考連結
Holdout Method 圖片參考


上一篇
Day 15 我的模型超級棒?模型評估怎麼看?
系列文
ㄧ個八卦的時間也能了解AI最新趨勢16
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言