機器學習算法(三)——Ridge算法和Lasso算法

1、算法簡介

1-一、嶺迴歸(Ridge Regression)

上節咱們講到了線性迴歸,那麼思考這麼一個問題:算法

若是數據特徵比樣本點還多怎麼辦?
是否還可使用線性迴歸和以前的方法來作預測?

答案是:否認的。由於此時輸入數據的矩陣不是滿秩矩陣,非滿秩矩陣在求逆時會出現問題。編程

爲了解決這個問題,引入了嶺迴歸(Ridge Regression)的概念。網絡

縮減方法能夠去掉不重要的參數,所以能更好地理解數據。此外,與簡單的線性迴歸相比,縮減法能取得更好的預測效果。函數

1-二、套索迴歸(Lasso Regression)

除了Ridge,還有一種正則化的線性迴歸是Lasso。與嶺迴歸相同,使用Lasso也是約束係數使其接近於0。優化

2、算法原理

2-一、嶺迴歸原理

Ridge迴歸經過對係數的大小進行懲罰來解決普通最小二乘的一些問題 。公式以下:3d

嶺迴歸是加了二階正則項的最小二乘,主要適用於過擬合嚴重或各變量之間存在多重共線性的時候,嶺迴歸是有bias的,這裏的bias是爲了讓variance更小。code

因此嶺迴歸的關鍵是找到一個合理的α值來平衡模型的方差和誤差。

α的選擇:

  • 模型的方差:迴歸係數的方差
  • 模型的誤差:預測值和真實值的差別

2-二、套索迴歸原理

嶺迴歸沒法剔除變量,而LASSO迴歸模型,將懲罰項由L2範數變爲L1範數,能夠將一些不重要的迴歸係數縮減爲0,達到剔除變量的目的。blog

Lasso迴歸做用:所以它的效果就是讓w往0靠,使網絡中的權重儘量爲0,也就至關於減少了網絡複雜度,防止過擬合ci

3、算法要點

過擬合(over-fitting): 在訓練數據不夠時,或者over-training時,經常會致使over-fitting(過擬合)。會使得對於訓練數據準確率高,對於新數據準確率低。it

避免過擬合的方法有不少:early stopping、數據集擴增(Data augmentation)、正則化(Regularization)包括L一、L2(L2 regularization也叫weight decay),dropout。

3-一、L1正則化

爲何叫L1正則化?

由於後面加上了||w||的一次冪。
正則(Re) -------> Regularization(規則化)限制,不能讓係數無限大。係數波動大,方程不穩定。

比原始的更新規則多出了η * λ * sgn(w)/n這一項。當w爲正時,更新後的w變小。當w爲負時,更新後的w變大。

另外,上面沒有提到一個問題,當w爲0時怎麼辦?當w等於0時,|W|是不可導的,因此咱們只能按照原始的未經正則化的方法去更新w,這就至關於去掉ηλsgn(w)/n這一項,因此咱們能夠規定sgn(0)=0,這樣就把w=0的狀況也統一進來了。(在編程的時候,令sgn(0)=0,sgn(w>0)=1,sgn(w<0)=-1)

3-二、L2正則化

爲何叫L2正則化?

由於後面加上了||w||的平方

  C0表明原始的代價函數,後面那一項就是L2正則化項,它是這樣來的:全部參數w的平方的和,除以訓練集的樣本大小n。λ就是正則項係數,權衡正則項與C0項的比重。另外還有一個係數1/2,1/2常常會看到,主要是爲了後面求導的結果方便,後面那一項求導會產生一個2,與1/2相乘恰好湊整。

對比上面w的更新公式,能夠發現後面那一項變了,變成全部導數加和,乘以η再除以m,m是一個mini-batch中樣本的個數。

過擬合的時候,擬合函數的係數每每很是大,爲何?

以下圖所示,過擬合,就是擬合函數須要顧忌每個點,最終造成的擬合函數波動很大。

在某些很小的區間裏,函數值的變化很劇烈。這就意味着函數在某些小區間裏的導數值(絕對值)很是大,因爲自變量值可大可小,因此只有係數足夠大,才能保證導數值很大。

爲何要進行正則化?

正則化是經過約束參數的範數使其不要太大,因此能夠在必定程度上減小過擬合狀況。正則化:防止過擬合,提升泛化能力。

4、線性迴歸、嶺迴歸、套索迴歸異同點

相同點

  • 都是基於最小二乘法

不一樣點

-嶺迴歸:L2正則化

  • 縮減係數,防止過擬合。若是線性迴歸出現過擬合,使用嶺迴歸進行優化。

  • 即便沒有出現過擬合,也會嘗試使用嶺迴歸。

  • 加入誤差,獲得更好地結果

  • 嶺迴歸是數據處理的一種方式

-套索迴歸:L1正則化

  • 適用於方程的解是稀疏矩陣,當屬性特別多時,能夠採用Lasso去嘗試。

  • 在矩陣中,若數值爲0的元素數目遠遠多於非0元素的數目,而且非0元素分佈沒有規律時,則稱該矩陣爲稀疏矩陣;

在實踐中,嶺迴歸與套索迴歸首先嶺迴歸。可是,若是特徵特別多,而某些特徵更重要,具備選擇性,那就選擇Lasso可能更好。
scikit-learn還提供了ElasticNet類,結合了Lasso和Ridge的懲罰項。在實踐中,這種結合的效果最好,不過代價是要調節兩個參數:一個用於L1正則化,一個用於L2正則化。
相關文章
相關標籤/搜索