上節咱們講到了線性迴歸,那麼思考這麼一個問題:算法
若是數據特徵比樣本點還多怎麼辦? 是否還可使用線性迴歸和以前的方法來作預測?
答案是:否認的。由於此時輸入數據的矩陣不是滿秩矩陣,非滿秩矩陣在求逆時會出現問題。編程
爲了解決這個問題,引入了嶺迴歸(Ridge Regression)的概念。網絡
縮減方法能夠去掉不重要的參數,所以能更好地理解數據。此外,與簡單的線性迴歸相比,縮減法能取得更好的預測效果。函數
除了Ridge,還有一種正則化的線性迴歸是Lasso。與嶺迴歸相同,使用Lasso也是約束係數使其接近於0。優化
Ridge迴歸經過對係數的大小進行懲罰來解決普通最小二乘的一些問題 。公式以下:3d
嶺迴歸是加了二階正則項的最小二乘,主要適用於過擬合嚴重或各變量之間存在多重共線性的時候,嶺迴歸是有bias的,這裏的bias是爲了讓variance更小。code
嶺迴歸沒法剔除變量,而LASSO迴歸模型,將懲罰項由L2範數變爲L1範數,能夠將一些不重要的迴歸係數縮減爲0,達到剔除變量的目的。blog
Lasso迴歸做用:所以它的效果就是讓w往0靠,使網絡中的權重儘量爲0,也就至關於減少了網絡複雜度,防止過擬合。ci
過擬合(over-fitting): 在訓練數據不夠時,或者over-training時,經常會致使over-fitting(過擬合)。會使得對於訓練數據準確率高,對於新數據準確率低。it
避免過擬合的方法有不少:early stopping、數據集擴增(Data augmentation)、正則化(Regularization)包括L一、L2(L2 regularization也叫weight decay),dropout。
爲何叫L1正則化?
由於後面加上了||w||的一次冪。
比原始的更新規則多出了η * λ * 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)
爲何叫L2正則化?
由於後面加上了||w||的平方
C0表明原始的代價函數,後面那一項就是L2正則化項,它是這樣來的:全部參數w的平方的和,除以訓練集的樣本大小n。λ就是正則項係數,權衡正則項與C0項的比重。另外還有一個係數1/2,1/2常常會看到,主要是爲了後面求導的結果方便,後面那一項求導會產生一個2,與1/2相乘恰好湊整。
對比上面w的更新公式,能夠發現後面那一項變了,變成全部導數加和,乘以η再除以m,m是一個mini-batch中樣本的個數。
以下圖所示,過擬合,就是擬合函數須要顧忌每個點,最終造成的擬合函數波動很大。
在某些很小的區間裏,函數值的變化很劇烈。這就意味着函數在某些小區間裏的導數值(絕對值)很是大,因爲自變量值可大可小,因此只有係數足夠大,才能保證導數值很大。
-嶺迴歸:L2正則化
縮減係數,防止過擬合。若是線性迴歸出現過擬合,使用嶺迴歸進行優化。
即便沒有出現過擬合,也會嘗試使用嶺迴歸。
加入誤差,獲得更好地結果
嶺迴歸是數據處理的一種方式
-套索迴歸:L1正則化
適用於方程的解是稀疏矩陣,當屬性特別多時,能夠採用Lasso去嘗試。
在矩陣中,若數值爲0的元素數目遠遠多於非0元素的數目,而且非0元素分佈沒有規律時,則稱該矩陣爲稀疏矩陣;