过拟合及改善方法
最近在學(xué)習(xí)深度學(xué)習(xí)相關(guān)內(nèi)容,關(guān)于機(jī)器學(xué)習(xí)中過擬合的幾種方法進(jìn)行總結(jié)。
首先什么是過擬合,簡而言之就是訓(xùn)練成功的模型對于訓(xùn)練集具有非常好的一個(gè)預(yù)測能力,但是對于測試集的數(shù)據(jù)其預(yù)測能力往往差強(qiáng)人意。
可以用以下幾幅圖比較形象地解釋:
上圖中的小圓點(diǎn)的待擬合的數(shù)據(jù)點(diǎn),我們用M次多項(xiàng)式進(jìn)行擬合的過程中,M值越大,用于擬合的參數(shù)越多
顯然M=0時(shí)候,相當(dāng)于y=c0,參數(shù)只有一個(gè)c0,是一條平行于x軸的直線;
M=1的時(shí)候, y=c1*x+c0,兩個(gè)參數(shù)c1,c0,是一條直線;
M=1的時(shí)候, y=c2*x*x+c1*x+c0,有三個(gè)參數(shù)c2,c1,c0,擬合效果比較好;
同理,當(dāng)M=9時(shí)候,有9個(gè)參數(shù),此時(shí)生成的曲線經(jīng)過了每一個(gè)樣本點(diǎn),但是,訓(xùn)練誤差是0,就從訓(xùn)練數(shù)據(jù)擬合的角度來說,效果是最好的,但是這種訓(xùn)練結(jié)果對于測試數(shù)據(jù)的擬合效果將非常差,這時(shí)候就出現(xiàn)了過擬合,所以在模型或者參數(shù)選擇的時(shí)候,不僅要考慮訓(xùn)練數(shù)據(jù),還要考慮測試數(shù)據(jù)。
發(fā)生過擬合的原因主要有:
1、訓(xùn)練樣本過少,或者樣本數(shù)據(jù)噪聲過大
2、參數(shù)過多,模型過于復(fù)雜
為了改善過擬合,可以采用以下方法:
1、數(shù)據(jù)擴(kuò)增:
當(dāng)數(shù)據(jù)本身有限的時(shí)候,應(yīng)該對樣本數(shù)據(jù)做一些處理從而生成新的樣本數(shù)據(jù),比如在CNN網(wǎng)絡(luò)中,可以將圖像利用各種濾波器進(jìn)行濾波,做一個(gè)旋轉(zhuǎn),平移等變換,或者對圖像進(jìn)行切割等。
2、正則化方法
正則化就是在對目標(biāo)函數(shù)進(jìn)行優(yōu)化的時(shí)候,在目標(biāo)函數(shù)后面加上一個(gè)正則化項(xiàng),正則化項(xiàng)一般是模型復(fù)雜度的一個(gè)單調(diào)遞增函數(shù),模型越復(fù)雜,該正則化值就會越大,正則化項(xiàng)一般可以取模型參數(shù)向量的范數(shù)。
3、dropout
在神經(jīng)網(wǎng)絡(luò)中,Dropout是通過修改神經(jīng)網(wǎng)絡(luò)本身結(jié)構(gòu)來實(shí)現(xiàn)的,在訓(xùn)練開始時(shí),隨機(jī)得刪除一些(可以設(shè)定為一半,也可以為1/3,1/4等)隱藏層神經(jīng)元,即認(rèn)為這些神經(jīng)元不存在,同時(shí)保持輸入層與輸出層神經(jīng)元的個(gè)數(shù)不變,然后按照BP學(xué)習(xí)算法對ANN中的參數(shù)進(jìn)行學(xué)習(xí)更新。這樣一次迭代更新便完成了。下一次迭代中,同樣隨機(jī)刪除一些神經(jīng)元,與上次不一樣,做隨機(jī)選擇。這樣一直進(jìn)行瑕疵,直至訓(xùn)練結(jié)束。
4、交叉驗(yàn)證
交叉驗(yàn)證的基本思想就是重復(fù)地使用數(shù)據(jù):把給定的數(shù)據(jù)進(jìn)行劃分,將劃分的數(shù)據(jù)集組合為訓(xùn)練集和測試集,在此基礎(chǔ)上反復(fù)地進(jìn)行訓(xùn)練,測試以及模型選擇。
總結(jié)
- 上一篇: 【算法】SVM分类精度为0,结果很烂怎么
- 下一篇: python九九乘法表矩形_python