python機器學習——正則化

咱們在訓練的時候常常會遇到這兩種狀況:函數

一、模型在訓練集上偏差很大。學習

二、模型在訓練集上偏差很小,表現不錯,可是在測試集上的偏差很大測試

咱們先來分析一下這兩個問題:spa

對於第一個問題,明顯就是沒有訓練好,也就是模型沒有很好擬合數據的能力,並無學會如何擬合,多是由於在訓練時咱們選擇了較少的特徵,或者是咱們選擇的模型太簡單了,不能稍微複雜的擬合數據,咱們能夠經過嘗試選取更多的特徵、增長一些多項式特徵或者直接選用非線性的較複雜的模型來訓練。blog

對於第二個問題,能夠說是第一個問題的另一個極端,就是模型對訓練集擬合的太好了,以致於把訓練集數據中的那些可有可無的特徵或者噪音也學習到了,致使的結果就是當咱們使用測試集來評估模型的泛化能力時,模型表現的不好。打個不恰當比方就是你平時把做業都背下來了,可是其實你並無學會如何正確解題,因此遇到考試就考的不好。解決方法就是增長訓練集的數據量或者減小特徵數量來嘗試解決。it

第一個問題咱們叫作欠擬合(underfitting),第二個問題咱們叫作過擬合(overfitting)
class

這兩個問題還存在一種解決方法,就是我接下來要說的正則化。lambda

咱們以前說模型學習的過程也就是調整權重參數的過程,經過訓練集中的數據來將模型的權重參數調整到一個使得損失函數最小的值。方法

對於一個分佈較複雜的樣本,若是訓練獲得的權重參數維度太少或者參數太小,也就是特徵項不多,一些重要的特徵沒有起到做用,那麼這條擬合曲線就會變得很簡單,咱們看上圖的欠擬合圖像,裏面的擬合曲線是一條直線,這就是權重參數維度太少的結果。而若是權重參數維度過多或者參數過大,致使擬合曲線過於複雜,如上圖的過擬合圖像,擬合曲線能夠完美的將兩類不一樣的樣本點區分開,可是咱們也能夠看出這條曲線很複雜,權重參數的項數必定不少。im

如今進入正題,對於正則化,咱們常見的形式是L2正則:
\[ \frac \lambda 2\lVert w \lVert^2 = \frac \lambda 2 \sum_{j=1}^m{w_j^2} \]
這裏的
\[ \lambda \]
就是正則化係數。

咱們將正則項直接添加到損失函數後便可使用,好比對於邏輯迴歸模型,帶有L2正則項的損失函數爲:
\[ J(w)=\sum_{i=1}^n\left[-y^{(i)}log(\phi(z^{(i)}))-(1-y^{(i)})log(1-\phi(z^{(i)}))\right] + \frac \lambda 2\lVert w \lVert^2 \]
咱們經過控制正則化係數來控制權重參數的大小。通常正則化用於解決模型過擬合的問題,咱們的訓練目標是爲了使損失函數最小,可是若是權重參數過大會致使過擬合,模型泛化能力降低,那麼爲了解決這個問題,將正則項加到損失函數後面,組成一個新的損失函數,爲了最小化這個新的損失函數,咱們在訓練過程當中不只要使得偏差小,還要保證正則項不能太大,因而若是咱們選擇一個較大的正則化係數,那麼爲了保證正則項不能太大,就會使得權重參數變小,這也就是咱們的最終目的:在保證偏差不大的狀況下,使得權重參數也不能太大,緩解了過擬合問題。正則化係數越大,正則化越強,權重參數越小。

因此對於欠擬合的模型,咱們也能夠嘗試減少正則化係數來增大權重參數,而對於過擬合模型,咱們嘗試增大正則化係數來減少權重參數。

相關文章
相關標籤/搜索