【轉載】正則化避免過擬合

https://www.cnblogs.com/jianxinzhou/p/4083921.html

1. The Problem of Overfitting

image

1

仍是來看預測房價的這個例子,咱們先對該數據作線性迴歸,也就是左邊第一張圖。html

若是這麼作,咱們能夠得到擬合數據的這樣一條直線,可是,實際上這並非一個很好的模型。咱們看看這些數據,很明顯,隨着房子面積增大,住房價格的變化趨於穩定或者說越往右越平緩。所以線性迴歸並無很好擬合訓練數據。算法

咱們把此類狀況稱爲欠擬合(underfitting),或者叫做叫作高誤差(bias)。函數

這兩種說法大體類似,都表示沒有很好地擬合訓練數據。高誤差這個詞是 machine learning 的研究初期傳下來的一個專業名詞,具體到這個問題,意思就是說若是用線性迴歸這個算法去擬合訓練數據,那麼該算法實際上會產生一個很是大的誤差或者說存在一個很強的偏見。學習

第二幅圖,咱們在中間加入一個二次項,也就是說對於這幅數據咱們用二次函數去擬合。天然,能夠擬合出一條曲線,事實也證實這個擬合效果很好。優化

另外一個極端狀況是,若是在第三幅圖中對於該數據集用一個四次多項式來擬合。所以在這裏咱們有五個參數θ0到θ4,這樣咱們一樣能夠擬合一條曲線,經過咱們的五個訓練樣本,咱們能夠獲得如右圖的一條曲線。lua

一方面,咱們彷佛對訓練數據作了一個很好的擬合,由於這條曲線經過了全部的訓練實例。可是,這其實是一條很扭曲的曲線,它不停上下波動。所以,事實上咱們並不認爲它是一個預測房價的好模型。spa

因此,咱們把這類狀況叫作過擬合(overfitting),也叫高方差(variance)。3d

與高誤差同樣,高方差一樣也是一個歷史上的叫法。從第一印象上來講,若是咱們擬合一個高階多項式,那麼這個函數能很好的擬合訓練集(能擬合幾乎全部的訓練數據),但這也就面臨函數可能太過龐大的問題,變量太多。指針

同時若是咱們沒有足夠的數據集(訓練集)去約束這個變量過多的模型,那麼就會發生過擬合。視頻

2

過分擬合的問題一般發生在變量(特徵)過多的時候。這種狀況下訓練出的方程老是能很好的擬合訓練數據,也就是說,咱們的代價函數可能很是接近於 0 或者就爲 0。

可是,這樣的曲線想方設法的去擬合訓練數據,這樣會致使它沒法泛化到新的數據樣本中,以致於沒法預測新樣本價格。在這裏,術語"泛化"指的是一個假設模型可以應用到新樣本的能力。新樣本數據是指沒有出如今訓練集中的數據。

image
以前,咱們看到了線性迴歸狀況下的過擬合。相似的狀況也適用於邏輯迴歸。

3

那麼,若是發生了過擬合問題,咱們應該如何處理?

過多的變量(特徵),同時只有很是少的訓練數據,會致使出現過分擬合的問題。所以爲了解決過分擬合,有如下兩個辦法。

image

方法一:儘可能減小選取變量的數量

具體而言,咱們能夠人工檢查每一項變量,並以此來肯定哪些變量更爲重要,而後,保留那些更爲重要的特徵變量。至於,哪些變量應該捨棄,咱們之後在討論,這會涉及到模型選擇算法,這種算法是能夠自動選擇採用哪些特徵變量,自動捨棄不須要的變量。這類作法很是有效,可是其缺點是當你捨棄一部分特徵變量時,你也捨棄了問題中的一些信息。例如,也許全部的特徵變量對於預測房價都是有用的,咱們實際上並不想捨棄一些信息或者說捨棄這些特徵變量。

方法二:正則化

正則化中咱們將保留全部的特徵變量,可是會減少特徵變量的數量級(參數數值的大小θ(j))。

這個方法很是有效,當咱們有不少特徵變量時,其中每個變量都能對預測產生一點影響。正如咱們在房價預測的例子中看到的那樣,咱們能夠有不少特徵變量,其中每個變量都是有用的,所以咱們不但願把它們刪掉,這就致使了正則化概念的發生。

接下來咱們會討論怎樣應用正則化和什麼叫作正則化均值,而後將開始討論怎樣使用正則化來使學習算法正常工做,並避免過擬合。

2. Cost Function

image

1

在前面的介紹中,咱們看到了若是用一個二次函數來擬合這些數據,那麼它給了咱們一個對數據很好的擬合。然而,若是咱們用一個更高次的多項式去擬合,最終咱們可能會獲得一個曲線,它能很好地擬合訓練集,但卻並非一個好的結果,由於它過分擬合了數據,所以,通常性並非很好。

讓咱們考慮下面的假設,咱們想要加上懲罰項,從而使參數 θ3 和 θ4 足夠的小。

image

這裏個人意思就是,上圖的式子是咱們的優化目標,也就是說咱們須要儘可能減小代價函數的均方偏差。

對於這個函數咱們對它添加一些項,加上 1000 乘以 θ3 的平方,再加上 1000 乘以 θ4 的平方,

image

1000 只是我隨便寫的某個較大的數字而已。如今,若是咱們要最小化這個函數,那麼爲了最小化這個新的代價函數,咱們要讓 θ3 和 θ4 儘量小。由於,若是你在原有代價函數的基礎上加上 1000 乘以 θ3 這一項 ,那麼這個新的代價函數將變得很大,因此,當咱們最小化這個新的代價函數時, 咱們將使 θ的值接近於 0,一樣 θ4 的值也接近於 0,就像咱們忽略了這兩個值同樣。若是咱們作到這一點( θ3 和 θ4 接近 0 ),那麼咱們將獲得一個近似的二次函數。

image

所以,咱們最終恰當地擬合了數據,咱們所使用的正是二次函數加上一些很是小,貢獻很小項(由於這些項的 θ3、 θ4 很是接近於0)。顯然,這是一個更好的假設。

2

image

更通常地,這裏給出了正規化背後的思路。這種思路就是,若是咱們的參數值對應一個較小值的話(參數值比較小),那麼每每咱們會獲得一個形式更簡單的假設。

在咱們上面的例子中,咱們懲罰的只是 θ3 和 θ4 ,使這兩個值均接近於零,從而咱們獲得了一個更簡單的假設,實際上這個假設大抵上是一個二次函數。

但更通常地說,若是咱們像懲罰 θ3 和 θ這樣懲罰其它參數,那麼咱們每每能夠獲得一個相對較爲簡單的假設。

實際上,這些參數的值越小,一般對應于越光滑的函數,也就是更加簡單的函數。所以 就不易發生過擬合的問題。

我知道,爲何越小的參數對應於一個相對較爲簡單的假設,對你來講如今不必定徹底理解,可是在上面的例子中使 θ3 和 θ很小,而且這樣作能給咱們一個更加簡單的假設,這個例子至少給了咱們一些直觀感覺。

來讓咱們看看具體的例子,對於房屋價格預測咱們可能有上百種特徵,與剛剛所講的多項式例子不一樣,咱們並不知道 θ3 和 θ是高階多項式的項。因此,若是咱們有一百個特徵,咱們並不知道如何選擇關聯度更好的參數,如何縮小參數的數目等等。

所以在正則化裏,咱們要作的事情,就是把減少咱們的代價函數(例子中是線性迴歸的代價函數)全部的參數值,由於咱們並不知道是哪個或哪幾個要去縮小。

所以,咱們須要修改代價函數,在這後面添加一項,就像咱們在方括號裏的這項。當咱們添加一個額外的正則化項的時候,咱們收縮了每一個參數。

image

順便說一下,按照慣例,咱們沒有去懲罰 θ0,所以 θ0 的值是大的。這就是一個約定從 1 到 n 的求和,而不是從 0 到 n 的求和。但其實在實踐中
這隻會有很是小的差別,不管你是否包括這 θ0 這項。可是按照慣例,一般狀況下咱們仍是隻從 θ1 到 θn 進行正則化。

image


下面的這項就是一個正則化項

image
而且 λ 在這裏咱們稱作正則化參數。

λ 要作的就是控制在兩個不一樣的目標中的平衡關係。

第一個目標就是咱們想要訓練,使假設更好地擬合訓練數據。咱們但願假設可以很好的適應訓練集。

而第二個目標是咱們想要保持參數值較小。(經過正則化項)

而 λ 這個正則化參數須要控制的是這二者之間的平衡,即平衡擬合訓練的目標和保持參數值較小的目標。從而來保持假設的形式相對簡單,來避免過分的擬合。

對於咱們的房屋價格預測來講,咱們以前所用的很是高的高階多項式來擬合,咱們將會獲得一個很是彎曲和複雜的曲線函數,如今咱們只須要使用正則化目標的方法,那麼你就能夠獲得一個更加合適的曲線,但這個曲線不是一個真正的二次函數,而是更加的流暢和簡單的一個曲線。這樣就獲得了對於這個數據更好的假設。

再一次說明下,這部份內容的確有些難以明白,爲何加上參數的影響能夠具備這種效果?但若是你親自實現了正規化,你將可以看到這種影響的最直觀的感覺。

3

image

在正則化線性迴歸中,若是正則化參數值 λ 被設定爲很是大,那麼將會發生什麼呢?

咱們將會很是大地懲罰參數θ1 θ2 θ3 θ… 也就是說,咱們最終懲罰θ1 θ2 θ3 θ…  在一個很是大的程度,那麼咱們會使全部這些參數接近於零。

image

若是咱們這麼作,那麼就是咱們的假設中至關於去掉了這些項,而且使咱們只是留下了一個簡單的假設,這個假設只能代表房屋價格等於 θ0 的值,那就是相似於擬合了一條水平直線,對於數據來講這就是一個欠擬合 (underfitting)。這種狀況下這一假設它是條失敗的直線,對於訓練集來講這只是一條平滑直線,它沒有任何趨勢,它不會去趨向大部分訓練樣本的任何值。

這句話的另​​一種方式來表達就是這種假設有過於強烈的"偏見" 或者太高的誤差 (bais),認爲預測的價格只是等於 θ0 。對於數據來講這只是一條水平線。

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

3. Regularized Linear Regression

以前咱們已經介紹過,嶺迴歸的代價函數以下:

image
對於線性迴歸(的求解),咱們以前運用了兩種學習算法,一種基於梯度降低,一種基於正規方程。

1

梯度降低,以下:

image

2

正規方程,以下:

image

3

image

如今考慮 M(即樣本量), 比 N(即特徵的數量)小或等於N。

經過以前的博文,咱們知道若是你只有較少的樣本,致使特徵數量大於樣本數量,那麼矩陣 XTX 將是不可逆矩陣或奇異(singluar)矩陣,或者用另外一種說法是這個矩陣是退化(degenerate)的,那麼咱們就沒有辦法使用正規方程來求出 θ 。

幸運的是,正規化也爲咱們解決了這個問題,具體的說只要正則參數是嚴格大於零,實際上,能夠證實以下矩陣:

image

將是可逆的。所以,使用正則還能夠照顧任何 XTX 不可逆的問題。

因此,你如今知道如何實現嶺迴歸,利用它,你就能夠避免過分擬合,即便你在一個相對較小的訓練集裏有不少特徵。這應該可讓你在不少問題上更好的運用線性迴歸。

在接下來的視頻中,咱們將把這種正則化的想法應用到 Logistic 迴歸,這樣咱們就可讓 logistic 迴歸也避免過分擬合,從而表現的更好。

4. Regularized Logistic Regression

Regularized Logistic Regression 實際上與 Regularized Linear Regression 是十分類似的。

image

一樣使用梯度降低:

image

若是在高級優化算法中,使用正則化技術的話,那麼對於這類算法咱們須要本身定義costFunction。

For those methods what we needed to do was to define the function that's called the cost function.

image

這個咱們自定義的 costFunction 的輸入爲向量 θ ,返回值有兩項,分別是代價函數 jVal 以及 梯度gradient。

總之咱們須要的就是這個自定義函數costFunction,針對Octave而言,咱們能夠將這個函數做爲參數傳入到 fminunc 系統函數中(fminunc 用來求函數的最小值,將@costFunction做爲參數代進去,注意 @costFunction 相似於C語言中的函數指針),fminunc返回的是函數 costFunction 在無約束條件下的最小值,即咱們提供的代價函數 jVal 的最小值,固然也會返回向量 θ 的解。

上述方法顯然對正則化邏輯迴歸是適用的。

相關文章
相關標籤/搜索