1. 程式人生 > >正則化——解決過擬合問題

正則化——解決過擬合問題

算法 too align 得到 bubuko 技術分享 適合 太多的 mod

線性回歸例子

如果

\[{h_\theta }\left( x \right) = {\theta _0} + {\theta _1}x\]

通過線性回歸得到的曲線可能如下圖

技術分享圖片

這種情況下,曲線對數據的擬合程度不好。這種情況稱為“Underfit”,這種情況屬於“High bias”(高偏差)。

如果

\[{h_\theta }\left( x \right) = {\theta _0} + {\theta _1}x + {\theta _2}{x^2}\]

通過線性回歸得到的曲線可能如下圖

技術分享圖片

這種情況下,曲線對數據的擬合程度就比較好,可以稱為“Just right”。。。

如果

\[{h_\theta }\left( x \right) = {\theta _0} + {\theta _1}x + {\theta _2}{x^2} + {\theta _3}{x^3} + {\theta _4}{x^4}\]

通過線性回歸得到的曲線可能如下圖

技術分享圖片

這種情況下雖然對現有數據有很好的擬合程度,但是對於新的數據預測是不合理的。這種情況稱為“Overfit”,這種情況屬於“High variance”(高方差)。


什麽情況會出現過擬合呢?

if we have too many features, the learned hypothesis may fit the training set very well (J(θ)≈0), but fail to generalize to new examples (predict prices on new examples).

如果我們有太多的特征,學習的假設可能非常適合訓練集(J(θ)≈0),但不能推廣到新的例子(預測新例子的價格)。


在列舉邏輯回歸的例子

如果

\[\begin{array}{l}
{h_\theta }\left( x \right) = g\left( {{\theta _0} + {\theta _1}{x_1} + {\theta _2}{x_2}} \right)\\
\left( {g = sigmoid\_function} \right)
\end{array}\]

技術分享圖片

這種情況屬於“Underfit”

如果

\[{h_\theta }\left( x \right) = g\left( {{\theta _0} + {\theta _1}{x_1} + {\theta _2}{x_2} + {\theta _3}x_1^2 + {\theta _4}x_2^2 + {\theta _5}{x_1}{x_2}} \right)\]

技術分享圖片

這種情況屬於“Just right”

如果

\[{h_\theta }\left( x \right) = g\left( {{\theta _0} + {\theta _1}{x_1} + {\theta _2}x_1^2 + {\theta _3}x_1^2{x_2} + {\theta _4}x_1^2x_2^2 + {\theta _5}x_1^2x_2^3 + ...} \right)\]

技術分享圖片

這種情況屬於“Overfit”


如何解決過擬合?

方案1:

Reduce number of features.

  • Manually select which features to keep.
  • Model selection algorithm

減少特征的數量

  • 人工決定保留哪些特征
  • 運用模型選擇算法

存在的問題:去掉特征就意味著去掉“Information”,如果去掉了有用的信息就不好了

方案2:

Regularization

  • Keep all the features, but reduce magnitude/values of parameters θj

正規化

  • 保留所有特征,但減少參數θj的幅度/值

優點:Works well when we have a lot of features, each of which contributes a bit to predicting y.

當我們有很多特征時效果很好,每個功能都有助於預測y。


正則化具體實現

對比以下兩種情況

技術分享圖片

\[{h_\theta }\left( x \right) = {\theta _0} + {\theta _1}x + {\theta _2}{x^2}\]

技術分享圖片

\[{h_\theta }\left( x \right) = {\theta _0} + {\theta _1}x + {\theta _2}{x^2} + {\theta _3}{x^3} + {\theta _4}{x^4}\]

假設我們使θ3,θ4很小,那麽x3和x4的影響就會很小,這時過擬合的公式結果就很接近好的情況

我們先假設使用如下公式

\[J\left( \theta \right) = \frac{1}{{2m}}\sum\limits_{i = 1}^m {{{\left( {{h_\theta }\left( {{x^{\left( i \right)}}} \right) - {y^{\left( i \right)}}} \right)}^2}} + 1000\theta _3^2 + 1000\theta _4^2\]

線性回歸的目的是

\[\mathop {\min }\limits_\theta \frac{1}{{2m}}\sum\limits_{i = 1}^m {{{\left( {{h_\theta }\left( {{x^{\left( i \right)}}} \right) - {y^{\left( i \right)}}} \right)}^2}} + 1000\theta _3^2 + 1000\theta _4^2\]

因為的θ3,θ4權重比較大,所以要想最小化這個方程,θ3,θ4必須很小,這就起到的減小θ3,θ4的效果。

在正則化方法中,我們不知道需要讓那個參數更小,這時我們就讓所有參數都小。

加上正則化部分後代價函數為

\[\left( \theta \right) = \frac{1}{{2m}}\left[ {\underbrace {\sum\limits_{i = 1}^m {{{\left( {{h_\theta }\left( {{x^{\left( i \right)}}} \right) - {y^{\left( i \right)}}} \right)}^2}} }_{part1} + \underbrace {\lambda \sum\limits_{j = 1}^n {\theta _j^2} }_{part2}} \right]\]

其中,λ稱為正則化參數(regulariztion parameter)。這個函數有兩個目標:第一個目標是讓h(x)盡量接近y;第二個目標是讓每個θ盡量小(或讓代價函數盡量簡單)。

為什麽讓所有參數都盡量小就可以達到讓函數曲線更接近正確?

自己實現了就比較直觀的了解了!!

λ的大小選擇問題

對於

\[{h_\theta }\left( x \right) = {\theta _0} + {\theta _1}x + {\theta _2}{x^2} + {\theta _3}{x^3} + {\theta _4}{x^4}\]

如果 λ選的過大,所有的參數θ1,θ2,θ3,θ4都會很小,這樣就會出現

\[{h_\theta }\left( x \right) \approx {\theta _0}\]

這就會出現欠擬合(underfit)

如果λ選的過小,就起不到正則化的效果,這樣就會出現

\[{h_\theta }\left( x \right) \approx {\theta _0} + {\theta _1}x + {\theta _2}{x^2} + {\theta _3}{x^3} + {\theta _4}{x^4}\]

這樣就解決不了過擬合(overfit)

正則化——解決過擬合問題