如何防止我的模型過擬合?這篇文章給出了6大必備方法
正如巴菲特所言:「近似的正確好過精確的錯誤。」
在機器學習中,過擬合(overfitting)會使模型的預(yù)測性能變差,通常發(fā)生在模型過于復雜的情況下,如參數(shù)過多等。本文對過擬合及其解決方法進行了歸納闡述。
在機器學習中,如果模型過于專注于特定的訓練數(shù)據(jù)而錯過了要點,那么該模型就被認為是過擬合。該模型提供的答案和正確答案相距甚遠,即準確率降低。這類模型將無關(guān)數(shù)據(jù)中的噪聲視為信號,對準確率造成負面影響。即使模型經(jīng)過很好地訓練使損失很小,也無濟于事,它在新數(shù)據(jù)上的性能仍然很差。欠擬合是指模型未捕獲數(shù)據(jù)的邏輯。因此,欠擬合模型具備較低的準確率和較高的損失。

如何確定模型是否過擬合?
構(gòu)建模型時,數(shù)據(jù)會被分為 3 類:訓練集、驗證集和測試集。訓練數(shù)據(jù)用來訓練模型;驗證集用于在每一步測試構(gòu)建的模型;測試集用于最后評估模型。通常數(shù)據(jù)以 80:10:10 或 70:20:10 的比率分配。
在構(gòu)建模型的過程中,在每個 epoch 中使用驗證數(shù)據(jù)測試當前已構(gòu)建的模型,得到模型的損失和準確率,以及每個 epoch 的驗證損失和驗證準確率。模型構(gòu)建完成后,使用測試數(shù)據(jù)對模型進行測試并得到準確率。如果準確率和驗證準確率存在較大的差異,則說明該模型是過擬合的。
如果驗證集和測試集的損失都很高,那么就說明該模型是欠擬合的。
如何防止過擬合
1.交叉驗證
交叉驗證是防止過擬合的好方法。在交叉驗證中,我們生成多個訓練測試劃分(splits)并調(diào)整模型。K-折驗證是一種標準的交叉驗證方法,即將數(shù)據(jù)分成 k 個子集,用其中一個子集進行驗證,其他子集用于訓練算法。
交叉驗證允許調(diào)整超參數(shù),性能是所有值的平均值。該方法計算成本較高,但不會浪費太多數(shù)據(jù)。交叉驗證過程參見下圖:

2.用更多數(shù)據(jù)進行訓練
用更多相關(guān)數(shù)據(jù)訓練模型有助于更好地識別信號,避免將噪聲作為信號。數(shù)據(jù)增強是增加訓練數(shù)據(jù)的一種方式,可以通過翻轉(zhuǎn)(flipping)、平移(translation)、旋轉(zhuǎn)(rotation)、縮放(scaling)、更改亮度(changing brightness)等方法來實現(xiàn)。
3.移除特征
移除特征能夠降低模型的復雜性,并且在一定程度上避免噪聲,使模型更高效。為了降低復雜度,我們可以移除層或減少神經(jīng)元數(shù)量,使網(wǎng)絡(luò)變小。
4.早停
對模型進行迭代訓練時,我們可以度量每次迭代的性能。當驗證損失開始增加時,我們應(yīng)該停止訓練模型,這樣就能阻止過擬合。
下圖展示了停止訓練模型的時機:

5.正則化
正則化可用于降低模型的復雜性。這是通過懲罰損失函數(shù)完成的,可通過 L1 和 L2 兩種方式完成,數(shù)學方程式如下:

L1 懲罰的目的是優(yōu)化權(quán)重絕對值的總和。它生成一個簡單且可解釋的模型,且對于異常值是魯棒的。

L2 懲罰權(quán)重值的平方和。該模型能夠?qū)W習復雜的數(shù)據(jù)模式,但對于異常值不具備魯棒性。
這兩種正則化方法都有助于解決過擬合問題,讀者可以根據(jù)需要選擇使用。
6.Dropout
Dropout 是一種正則化方法,用于隨機禁用神經(jīng)網(wǎng)絡(luò)單元。它可以在任何隱藏層或輸入層上實現(xiàn),但不能在輸出層上實現(xiàn)。該方法可以免除對其他神經(jīng)元的依賴,進而使網(wǎng)絡(luò)學習獨立的相關(guān)性。該方法能夠降低網(wǎng)絡(luò)的密度,如下圖所示:

總結(jié)
過擬合是一個需要解決的問題,因為它會讓我們無法有效地使用現(xiàn)有數(shù)據(jù)。有時我們也可以在構(gòu)建模型之前,預(yù)估到會出現(xiàn)過擬合的情況。通過查看數(shù)據(jù)、收集數(shù)據(jù)的方式、采樣方式,錯誤的假設(shè),錯誤表征能夠發(fā)現(xiàn)過擬合的預(yù)兆。為避免這種情況,請在建模之前先檢查數(shù)據(jù)。但有時在預(yù)處理過程中無法檢測到過擬合,而是在構(gòu)建模型后才能檢測出來。我們可以使用上述方法解決過擬合問題。





























