1.L2正則化(嶺回歸)
1.1問(wèn)題

想要理解什么是正則化,首先我們先來(lái)了解上圖的方程式。當(dāng)訓(xùn)練的特征和數(shù)據(jù)很少時(shí),往往會(huì)造成欠擬合的情況,對(duì)應(yīng)的是左邊的坐標(biāo);而我們想要達(dá)到的目的往往是中間的坐標(biāo),適當(dāng)?shù)奶卣骱蛿?shù)據(jù)用來(lái)訓(xùn)練;但往往現(xiàn)實(shí)生活中影響結(jié)果的因素是很多的,也就是說(shuō)會(huì)有很多個(gè)特征值,所以訓(xùn)練模型的時(shí)候往往會(huì)造成過(guò)擬合的情況,如右邊的坐標(biāo)所示。
1.2公式
以圖中的公式為例,往往我們得到的模型是:

為了能夠得到中間坐標(biāo)的圖形,肯定是希望θ3和θ4越小越好,因?yàn)檫@兩項(xiàng)越小就越接近于0,就可以得到中間的圖形了。
對(duì)應(yīng)的損失函數(shù)也加上這個(gè)懲罰項(xiàng)(為了懲罰θ):假設(shè)λ=1000

為了求得最小值,使θ值趨近于0,這就達(dá)到了我們的目的,得到中間坐標(biāo)的方程。
把以上公式通用化得:

相當(dāng)于在原始損失函數(shù)中加上了一個(gè)懲罰項(xiàng)(λ項(xiàng))
這就是防止過(guò)擬合的一個(gè)方法,通常叫做L2正則化,也叫作嶺回歸。
1.3對(duì)應(yīng)圖形
我們可以簡(jiǎn)化L2正則化的方程:

J0表示原始的損失函數(shù),咱們假設(shè)正則化項(xiàng)為:

我們不妨回憶一下圓形的方程:

其中(a,b)為圓心坐標(biāo),r為半徑。那么經(jīng)過(guò)坐標(biāo)原點(diǎn)的單位元可以寫成:

正和L2正則化項(xiàng)一樣,同時(shí),機(jī)器學(xué)習(xí)的任務(wù)就是要通過(guò)一些方法(比如梯度下降)求出損失函數(shù)的最小值。
此時(shí)我們的任務(wù)變成在L約束下求出J0取最小值的解。
求解J0的過(guò)程可以畫出等值線。同時(shí)L2正則化的函數(shù)L也可以在w1w2的二維平面上畫出來(lái)。如下圖:

L表示為圖中的黑色圓形,隨著梯度下降法的不斷逼近,與圓第一次產(chǎn)生交點(diǎn),而這個(gè)交點(diǎn)很難出現(xiàn)在坐標(biāo)軸上。
這就說(shuō)明了L2正則化不容易得到稀疏矩陣,同時(shí)為了求出損失函數(shù)的最小值,使得w1和w2無(wú)限接近于0,達(dá)到防止過(guò)擬合的問(wèn)題。
1.4使用場(chǎng)景
只要數(shù)據(jù)線性相關(guān),用LinearRegression擬合的不是很好,需要正則化,可以考慮使用嶺回歸(L2), 如何輸入特征的維度很高,而且是稀疏線性關(guān)系的話, 嶺回歸就不太合適,考慮使用Lasso回歸。
1.5代碼實(shí)現(xiàn)
2.L1正則化(lasso回歸)
2.1公式
L1正則化與L2正則化的區(qū)別在于懲罰項(xiàng)的不同:

L1正則化表現(xiàn)的是θ的絕對(duì)值,變化為上面提到的w1和w2可以表示為:

2.2對(duì)應(yīng)圖形
求解J0的過(guò)程可以畫出等值線。同時(shí)L1正則化的函數(shù)也可以在w1w2的二維平面上畫出來(lái)。如下圖:

懲罰項(xiàng)表示為圖中的黑色棱形,隨著梯度下降法的不斷逼近,與棱形第一次產(chǎn)生交點(diǎn),而這個(gè)交點(diǎn)很容易出現(xiàn)在坐標(biāo)軸上。這就說(shuō)明了L1正則化容易得到稀疏矩陣。
2.3使用場(chǎng)景
L1正則化(Lasso回歸)可以使得一些特征的系數(shù)變小,甚至還使一些絕對(duì)值較小的系數(shù)直接變?yōu)?,從而增強(qiáng)模型的泛化能力 。對(duì)于高緯的特征數(shù)據(jù),尤其是線性關(guān)系是稀疏的,就采用L1正則化(Lasso回歸),或者是要在一堆特征里面找出主要的特征,那么L1正則化(Lasso回歸)更是首選了。
2.4代碼實(shí)現(xiàn)
3.ElasticNet回歸
3.1公式
ElasticNet綜合了L1正則化項(xiàng)和L2正則化項(xiàng),以下是它的公式:

3.2使用場(chǎng)景
ElasticNet在我們發(fā)現(xiàn)用Lasso回歸太過(guò)(太多特征被稀疏為0),而嶺回歸也正則化的不夠(回歸系數(shù)衰減太慢)的時(shí)候,可以考慮使用ElasticNet回歸來(lái)綜合,得到比較好的結(jié)果。
3.3代碼實(shí)現(xiàn)
from sklearn import linear_model
#得到擬合模型,其中x_train,y_train為訓(xùn)練集
ENSTest = linear_model.ElasticNetCV(alphas=[0.0001, 0.0005, 0.001, 0.01, 0.1, 1, 10], l1_ratio=[.01, .1, .5, .9, .99], max_iter=5000).fit(x_train, y_train)
#利用模型預(yù)測(cè),x_test為測(cè)試集特征變量
y_prediction = ENSTest.predict(x_test)
.
.
.

歡迎添加微信交流!請(qǐng)備注“機(jī)器學(xué)習(xí)”。