姓名:曾祎
學號:15020120057
轉自:https://blog.csdn.net/zhihua_oba/article/details/78684257
【嵌牛導讀】初如機器學習,肯定會被經驗誤差、泛化誤差、bias等等等等的名詞所困惑,曾小編便是特意從全網搜羅到了很用心很適合初學者掃盲科普自己的文章,光速帶你明白如何解決機器學習中的基礎問題,快帶領自己進入機器學習的世界吧。
【嵌牛鼻子】人工智能? 深度學習 初學者
【嵌牛提問】作為初學者,你真的搞懂了怎么判別欠擬合和過擬合么?
【嵌牛正文】
主要內容 :
1.經驗誤差與泛化誤差
2.偏差與方差
3.欠擬合與過擬合
4.交叉驗證
一、經驗誤差(訓練誤差)與泛化誤差
??經驗誤差(訓練誤差):模型在訓練集上的誤差稱為“經驗誤差”(empirical error)或者“訓練誤差”“training error”。
??泛化誤差:模型在新樣本集(測試集)上的誤差稱為“泛化誤差”(generalization error)。
二、偏差與方差
??泛化誤差可分解為偏差、方差與噪聲之和,即generalization?error=bias2+variance+noisegeneralization?error=bias2+variance+noise。
??“噪聲”:描述了在當前任務上任何學習算法所能達到的期望泛化誤差的下界,即刻畫了學習問題本身的難度。
??假定期望噪聲為零,則泛化誤差可分解為偏差、方差之和,即generalization?error=bias2+variancegeneralization?error=bias2+variance。
??“偏差”:描述了模型的期望預測(模型的預測結果的期望)與真實結果的偏離程度。偏離程度越大,說明模型的擬合能力越差,此時造成欠擬合。
??“方差”:描述了數據的擾動造成的模型性能的變化,即模型在不同數據集上的穩定程度。方差越大,說明模型的穩定程度越差。如果模型在訓練集上擬合效果比較優秀,但是在測試集上擬合效果比較差劣,則方差較大,說明模型的穩定程度較差,出現這種現象可能是由于模型對訓練集過擬合造成的。
??簡單的總結一下:偏差大,說明模型欠擬合;方差大,說明模型過擬合。如何平衡模型的偏差和方差,一直是我們追求的效果。感興趣的童鞋,可以閱讀《Understanding the Bias-Variance Tradeoff》。
??下圖可以幫助讀者,更加直觀的理解“偏差”與“方差”。
圖1
三、欠擬合與過擬合
??如何通過學習曲線來識別模型是否發生了欠擬合/過擬合呢?如果發生了欠擬合/過擬合,我們又該如何處理呢?
??1、橫軸為訓練樣本數量,縱軸為誤差:
??首先,我們來看如何通過學習曲線識別是否發生了欠擬合/過擬合,如下圖2。模型欠擬合時,在訓練集以及測試集上同時具有較高的誤差,此時模型的偏差較大;模型過擬合時,在訓練集上具有較低的誤差,在測試集上具有較高的誤差,此時模型的方差較大。模型正常時,在訓練集以及測試集上,同時具有相對較低的偏差以及方差。
圖2
??然后,我們想辦法解決欠擬合/過擬合。根據上圖2,我們發現:當模型欠擬合的時候,我們發現增大訓練集,偏差無法降低,無法解決欠擬合問題;當模型過擬合的時候,我們發現增大訓練集,方差減小,可以解決過擬合問題。
??2、橫軸為模型復雜程度,縱軸為誤差:
??橫軸表示模型的復雜程度,增加模型的復雜程度的方法,比如增加特征項、添加多項式等等。
??首先,我們來看如何通過學習曲線識別是否發生了欠擬合/過擬合,如下圖3。模型在點A處,在訓練集以及測試集上同時具有較高的誤差,此時模型的偏差較大,模型欠擬合;模型在點C處,在訓練集上具有較低的誤差,在測試集上具有較高的誤差,此時模型的方差較大,模型過擬合。模型復雜程度控制在點B處為最優。
圖3
??然后,我們想辦法解決欠擬合/過擬合。根據上圖3,我們發現:當模型欠擬合時,可以增加模型的復雜程度;當模型過擬合時,可以減小模型的復雜程度。
??3、橫軸為正則項系數,縱軸為誤差:
??一般情況下,為了限制模型造成過擬合,可以添加正則項(懲罰項)。
??首先,我們來看如何通過學習曲線識別是否發生了欠擬合/過擬合,如下圖4。模型在點A處,在訓練集上具有較低的誤差,在測試集上具有較高的誤差,此時模型的方差較大,模型過擬合;模型在點C處,在訓練集以及測試集上同時具有較高的誤差,此時模型的偏差較大,模型欠擬合。模型正則項系數控制在點B處為最優。
圖4
??然后,我們想辦法解決欠擬合/過擬合。根據上圖4,我們發現:當模型過擬合時,可以增大模型正則項系數;模型欠擬合時,可以減小模型正則項系數。
??上文中,我們介紹了,如何通過學習曲線識別欠擬合/過擬合,以及對應的解決方法。接下來,我們針對欠擬合/過擬合,給出其他對應的解決方法。
??如何解決欠擬合:
??1)添加其他特征項,有時候我們模型出現欠擬合,是因為特征項不夠導致的,可以添加其他特征項來解決。例如,“組合”、“泛化”、“相關性”三類特征是特征添加的重要手段,無論在什么場景,都可以照葫蘆畫瓢,總會得到意想不到的效果。除上面的特征之外,“上下文特征”、“平臺特征”等等,都可以作為特征添加的首選項。
??2)添加多項式特征,這個在機器學習算法里面用的很普遍,例如將線性模型通過添加二次項或者三次項使模型泛化能力更強。例如,FM模型、FFM模型,其實就是線性模型,增加了二階多項式,保證了模型一定的擬合程度。
??3)減小正則化系數,前文中已經分析。
??等等,還有很多方法,可以對應下邊的過擬合解決方法來進行欠擬合解決方法的選擇。
??如何解決過擬合:
??1)重新清洗數據,導致過擬合的一個原因也有可能是數據不純導致的,如果出現了過擬合就需要我們重新清洗數據。
??2)增加訓練樣本數量,前文中已經分析。
??3)降低模型復雜程度,前文中已經分析。
??4)增大正則項系數,前文中已經分析。
??5)采用dropout方法,這個方法在神經網絡里面很常用。dropout方法,通俗一點講就是在訓練的時候讓神經元以一定的概率不工作。
??6)early stoping。
??7)減少迭代次數。
??8)增大學習率。
??9)添加噪聲數據。
??10)樹結構中,可以對樹進行剪枝。
??等等,方法很多,需要根據實際問題,實際模型,進行選擇。
四、交叉驗證
??交叉驗證,主要目的是針對模型的“泛化誤差”(generalization error)進行評估,得到模型的“泛化誤差”的近似值。當有多個模型可以選擇時,我們通常選擇“泛化誤差”最小的模型。
??這里主要介紹“K折交叉驗證”:
??1、將數據集(其實是訓練集,我們暫且稱為數據集吧,假設含有N個樣本)分成K份(每份含有N/K個樣本),選擇其中1份作為測試集,另外K-1份作為訓練集。這樣的話,測試集就有K種情況。
??2、在每種情況中,用訓練集訓練模型,用測試集測試模型,計算模型的泛化誤差(暫且這么叫吧)。
??3、將K種情況下,模型的泛化誤差取均值,得到模型最終的泛化誤差。
注:一般2<=K<=10。
??訓練集中樣本數量要足夠多,一般至少大于總樣本數的50%。
??訓練集和測試集必須從完整的數據集中均勻取樣。均勻取樣的目的是希望減少訓練集、測試集與原數據集之間的偏差。當樣本數量足夠多時,通過隨機取樣,便可以實現均勻取樣的效果。