1. 程式人生 > >欠擬合與過擬合的區別

欠擬合與過擬合的區別

欠擬合是指模型在訓練集、驗證集和測試集上均表現不佳的情況
過擬合是指模型在訓練集上表現很好,到了驗證和測試階段就大不如意了,即模型的泛化能力很差
欠擬合和過擬合一直是機器學習訓練中的難題,在進行模型訓練的時候往往要對這二者進行權衡,使得模型不僅在訓練集上表現良好,在驗證集以及測試集上也要有出色的預測能力。

解決欠擬合(高偏差)的方法
1.模型複雜化
對同一個演算法複雜化。例如迴歸模型新增更多的高次項,增加決策樹的深度,增加神經網路的隱藏層數和隱藏單元數等
棄用原來的演算法,使用一個更加複雜的演算法或模型。例如用神經網路來替代線性迴歸,用隨機森林來代替決策樹等
2.增加更多的特徵,使輸入資料具有更強的表達能力
特徵挖掘十分重要,尤其是具有強表達能力的特徵,往往可以抵過大量的弱表達能力的特徵
特徵的數量往往並非重點,質量才是,總之強特最重要
能否挖掘出強特,還在於對資料本身以及具體應用場景的深刻理解,往往依賴於經驗
3.調整引數和超引數
超引數包括:
神經網路中:學習率、學習衰減率、隱藏層數、隱藏層的單元數、Adam優化演算法中的β1和β2引數、batch_size數值等
其他演算法中:隨機森林的樹數量,k-means中的cluster數,正則化引數λ等
4.增加訓練資料往往沒有用
欠擬合本來就是模型的學習能力不足,增加再多的資料給它訓練它也沒能力學習好
5.降低正則化約束
正則化約束是為了防止模型過擬合,如果模型壓根不存在過擬合而是欠擬合了,那麼就考慮是否降低正則化引數λ或者直接去除正則化項
解決過擬合(高方差)的方法
1.增加訓練資料數
發生過擬合最常見的現象就是資料量太少而模型太複雜
過擬合是由於模型學習到了資料的一些噪聲特徵導致,增加訓練資料的量能夠減少噪聲的影響,讓模型更多地學習資料的一般特徵
增加資料量有時可能不是那麼容易,需要花費一定的時間和精力去搜集處理資料
利用現有資料進行擴充或許也是一個好辦法。例如在影象識別中,如果沒有足夠的圖片訓練,可以把已有的圖片進行旋轉,拉伸,映象,對稱等,這樣就可以把資料量擴大好幾倍而不需要額外補充資料
注意保證訓練資料的分佈和測試資料的分佈要保持一致,二者要是分佈完全不同,那模型預測真可謂是對牛彈琴了
2.使用正則化約束
在代價函式後面新增正則化項,可以避免訓練出來的引數過大從而使模型過擬合。使用正則化緩解過擬合的手段廣泛應用,不論是線上性迴歸還是在神經網路的梯度下降計算過程中,都應用到了正則化的方法。常用的正則化有l1正則和l2正則,具體使用哪個視具體情況而定,一般l2正則應用比較多
3.減少特徵數
欠擬合需要增加特徵數,那麼過擬合自然就要減少特徵數。去除那些非共性特徵,可以提高模型的泛化能力
4.調整引數和超引數
不論什麼情況,調參是必須的
5.降低模型的複雜度
欠擬合要增加模型的複雜度,那麼過擬合正好反過來
6.使用Dropout
這一方法只適用於神經網路中,即按一定的比例去除隱藏層的神經單元,使神經網路的結構簡單化
7.提前結束訓練
即early stopping,在模型迭代訓練時候記錄訓練精度(或損失)和驗證精度(或損失),倘若模型訓練的效果不再提高,比如訓練誤差一直在降低但是驗證誤差卻不再降低甚至上升,這時候便可以結束模型訓練了