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