1. 程式人生 > 實用技巧 >47-模型泛化與嶺迴歸

47-模型泛化與嶺迴歸

模型正則化(Regularization)

  在上一篇部落格提到了過擬合這樣的問題或者解決我們的模型中含有巨大的方差這樣的問題,其中有一種非常標準的處理手段就是模型正則化(Regularization)

  那什麼是模型正則化呢?看下圖這個例子,這個圖就是我們之前使用多項式迴歸過擬合的一個例子。對於這根曲線來說,該多項式前的有一些係數會非常大,模型正則化做的事情就是希望能夠限制這些係數的大小
在這裡插入圖片描述

在這裡,我們簡單的驗證一下過擬合的情況下前面係數是否非常大。

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
  那麼模型正則化是怎樣解決這個問題呢?

  我們回到線性迴歸問題中,最終求得的是一個最優解。

在這裡插入圖片描述
  然後我們最終將目標式子化簡成:

在這裡插入圖片描述
  但是這裡如果我們過擬合的話,這裡的 θ θ θ 就會非常大,那麼我們怎麼限制 θ θ θ 的係數不要太大呢?答案就是改變一下我們的損失函式,我們將我們的損失函式加入模型正則化:
在這裡插入圖片描述
  我們在目標函式後面加了一項,那一項就是所有係數的平方和再乘以一個常數 α / 2 α/2 α/2。所以我們想讓新增的一項儘可能的小,就要使得所有的 θ θ θ 儘可能小,這就是模型正則化的基本原理。

  但是這個式子有一個值得注意的點, i i i 是從 1 到 n n n 的,而不是從 0 開始的,意味著它不包括 θ 0 θ_0 θ0 這一項, θ 0 θ_0 θ0 是截距,它決定了整個曲線的高低,但是它並不決定整個曲線每一部分的陡峭程度。所以在我們執行模型正則化的時候,不需要加上 θ 0 θ_0

θ0。還有另外一點,這個式子乘了 1/2,其實這是一個慣例,乘不乘都無所謂,乘以這個 1/2 的原因是因為在求導過程中會與平方項拿下來的 2 約掉,只是方便我們的計算而已。實際上我們不要 1/2 也是可以的,這就引出了第三點。這裡乘了一個常數 α α α,其實它是一個新的超引數,它代表在這個模型正則化下新的損失函式中讓每一個 θ θ θ 都儘可能的小,這個小的程度佔整個優化損失函式的多少。比如當 α = 0 α = 0 α=0,相當於沒有加入模型正則化,此時和最初的式子是一樣的。但是當 α α α 等於正無窮的話,此時前面的 M S E MSE MSE 佔整個式子的比重就會非常的小,我們主要的優化任務也就變成了讓每一個 θ i θ_i
θi
儘可能的小,那麼在極端情況下,所有的 θ i θ_i θi 都等於 0 才能使得 J ( θ ) J(θ) J(θ) 最小。

  那麼,我們把這一種模型正則化的方式稱為嶺迴歸(Ridge Regression)


嶺迴歸(Ridge Regression)

下面我們就實際程式設計實現使用嶺迴歸的方式來限制 θ θ θ 的取值,最終得到的結果是怎樣的。

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述


具體程式碼見 47 模型泛化與嶺迴歸.ipynb