引言:
最近開始學(xué)習(xí)“機(jī)器學(xué)習(xí)”,早就聽說祖國寶島的李宏毅老師的大名,一直沒有時間看他的系列課程。今天聽了一課,感覺非常棒,通俗易懂,而又能夠抓住重點,中間還能加上一些很有趣的例子加深學(xué)生的印象。
視頻鏈接(bilibili):李宏毅機(jī)器學(xué)習(xí)(2017)
另外已經(jīng)有有心的同學(xué)做了速記并更新在github上:李宏毅機(jī)器學(xué)習(xí)筆記(LeeML-Notes)
所以,接下來我的筆記只記錄一些我自己的總結(jié)和聽課當(dāng)時的困惑,如果有能夠幫我解答的朋友也請多多指教。
一、誤差來自哪里?該如何處理這些誤差?
從第一課可以知道,越復(fù)雜的模型并不一定會帶來越低的誤差(error)。誤差來自兩方面:
- 偏差(bias)
-
方差(variance)
如果可以診斷誤差的來源,就可以選擇適當(dāng)?shù)姆椒▉砀倪M(jìn)自己的模型。
看到這里我有一些困惑,誤差、偏差、方差聽起來太像了,到底有什么區(qū)別呢?
圖1 偏差、方差的區(qū)別
【此處與機(jī)器學(xué)習(xí)無關(guān):圖1真的挺難得,不知不覺有一種管理方面感觸的代入感,左上角圖表示好的領(lǐng)導(dǎo)(戰(zhàn)略決策層)與好的員工(戰(zhàn)術(shù)執(zhí)行層)的配合,右上角圖表示好的領(lǐng)導(dǎo)(戰(zhàn)略決策層)與差的員工(戰(zhàn)術(shù)執(zhí)行層)的配合,左下角圖表示差的領(lǐng)導(dǎo)(戰(zhàn)略決策層)與好的員工(戰(zhàn)術(shù)執(zhí)行層)的配合,右下角圖表示差的領(lǐng)導(dǎo)(戰(zhàn)略決策層)與差的員工(戰(zhàn)術(shù)執(zhí)行層)的配合。從這方面可以看出,一個好的戰(zhàn)略決策有多么重要!】
圖2 模型復(fù)雜度、誤差、偏差、方差的關(guān)系
圖3 機(jī)器學(xué)習(xí)的過程是尋找到合適的f^
簡單的模型(如一次方程)所帶來的方差比復(fù)雜模型(如五次方程)所帶來的方差要小如圖4。
圖4 簡單的模型有助于控制模型空間,從而控制方差大小
雖然簡單的模型有助于控制方差,但如果一開始選定的范圍并沒有包含f^,那么f*所帶來的偏差也有很大可能帶來誤差。如圖5。
圖5 - 如果誤差來自于偏差,那么往往在訓(xùn)練集上欠擬合(underfitting)
-
如果誤差來自于方差,那么往往在訓(xùn)練集上過擬合(overfitting)
圖6
機(jī)器學(xué)習(xí)需要弄清楚一件事情:誤差來自哪里?如果是偏差,那么該怎么辦?如果是方差,那么又該怎么辦?如圖7。
- 當(dāng)欠擬合的時候(數(shù)據(jù)無法很好擬合f),那就來自偏差,這時應(yīng)該重新設(shè)計模型,因為f^沒有被f所包含
- 當(dāng)過擬合的時候,那誤差就來自方差,這時候有兩種辦法:
- 增加數(shù)據(jù):幾乎是萬靈丹,不會傷害偏差,但有一個缺點是成本太高
-
正則化:可以使曲線變得平滑
圖7
二、選擇模型的過程中需要注意的事情
通常我們都可以在偏差和方差之間找到一個平衡,從而找到合適的模型。但一定不要做這樣的事情:
直接用全部訓(xùn)練集直接選擇模型,這樣你在測試集上得到的誤差并不能反映真實測試集上的誤差。如圖8。

那么應(yīng)該怎么做?
-
交叉驗證:將訓(xùn)練集分為訓(xùn)練集和驗證集(validation set),先用這兩個集合選擇出誤差比較小的模型,然后拿自己的測試集來比較誤差的大小。如果覺得第一步本身訓(xùn)練集并不大還要再分的話,可以在選好模型后在整個訓(xùn)練集上再確認(rèn)一下。這樣你的測試集基本上可以反映出模型在真正測試集的誤差。如圖9。
圖9
如果你擔(dān)心自己分的測試集可能帶來偏差的話,可以做N次交叉驗證,將訓(xùn)練集分為多組小訓(xùn)練集1,小訓(xùn)練集2,小驗證集,得到誤差最小的模型后再在全量的訓(xùn)練集上繼續(xù)訓(xùn)練即可。如圖10。
圖10
在這里李宏毅老師特別提到,在訓(xùn)練集上選好模型后,如果測試集上表現(xiàn)偏差比較大,不要再返回去選擇那些誤差表現(xiàn)大的模型,因為他們可能在private測試集上表現(xiàn)出的誤差可能會更大。








