1. 程式人生 > 其它 >Ridge-Regression正則化

Ridge-Regression正則化

技術標籤:機器學習python深度學習人工智慧機器學習演算法

Ridge-Regression

就是給損失函式加了個懲罰項(L2正則)

在這裡插入圖片描述
複雜度引數 α≥0 控制收縮量:α值越大 ,收縮量越大,係數對共線性的魯棒性越強。

大家看上面這個損失函式嘛,左側是最小二乘法,右側是懲罰項,為啥要加懲罰項呢?
為了防止過擬合嘛
最小二乘法的目標就是擬合輸入
懲罰專案的就是增加泛化性
這兩個互相敵對,最後我們的ω擬合的結果就既有泛化性又有正確性。

注意:

正則化是對損失函式進行操作,在訓練階段。
歸一化是對輸入資料進行操作,在資料預處理階段。

Q:什麼是過擬合?
A:擬合過度,用演算法生成的模型,很好的擬合了你以有的資料,訓練集資料,但是當來新的資料的時候,

比如測試集的資料,預測的準確率反而降低了很多,那這個時候就是發生了過擬合現象

Q:如何防止過擬合呢?
A:防止過擬合,等價於提高模型的泛化能力,或者推廣能力,或者說白了就是舉一反三的能力!
提高了模型的容錯能力!
學霸:有監督的機器學習!
學神:有很強的學習能力,能自己找到學習的方法!無監督的機器學習!
學渣:你的演算法壓根就沒選對,資料預處理也沒對,學習方法不對!
學痴:做練習題都會,考試稍微一變化,就掛!過擬合了!沒有泛化能力!

Q:如何在機器學習裡面防止過擬合呢?
A:模型引數W個數,越少越好,無招勝有招
模型引數W的值越小越好,這樣如果X輸入有誤差,也不會太影響y預測結果
通過正則化懲罰項人為的修改已有的損失函式,比如使用L1、L2正則新增到loss func裡面去


L1 = n個維度的w絕對值加和
L2 = n個維度的w平方和
讓我們的SGD,在找最優解的過程中,考慮懲罰項的影響

Q:當使用懲罰項,會產生什麼影響?
A:使用懲罰項,會提高模型的泛化能力,但是因為人為的改變了損失函式,所有在一定程度上犧牲了
正確率,即對訓練集已有資料的擬合效果
,但是沒關係,因為我們的模型目的是對未來新的資料進行預測
在懲罰項裡面,會有個alpha,即懲罰項的權重,我們可以通過調整alpha超引數,根據需求來決定
是更看重模型的正確率還是模型的泛化能力!

程式碼

import numpy as np
from sklearn.linear_model import Ridge
from
sklearn.linear_model import SGDRegressor X = 2 * np.random.rand(100, 1) y = 4 + 3 * X + np.random.randn(100, 1) """ ridge_reg = Ridge(alpha=1, solver='sag') ridge_reg.fit(X, y) print(ridge_reg.predict(1.5)) print(ridge_reg.intercept_) print(ridge_reg.coef_) """ sgd_reg = SGDRegressor(penalty='l2', max_iter=1000) sgd_reg.fit(X, y.ravel()) print(sgd_reg.predict([[1.5]])) print("W0=", sgd_reg.intercept_) print("W1=", sgd_reg.coef_)