1. 程式人生 > >NG機器學習總結-(五)正則化 Regularization

NG機器學習總結-(五)正則化 Regularization

一、過擬合問題

在解釋什麼是過擬合問題之前,首先還是以房價預測為例。假設這裡我們用三種不同的模型去擬合數據集,如下圖三種情況:

從第一張圖看,我們發現我們是用一條直線去擬合數據,但是這樣的擬合效果並不好。從資料中,很明顯隨著房子面積的增大,房價的變化趨於穩定或者說越往後變化越平緩。這種情況屬於模型並沒有很好的擬合數據,我們稱這種情況為欠擬合(underfitting)或者叫做高偏差。

從第二張圖看,我們用的是一個二次函式模型去擬合數據,發現這樣的二次曲線擬合數據的效果很好(just right)。

從第三張圖看,我們用一個四次多項式模型去擬合數據,雖然它將資料集中所有的資料都擬合到沒有差別,但是這樣的模型對一個新的資料來說就有可能失去了有效性,我們稱這種情況為過擬合(overfitting)或者叫做高方差。

所以過擬合問題會出現在:當我們資料集中有很多的特徵時,雖然有時候我們的假設模型能夠很好擬合訓練集(也就是J(\theta)=\frac{1}{2m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})^{2}\approx 0),但是這樣的模型可能並不能泛化到新的樣本資料中去,所以並不能很好的預測新樣本資料。當然這裡的過擬合問題同樣出現在邏輯迴歸中,如下圖。

那麼,如果發生了過擬合問題,我們應該怎麼去處理?上面我們說到過多的特徵,同時訓練集的資料有限的時候,會導致過擬合問題,因此解決過擬合問題,一般有以下兩個辦法:

1.減少特徵的數量

    ----人工手動挑選,保留重要的特徵

    ----模型選擇演算法,這些演算法會自動選擇特徵變數(暫不介紹)

2.正則化

    ----保留所有的特徵變數,但是會適當減小特徵變數的數量級(減小不重要特徵的影響)

二、損失函式

正則化可以解決過擬合的問題,但是正則化到底怎麼體現呢?

左右兩個模型分別是二次函式模型和多項式模型來擬合數據集的結果,我們知道多項式模型發生了過擬合的問題,這個時候如果我們再多項式模型上加上懲罰項,使得引數\theta_{3}\theta_{4}足夠的小,那麼多項式模型就會像二次函式模型一樣了。比如上式中損失函式,我們加了兩個懲罰項1000\theta_{3}1000\theta_{4},這樣的損失函式的值將會變的很大,當然,當我們在優化這個損失函式的時候,我們將會使得\theta_{3}\theta_{4}的值接近於0,等同於我們忽略了這個引數一樣,如果做到這一點,那麼該多項式模型就會近似二次函式。

因此,我們這裡可以得出正則化的一般思路:當模型中的特徵引數對應一個較小的取值時,那麼我們往往會得到一個形式更簡單的模型(其中換種思路,就相當於其對應的特徵不重要,特徵的選擇過程)。因此,當我們的特徵有很多的時候,而我們並不知道如何選擇關聯更好的特徵引數,如何減小引數的數目,在正則化中,我們要做的事情就是在模型的損失函式中加入引數項,如下圖,這裡的\lambda \sum_{j=1}^{n}\theta^{2}_{j}

就是正則化項,\lambda稱為正則化引數(懲罰項係數)。

正則化引數\lambda平衡擬合訓練資料的目標和保持引數值較小的目標。從而來保持假設的形式相對簡單,來避免過度的擬合。如果這裡的正則化引數\lambda取值很大的時候會出現什麼情況呢?如下圖:

我們將會非常大地懲罰引數θ1 θ2 θ3 θ4 … 也就是說,我們最終懲罰θ1 θ2 θ3 θ4 …  在一個非常大的程度,那麼我們會使所有這些引數接近於零。

如果我們這麼做,那麼就是我們的假設中相當於去掉了這些項,並且使我們只是留下了一個簡單的假設,這個假設只能表明房屋價格等於 θ0 的值,那就是類似於擬合了一條水平直線,對於資料來說這就是一個欠擬合 (underfitting)。這種情況下這一假設它是條失敗的直線,對於訓練集來說這只是一條平滑直線,它沒有任何趨勢,它不會去趨向大部分訓練樣本的任何值。因此當正則化引數取值很大的時候,會出現如下這些問題:

因此,為了使正則化運作良好,我們應當注意一些方面,應該去選擇一個不錯的正則化引數 \lambda。當我們以後講到多重選擇時我們將討論一種方法來自動選擇正則化引數 \lambda ,為了使用正則化,接下來我們將把這些概念應用到到線性迴歸和邏輯迴歸中去,那麼我們就可以讓他們避免過度擬合了。

三、正則線性迴歸

線性迴歸的損失函式如下:

J(\theta)=\frac{1}{2m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)}-y^{(i)})^{2}

加上了正則化項:

J(\theta)=\frac{1}{2m}\left [ \sum_{i=1}^{m}(h_{\theta}(x^{(i)}-y^{(i)})^{2} + \lambda \sum_{j=1}^{n}\theta_{j}^{2} \right ]

然後根據梯度下降演算法:

對於標準方程來說,當然前提是中間的矩陣可逆,建議加上正則化手推一遍。

四、正則邏輯迴歸

邏輯迴歸的損失函式如下:

J(\theta)=\frac{1}{m} \sum_{i=1}^{m}Cost(h_{\theta}(x^{(i)}),y^{(i)}) \\=-\frac{1}{m}[\sum_{i=1}^{m}y^{(i)}logh_{\theta}(x^{(i)})+(1-y^{(i)})log(1-h_{\theta}(x^{(i)}))]

加上正則化項:

J(\theta)==-\frac{1}{m}[\sum_{i=1}^{m}y^{(i)}logh_{\theta}(x^{(i)})+(1-y^{(i)})log(1-h_{\theta}(x^{(i)}))]+\frac{\lambda }{2m}\sum_{j=1}^{n}\theta_{j}^{2}

梯度下降演算法求解:

TIPS:有關正則化項的問題,其實有很多的知識,比如選擇不同正則化項,L1範數,L2範數等,NG視訊沒有涉及這些,只是方便初學者大致瞭解過擬合怎麼樣用正則化來解決。