引言:
最近開始學習“機器學習”,早就聽說祖國寶島的李宏毅老師的大名,一直沒有時間看他的系列課程,今天聽了一課,感覺非常棒,通俗易懂,而又能夠抓住重點,中間還能加上一些很有趣的例子加深學生的印象,
視頻鏈接(bilibili):李宏毅機器學習(2017)
另外已經有有心的同學做了速記并更新在github上:李宏毅機器學習筆記(LeeML-Notes)
所以,接下來我的筆記只記錄一些我自己的總結和聽課當時的困惑,如果有能夠幫我解答的朋友也請多多指教,
一、誤差來自哪里?該如何處理這些誤差?
從第一課可以知道,越復雜的模型并不一定會帶來越低的誤差(error),誤差來自兩方面:
- 偏差(bias)
- 方差(variance)
如果可以診斷誤差的來源,就可以選擇適當的方法來改進自己的模型,
看到這里我有一些困惑,誤差、偏差、方差聽起來太像了,到底有什么區別呢?

【此處與機器學習無關:圖1真的挺難得,不知不覺有一種管理方面感觸的代入感,左上角圖表示好的領導(戰略決策層)與好的員工(戰術執行層)的配合,右上角圖表示好的領導(戰略決策層)與差的員工(戰術執行層)的配合,左下角圖表示差的領導(戰略決策層)與好的員工(戰術執行層)的配合,右下角圖表示差的領導(戰略決策層)與差的員工(戰術執行層)的配合,從這方面可以看出,一個好的戰略決策有多么重要!】


簡單的模型(如一次方程)所帶來的方差比復雜模型(如五次方程)所帶來的方差要小如圖4,

雖然簡單的模型有助于控制方差,但如果一開始選定的范圍并沒有包含f^,那么f*所帶來的偏差也有很大可能帶來誤差,如圖5,

- 如果誤差來自于偏差,那么往往在訓練集上欠擬合(underfitting)
- 如果誤差來自于方差,那么往往在訓練集上過擬合(overfitting)

機器學習需要弄清楚一件事情:誤差來自哪里?如果是偏差,那么該怎么辦?如果是方差,那么又該怎么辦?如圖7, - 當欠擬合的時候(資料無法很好擬合f),那就來自偏差,這時應該重新設計模型,因為f^沒有被f所包含
- 當過擬合的時候,那誤差就來自方差,這時候有兩種辦法:
- 增加資料:幾乎是萬靈丹,不會傷害偏差,但有一個缺點是成本太高
- 正則化:可以使曲線變得平滑

二、選擇模型的程序中需要注意的事情
通常我們都可以在偏差和方差之間找到一個平衡,從而找到合適的模型,但一定不要做這樣的事情:
直接用全部訓練集直接選擇模型,這樣你在測驗集上得到的誤差并不能反映真實測驗集上的誤差,如圖8,

那么應該怎么做?
- 交叉驗證:將訓練集分為訓練集和驗證集(validation set),先用這兩個集合選擇出誤差比較小的模型,然后拿自己的測驗集來比較誤差的大小,如果覺得第一步本身訓練集并不大還要再分的話,可以在選好模型后在整個訓練集上再確認一下,這樣你的測驗集基本上可以反映出模型在真正測驗集的誤差,如圖9,

如果你擔心自己分的測驗集可能帶來偏差的話,可以做N次交叉驗證,將訓練集分為多組小訓練集1,小訓練集2,小驗證集,得到誤差最小的模型后再在全量的訓練集上繼續訓練即可,如圖10,

在這里李宏毅老師特別提到,在訓練集上選好模型后,如果測驗集上表現偏差比較大,不要再回傳去選擇那些誤差表現大的模型,因為他們可能在private測驗集上表現出的誤差可能會更大,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/43616.html
標籤:其他
下一篇:自動駕駛高精地圖-概述與分析
