正則化
這部分是結合統計機器學習的(李航)和吳恩達的機器學習視頻寫的,有什麼不對的地方歡迎指出啊!
當數據量少,特徵也少的時候,我們訓練的模型是欠擬合,這時候我們會通過交叉驗證來彌補。
當數據量少,特徵非常多的時候,容易出現過擬合,這時要通過正則化調整。
1. 過擬合
還是來看預測房價的這個例子,我們先對該數據做線性迴歸,也就是左邊第一張圖。
如果這麼做,我們可以獲得擬合數據的這樣一條直線,但是,實際上這並不是一個很好的模型。我們看看這些數據,很明顯,隨着房子面積增大,住房價格的變化趨於穩定或者說越往右越平緩。因此線性迴歸並沒有很好擬合訓練數據。
我們將此類情況稱爲欠擬合(underfitting),或者叫做高偏差(bias)
第二幅圖,我們在中間加入一個二次項,也就是說對於這幅數據我們用二次函數去擬合。自然,可以擬合出一條曲線,事實也證明這個擬合效果很好。
另一個極端情況是,如果在第三幅圖中對於該數據集用一個四次多項式來擬合。因此在這裏我們有五個參數θ0到θ4,這樣我們同樣可以擬合一條曲線,通過我們的五個訓練樣本,我們可以得到如右圖的一條曲線。
一方面,我們似乎對訓練數據做了一個很好的擬合,因爲這條曲線通過了所有的訓練實例。但是,這實際上是一條很扭曲的曲線,它不停上下波動。因此,事實上我們並不認爲它是一個預測房價的好模型。
我們把這類情況叫做過擬合(overfitting),也叫高方差(variance)。
類似的情況也出現在邏輯迴歸當中:
過擬合的模型泛化性能就會下降,所以我們希望找到一個既簡單,又適合的模型。簡單來說就是曲線更平滑,參數更少。
2. 解決方案
對於過擬合,應該如何處理呢?
過多的變量(特徵),同時只有少量的訓練數據,會導致過擬合的問題,解決方案:
方法一:儘量減少選取變量的數量
具體而言,我們可以人工檢查每一項變量,並以此來確定哪些變量更爲重要,然後,保留那些更爲重要的特徵變量。至於,哪些變量應該捨棄,我們以後在討論,這會涉及到模型選擇算法,這種算法是可以自動選擇採用哪些特徵變量,自動捨棄不需要的變量。這類做法非常有效,但是其缺點是當你捨棄一部分特徵變量時,你也捨棄了問題中的一些信息。例如,也許所有的特徵變量對於預測房價都是有用的,我們實際上並不想捨棄一些信息或者說捨棄這些特徵變量。
方法二:正則化
具體而言,我們可以人工檢查每一項變量,並以此來確定哪些變量更爲重要,然後,保留那些更爲重要的特徵變量。至於,哪些變量應該捨棄,我們以後在討論,這會涉及到模型選擇算法,這種算法是可以自動選擇採用哪些特徵變量,自動捨棄不需要的變量。這類做法非常有效,但是其缺點是當你捨棄一部分特徵變量時,你也捨棄了問題中的一些信息。例如,也許所有的特徵變量對於預測房價都是有用的,我們實際上並不想捨棄一些信息或者說捨棄這些特徵變量。
3. 例子
3.1 正則化項
在前面的介紹中,我們看到了如果用一個二次函數來你和這些數據,那麼它給了我們一個對數據很好的擬合。然而,如果我們用一個更高次的多項式去擬合,最終我們可能會得到一個曲線,它能很好地擬合訓練集,但卻並不是一個好的結果,因爲它過度擬合了數據,因此,泛化能力並不是很好。
讓我們考慮如下假設,假設
意思就是,在滿足上式(儘量減少代價函數的均方誤差)的情況下,對於這個函數我們對它添加一些項,比如加上 1000 乘以 θ3 的平方,再加上 1000 乘以 θ4 的平方,來使得
1000 只是我隨便寫的某個較大的數字而已。現在,如果我們要最小化這個函數,那麼爲了最小化這個新的代價函數,我們要讓
因此,我們最終恰當地擬合了數據,我們所使用的正是二次函數加上一些非常小,貢獻很小項(因爲這些項的
更一般地,這裏給出了正規化背後的思路。這種思路就是,如果我們的參數值對應一個較小值的話(參數值比較小),那麼往往我們會得到一個形式更簡單的假設。
在我們上面的例子中,我們懲罰的只是
但更一般地說,如果我們像懲罰
實際上,這些參數的值越小,通常對應于越光滑的函數,也就是更加簡單的函數。因此 就不易發生過擬合的問題。
來讓我們看看具體的例子,對於房屋價格預測我們可能有上百種特徵,與剛剛所講的多項式例子不同,我們並不知道 θ3 和 θ4 是高階多項式的項。所以,如果我們有一百個特徵,我們並不知道如何選擇關聯度更好的參數,如何縮小參數的數目等等。
因此在正則化裏,我們要做的事情,就是把減小我們的代價函數(例子中是線性迴歸的代價函數)所有的參數值,因爲我們並不知道是哪一個或哪幾個要去縮小。
因此,我們需要修改代價函數,在這後面添加一項,就像我們在方括號裏的這項。當我們添加一個額外的正則化項的時候,我們收縮了每個參數。
順便說一下,按照慣例,我們沒有去懲罰
下面的這項就是一個正則化項,並且
第一個目標就是使假設更好的擬合訓練數據
第二個目標就是使假設更好的擬合測試數據(是參數更小,模型更簡單)
3.2
在正則化線性迴歸中,如果正則化參數值 λ 被設定爲非常大,那麼將會發生什麼呢?
我們將會非常大地懲罰參數
如果我們這麼做,那麼就是我們的假設中相當於去掉了這些項,並且使我們只是留下了一個簡單的假設,這個假設只能表明房屋價格等於
這句話的另一種方式來表達就是這種假設有過於強烈的”偏見” 或者過高的偏差 (bais),認爲預測的價格只是等於
因此,爲了使正則化運作良好,我們應當注意一些方面,應該去選擇一個不錯的正則化參數
4. 正則化的線性迴歸
4.1 嶺迴歸
求解線性迴歸,我們用兩種算法,一種基於梯度下降,另外一種基於正規方程
梯度下降
正規方程
現在考慮 M(即樣本量), 比 N(即特徵的數量)小或等於N。
通過之前的博文,我們知道如果你只有較少的樣本,導致特徵數量大於樣本數量,那麼矩陣 XTX 將是不可逆矩陣或奇異(singluar)矩陣,或者用另一種說法是這個矩陣是退化(degenerate)的,那麼我們就沒有辦法使用正規方程來求出 θ 。
幸運的是,正規化也爲我們解決了這個問題,具體的說只要正則參數是嚴格大於零,實際上,可以證明如下矩陣:
XTX+λ⎡⎣⎢⎢⎢⎢⎢⎢⎢011⋱1⎤⎦⎥⎥⎥⎥⎥⎥⎥
將是可逆的。因此,使用正則還可以照顧任何
類似的,我們將這種正則化的想法應用到 Logistic 迴歸,這樣我們就可以讓 Logistic 迴歸也避免過擬合。
4. 正則化的邏輯迴歸
Regularized Logistic Regression 實際上與 Regularized Linear Regression 是十分相似的。
同樣適用梯度下降:
如果在高級優化算法中,使用正則化技術的話,那麼對於這類算法我們需要自己定義costFunction
這個我們自定義的 costFunction 的輸入爲向量 θ ,返回值有兩項,分別是代價函數 jVal 以及 梯度gradient。
總之我們需要的就是這個自定義函數costFunction,針對Octave而言,我們可以將這個函數作爲參數傳入到 fminunc 系統函數中(fminunc 用來求函數的最小值,將@costFunction作爲參數代進去,注意 @costFunction 類似於C語言中的函數指針),fminunc返回的是函數 costFunction 在無約束條件下的最小值,即我們提供的代價函數 jVal 的最小值,當然也會返回向量
上述方法顯然對正則化邏輯迴歸是適用的。