一 .過擬合
之前我們有提到過擬合的概念,在計算模型時,我們希望經(jīng)驗誤差可以盡可能的小,甚至是0。但是,這樣并不是最好的模型,當學習器把訓練樣本學習的太好了的時候,很可能已經(jīng)把訓練樣本自身的一些特點當成了所有潛在樣本都會具有的性質(zhì),這會導致泛化能力下降,泛化誤差增大,這種現(xiàn)象叫做過擬合。
我們來看下圖:
第一個模型是一個線性模型,欠擬合,不能很好地適應我們的訓練集。
第二個模型恰到好處。
第三個模型是一個四次方的模型,它通過了所有樣本點,過于擬合原始數(shù)據(jù)。這個模型把每個樣本的特性當成了所有樣本的共性,會導致泛化能力差,預測準確性低。

二. 什么情況下容易發(fā)生過擬合
過度擬合的問題通常發(fā)生在變量(特征)因子過多,而訓練數(shù)據(jù)又較少的時候。這種情況下訓練出的方程總是能很好的擬合訓練數(shù)據(jù),也就是說,我們的代價函數(shù)可能非常接近于 0 或者就為 0。
三. 如何處理過擬合
過擬合發(fā)生時,函數(shù)圖像一般比較復雜,而處理過擬合問題就是要簡化函數(shù),使函數(shù)不那么復雜。導致函數(shù)復雜的原因,一般是函數(shù)項過多以及存在高指數(shù)的項。所以我們可以從這2方面入手:
1.減少特征變量
我們可以人工檢查每一項變量,并以此來確定哪些變量更為重要,然后,保留那些更為重要的特征變量。至于,哪些變量應該舍棄,我們以后在討論,這會涉及到模型選擇算法,這種算法是可以自動選擇采用哪些特征變量,自動舍棄不需要的變量。這類做法非常有效,但是其缺點是當你舍棄一部分特征變量時,你也舍棄了問題中的一些信息。
2.正則化
正則化的思想是不舍棄任何特征變量,但是降低高指數(shù)變量的系數(shù)(θ)。具體做法是在代價函數(shù)中加入懲罰項。這樣做的話,我們在嘗試最小化代價時也需要將這個懲罰納入考慮中,并最終導致選擇較小一些的參數(shù)。
舉個栗子:
比如第三個模型中,曲線很復雜,我們要懲罰高階項的系數(shù),θ3和θ4是我們要懲罰的目標,我們可以修改代價函數(shù)如下
1000 只是我隨便寫的某個較大的數(shù)字而已。現(xiàn)在,如果我們要最小化這個函數(shù),那么為了最小化這個新的代價函數(shù),我們要讓 θ3 和 θ4 盡可能小。因為,如果你在原有代價函數(shù)的基礎上加上 1000 乘以 θ3 這一項 ,那么這個新的代價函數(shù)將變得很大,所以,當我們最小化這個新的代價函數(shù)時, 我們將使 θ3 的值接近于 0,同樣 θ4 的值也接近于 0,就像我們忽略了這兩個值一樣。如果我們做到這一點( θ3 和 θ4 接近 0 ),那么我們將得到一個近似的二次函數(shù),從而完成了簡化函數(shù)。
更一般的情況:
更一般的情況,我們并不知道 θ3 和 θ4 是高階多項式的項。所以,如果我們有一百個特征,我們并不知道如何選擇關(guān)聯(lián)度更好的參數(shù),如何縮小參數(shù)的數(shù)目等等。因此在正則化里,我們要做的事情,就是減小所有的參數(shù)值,因為我們并不知道是哪一個或哪幾個要去縮小。因此,我們需要修改代價函數(shù),在這后面添加一項,就像我們在方括號里的這項。當我們添加一個額外的正則化項的時候,我們收縮了每個參數(shù)。
我們來看一下這個正則化項:

- λ是正則化參數(shù),它控制懲罰的程度,λ太小,懲罰度不夠,沒起到簡化函數(shù)的作用;λ太大,懲罰太嚴重,所有系數(shù)都趨近于0,最后得到一條直線,嚴重欠擬合。
- 注意正則化項是從j=1開始的,懲罰系數(shù)不包含常數(shù)項θ0,這是慣例,約定俗成的。
總結(jié)
正則化的目的就是簡化函數(shù),使函數(shù)變得平滑。實際上,參數(shù)的值越小,通常對應于越光滑的函數(shù),也就是更加簡單的函數(shù)。因此就不易發(fā)生過擬合的問題。