在模型的評估與調(diào)整的過程中,經(jīng)常會遇到過擬合與欠擬合的情況比被,如何有效的識別過擬合和欠擬合現(xiàn)象胯究,并了解其中原因稍计,有效的對模型進行調(diào)整。
什么是過擬合和欠擬合裕循?
知乎上看到一個機靈的回答臣嚣,"你太天真了":underfitting ";你想太多了":overfitting剥哑,人的學(xué)習(xí)和機器學(xué)習(xí)是如此相似茧球。過擬合就是模型對訓(xùn)練數(shù)據(jù)擬合呈現(xiàn)過當(dāng)?shù)那闆r,反映到評估指標(biāo)上星持,就是訓(xùn)練集上表現(xiàn)好抢埋,但在測試集和新數(shù)據(jù)上表現(xiàn)差,總結(jié)來說就是模型泛化能力差督暂,欠擬合是指模型在訓(xùn)練和預(yù)測時表現(xiàn)都不好揪垄,過擬合與欠擬合也可以用 Bias 與 Variance 的角度來解釋,欠擬合會導(dǎo)致高 Bias 逻翁,過擬合會導(dǎo)致高 Variance饥努,所以模型需要在 Bias 與 Variance 之間做出一個權(quán)衡。下圖表示了模型過擬合和欠擬合情況八回。
什么是方差和偏差
如上圖所示酷愧,我們理想的模型應(yīng)該是低方差,低偏差的缠诅,但實際上方差和偏差是兩個矛盾體溶浴,不可兼得,如下圖所示管引,模型復(fù)雜度和方差偏差聯(lián)系士败。
- 方差 Variance
高方差:描述就是模型針對不同樣本預(yù)測的結(jié)果會產(chǎn)生劇烈變化,用打靶的例子來描述褥伴,這個人手不穩(wěn)谅将,經(jīng)常抖動,導(dǎo)致彈著點分布比較散重慢。
- 偏差 Bias
高偏差:描述就是模型預(yù)測時預(yù)測的結(jié)果期望和真實結(jié)果相差比較大饥臂,用打靶的例子來說,這個人眼睛不太好似踱,每次都瞄不太準(zhǔn)隅熙,導(dǎo)致彈著點偏離靶心志衣。
過擬合和欠擬合原因是啥?
- 訓(xùn)練數(shù)據(jù)一般都是現(xiàn)實練數(shù)據(jù)的子集猛们。并且樣本中存在噪聲數(shù)據(jù)念脯,由于采樣錯誤,導(dǎo)致樣本的數(shù)據(jù)不能正確的反應(yīng)現(xiàn)實場景和業(yè)務(wù)弯淘。
- 模型太復(fù)雜绿店,過度的學(xué)習(xí)到了樣本里的噪聲數(shù)據(jù),并不能很好表達(dá)真實輸入輸出之間的關(guān)系庐橙。
怎么判斷模型過擬合欠擬合假勿?
- 過擬合:如果模型在訓(xùn)練集上效果很好,但是在測試集和新數(shù)據(jù)上效果很差就是過擬合态鳖。
- 欠擬合:如果在訓(xùn)練集和測試集新數(shù)據(jù)上效果都不好转培,就是欠擬合。
怎么減少模型過擬合浆竭?
(1)減少欠擬合方法:
1浸须、增加新特征,可以考慮加入進特征組合邦泄、高次特征删窒,來增大假設(shè)空間;
2、嘗試非線性模型顺囊,比如核SVM 肌索、決策樹、DNN等模型;
3特碳、如果有正則項可以較小正則項參數(shù) ;
4诚亚、Boosting ,Boosting 往往會有較小的 Bias,比如 Gradient Boosting 等.
(2)解決過擬合的方法:
1午乓、交叉檢驗站宗,通過交叉檢驗得到較優(yōu)的模型參數(shù);
2、特征選擇硅瞧,減少特征數(shù)或使用較少的特征組合份乒,對于按區(qū)間離散化的特征恕汇,增大劃分的區(qū)間;
3腕唧、正則化,常用的有 L1瘾英、L2 正則枣接。而且 L1正則還可以自動進行特征選擇;
4、如果有正則項則可以考慮增大正則項參數(shù) lambda;
5缺谴、增加訓(xùn)練數(shù)據(jù)可以有限的避免過擬合;
6但惶、Bagging ,將多個弱學(xué)習(xí)器Bagging 一下效果會好很多,比如隨機森林等.
7、降低模型復(fù)雜度:在數(shù)據(jù)較少時膀曾,降低模型復(fù)雜度是比較有效的方法县爬,適當(dāng)?shù)慕档湍P蛷?fù)雜度可以降低模型對噪聲的擬合度。神經(jīng)網(wǎng)絡(luò)中可以減少網(wǎng)絡(luò)層數(shù)添谊,減少神經(jīng)元個數(shù)财喳,dropout;決策樹可以控制樹的深度斩狱,剪枝等耳高。
(3)DNN中常見的方法:
1、早停策略所踊。本質(zhì)上是交叉驗證策略泌枪,選擇合適的訓(xùn)練次數(shù),避免訓(xùn)練的網(wǎng)絡(luò)過度擬合訓(xùn)練數(shù)據(jù)秕岛。
2碌燕、集成學(xué)習(xí)策略。而DNN可以用Bagging的思路來正則化继薛。首先我們要對原始的m個訓(xùn)練樣本進行有放回隨機采樣陆蟆,構(gòu)建N組m個樣本的數(shù)據(jù)集,然后分別用這N組數(shù)據(jù)集去訓(xùn)練我們的DNN惋增。即采用我們的前向傳播算法和反向傳播算法得到N個DNN模型的W,b參數(shù)組合叠殷,最后對N個DNN模型的輸出用加權(quán)平均法或者投票法決定最終輸出。不過用集成學(xué)習(xí)Bagging的方法有一個問題诈皿,就是我們的DNN模型本來就比較復(fù)雜林束,參數(shù)很多。現(xiàn)在又變成了N個DNN模型稽亏,這樣參數(shù)又增加了N倍壶冒,從而導(dǎo)致訓(xùn)練這樣的網(wǎng)絡(luò)要花更加多的時間和空間。因此一般N的個數(shù)不能太多截歉,比如5-10個就可以了胖腾。
3、DropOut策略瘪松。所謂的Dropout指的是在用前向傳播算法和反向傳播算法訓(xùn)練DNN模型時咸作,一批數(shù)據(jù)迭代時,隨機的從全連接DNN網(wǎng)絡(luò)中去掉一部分隱藏層的神經(jīng)元宵睦〖欠# 在對訓(xùn)練集中的一批數(shù)據(jù)進行訓(xùn)練時,我們隨機去掉一部分隱藏層的神經(jīng)元壳嚎,并用去掉隱藏層的神經(jīng)元的網(wǎng)絡(luò)來擬合我們的一批訓(xùn)練數(shù)據(jù)桐智。使用基于dropout的正則化比基于bagging的正則化簡單末早,這顯而易見,當(dāng)然天下沒有免費的午餐说庭,由于dropout會將原始數(shù)據(jù)分批迭代然磷,因此原始數(shù)據(jù)集最好較大,否則模型可能會欠擬合刊驴。
為什么能降低過擬合样屠?
- (1) Bagging:
Bagging對樣本重采樣,對每一重采樣得到的子樣本集訓(xùn)練一個模型缺脉,最后取平均痪欲。由于子樣本集的相似性以及使用的是同種模型,因此各模型有近似相等的bias和variance(事實上攻礼,各模型的分布也近似相同业踢,但不獨立)。
- (2)Regularization:
常用的有L1,L2正則化礁扮,正則化就是在目標(biāo)函數(shù)里面添加參數(shù)懲罰項知举,用來控制模型的復(fù)雜度,正則化項可以降低模型的權(quán)重值太伊,L1會產(chǎn)生稀疏解雇锡,L2會產(chǎn)生縮放效應(yīng)整體壓縮權(quán)重值,從而控制模型復(fù)雜度僚焦,根據(jù)奧卡姆剃刀原理锰提,擬合效果差不多情況下,模型復(fù)雜度越低越好芳悲。
-
(3)Dropout:
dropout在訓(xùn)練時會隨機隱藏一些神經(jīng)元立肘,導(dǎo)致訓(xùn)練過程中不會每次都更新(預(yù)測時不會發(fā)生dropout),最終的結(jié)果是每個神經(jīng)元的權(quán)重w都不會更新的太大名扛,起到了類似L2正則化的作用來降低過擬合風(fēng)險谅年。
- (4)Ealy Stopping
Early stopping便是一種迭代次數(shù)截斷的方法來防止過擬合的方法,即在模型對訓(xùn)練數(shù)據(jù)集迭代收斂之前停止迭代來防止過擬合肮韧。
Early stopping方法的具體做法是融蹂,在每一個Epoch結(jié)束時(一個Epoch集為對所有的訓(xùn)練數(shù)據(jù)的一輪遍歷)計算validation data的accuracy,當(dāng)accuracy不再提高時弄企,就停止訓(xùn)練超燃。這種做法很符合直觀感受,因為accurary都不再提高了桩蓉,在繼續(xù)訓(xùn)練也是無益的淋纲,只會提高訓(xùn)練的時間。那么該做法的一個重點便是怎樣才認(rèn)為validation accurary不再提高了呢院究?并不是說validation accuracy一降下來便認(rèn)為不再提高了洽瞬,因為可能經(jīng)過這個Epoch后,accuracy降低了业汰,但是隨后的Epoch又讓accuracy又上去了伙窃,所以不能根據(jù)一兩次的連續(xù)降低就判斷不再提高。一般的做法是样漆,在訓(xùn)練的過程中为障,記錄到目前為止最好的validation accuracy,當(dāng)連續(xù)10次Epoch(或者更多次)沒達(dá)到最佳accuracy時放祟,則可以認(rèn)為accuracy不再提高了鳍怨。
本文是作為個人學(xué)習(xí)總結(jié),參考了很多大神的博客及文章資料跪妥,非喜勿噴鞋喇,如有錯誤,懇請指正眉撵。
參考文章:
知乎--機器學(xué)習(xí)中用來防止過擬合的方法有哪些侦香?
知乎--機器學(xué)習(xí)防止欠擬合、過擬合方法
用簡單易懂的語言描述「過擬合 overfitting」