欠擬合、過擬合及其解決方法

轉載.https://blog.csdn.net/willduan1/article/details/53070777
在我們機器學習或者訓練深度神經網絡的時候經常會出現欠擬合和過擬合這兩個問題,但是,一開始我們的模型往往是欠擬合的,也正是因爲如此纔有了優化的空間,我們需要不斷的調整算法來使得模型的表達能拿更強。但是優化到了一定程度就需要解決過擬合的問題了,這個問題也在學術界討論的比較多。(之前搜了很多有的博客,講的都不太全,因此我重新整理總結了一遍,同時加入了自己的理解,方便自己和後來人查閱)

首先就是我們在進行模型訓練的時候會出現模型不能夠很好地擬合數據的情況,這個時候就需要我們來判斷究竟現在的模型是欠擬合還是過擬合,那麼怎麼來判斷這兩者?的情況呢有兩種方法:

首先看一下三種誤差的計算方法:

訓練錯誤

交叉驗證錯誤

測試錯誤

1)學習曲線(學習曲線)

學習曲線就是比較j_train和j_cv。如下圖所示,爲一般的學習曲線,藍色的線表示訓練集上的誤差j_train,粉色的線表示驗證集上的誤差j_cv,橫軸表示訓練集合的大小。

剛開始處於“A”點,表示當訓練數據很小時,很容易時訓練集上的誤差非常小,此時處於過擬合狀態。隨着訓練數據的增加,訓練數據上的誤差J_train越來越大,而驗證集上的誤差J_cv越來越小,J_train和J_cv越來越接近但始終保持J_cv> J_train。

2)交叉驗證(交叉驗證)

這裏首先解釋一下bias和variance的概念。模型的錯誤=偏差+差異,錯誤反映的是整個模型的準確度,Bias反映的是模型在樣本上的輸出與真實值之間的誤差,即模型本身的精準度,差異反映的是模型每一次輸出結果與模型輸出期望之間的誤差,即模型的穩定性。

我們可以根據j_cv與j_train兩個來判斷是處於欠擬合還是過擬合。

當觀察到J_cv很大時,可能處在途中藍色圓圈中的兩個位置,雖然觀察到的現象很相似(J_cv都很大),但這兩個位置的狀態是非常不同的,處理方法也完全不同。

當交叉驗證錯誤(Jcv)跟訓練誤差(Jtrain)差不多,並且Jtrain較大時,即圖中標出的偏,此時高偏低方差,當前模型更可能存在欠擬合。
當Jcv >> Jtrain且Jtrain較小時,即圖中標出的方差時,此時低偏差高方差,當前模型更可能存在過擬合。


欠擬合

首先欠擬合就是模型沒有很好地捕捉到數據特徵,不能夠很好地擬合數據,例如下面的例子:

左圖表示大小與獎品關係的數據,中間的圖就是出現欠擬合的模型,不能夠很好地擬合數據,如果在中間的圖的模型後面再加一個二次項,就可以很好地擬合圖中的數據了,如右面的圖所示。

解決方法:

1)添加其他特徵項,有時候我們模型出現欠擬合的時候是因爲特徵項不夠導致的,可以添加其他特徵項來很好地解決。例如,“組合”,“泛化”,“相關性“三類特徵是特徵添加的重要手段,無論在什麼場景,都可以照葫蘆畫瓢,總會得到意想不到的效果。除上面的特徵之外,‘上下文特徵’,‘平臺特徵’等等,都可以作爲特徵添加的首選項。

2)添加多項式特徵,這個在機器學習算法裏面用的很普遍,例如將線性模型通過添加二次項或者三次項使模型泛化能力更強。例如上面的圖片的例子。

3)減少正則化參數,正則化的目的是用來防止過擬合的,但是現在模型出現了欠擬合,則需要減少正則化參數。

2.過擬合

通俗一點地來說過擬合就是模型把數據學習的太徹底,以至於把噪聲數據的特徵也學習到了,這樣就會導致在後期測試的時候不能夠很好地識別數據,即不能正確的分類,模型泛化能力太差。例如下面的例子。

上面左圖表示大小和獎品的關係,我們學習到的模型曲線如右圖所示,雖然在訓練的時候模型可以很好地匹配數據,但是很顯然過度扭曲了曲線,不是真實的尺寸與獎品曲線。

解決方法:

1)重新清洗數據,導致過擬合的一個原因也有可能是數據不純導致的,如果出現了過擬合就需要我們重新清洗數據。

2)增大數據的訓練量,還有一個原因就是我們用於訓練的數據量太小導致的,訓練數據佔總數據的比例過小。

3)採用正則化方法。正則化方法包括L0正則,L1正則和L2正則,而正則一般是在目標函數之後加上對於的範數。但是在機器學習中一般使用L2正則,下面看具體的原因。

L0範數是指向量中非0的元素的個數.L1範數是指向量中各個元素絕對值之和,也叫“稀疏規則算子”(Lasso regularization)。兩者都可以實現稀疏性,既然L0可以實現稀疏,爲什麼不用L0,而要用L1呢?個人理解一是因爲L0範數很難優化求解(NP難問題),二是L1範數是L0範數的最優凸近似,而且它比L0範數要容易優化求解。所以大家才把目光和萬千寵愛轉於L1範數。

L2範數是指向量各元素的平方和然後求平方根。可以使得W¯¯的每個元素都很小,都接近於0,但與L1範數不同,它不會讓它等於0,而是接近於0.L2正則項起到使得參數W¯¯變小加劇的效果,但是爲什麼可以防止過擬合呢一個通俗的理解便是:更小的參數值w ^意味着模型的複雜度更低,對訓練數據的擬合剛剛好(奧卡姆剃刀),不會過分擬合訓練數據,從而使得不會過擬合,以提高模型的泛化能力。還有就是看到有人說L2範數有助於處理條件號不好的情況下矩陣求逆很困難的問題(具體這兒我也不是太理解)。

4)採用差方法。這個方法在神經網絡裏面很常用.dropout方法是ImageNet中提出的一種方法,通俗一點講就是差方法在訓練的時候讓神經元以一定的概率不工作。具體看下圖:

如上圖所示,左邊一個圖是沒用用差方法的標準神經網絡,右邊b圖是在訓練過程中使用了差方法的神經網絡,即在訓練時候以一定的概率p來跳過一定的神經元。

以上就是關於過擬合,欠擬合的解釋以及判斷和其對應的解決方法。

------ ------ EOF

參考文獻:

http://www.veryread.net/n-101-133184.html

http://blog.csdn.net/zouxy09/article/details/24971995

http://blog.csdn.net/wtq1993/article/details/51746847

http://blog.csdn.net/heyongluoyao8/article/details/49429629

http://blog.csdn.net/linkin1005/article/details/42869331

http://ljwsummer.github.io/posts/advice-for-applying-machine-learning.html
--------------------- 
作者:will_duan 
來源:CSDN 
原文:HTTPS://blog.csdn.net/willduan1/article/details/53070777 
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章