線性迴歸——Lasso迴歸和嶺迴歸
線性迴歸——最小二乘
線性迴歸(linear regression),就是用線性函式f(x)=w⊤x+bf(x)=w⊤x+b去擬合一組資料D={(x1,y1),(x2,y2),...,(xn,yn)}D={(x1,y1),(x2,y2),...,(xn,yn)}並使得損失J=1n∑ni=1(f(xi)−yi)2J=1n∑i=1n(f(xi)−yi)2最小。線性迴歸的目標就是找到一組(w∗,b∗)(w∗,b∗),使得損失JJ最小。
線性迴歸的擬合函式(或 hypothesis)為:
cost function (mse) 為:
Lasso迴歸和嶺迴歸
Lasso 迴歸和嶺迴歸(ridge regression)都是在標準線性迴歸的基礎上修改 cost function,即修改式(2),其它地方不變。
Lasso 的全稱為 least absolute shrinkage and selection operator,又譯最小絕對值收斂和選擇運算元、套索演算法。
Lasso 迴歸對式(2)加入 L1 正則化,其 cost function 如下:
嶺迴歸對式(2)加入 L2 正則化,其 cost function 如下:
Lasso迴歸和嶺迴歸的同和異:
- 相同:
- 都可以用來解決標準線性迴歸的過擬合問題。
- 不同:
- lasso 可以用來做 feature selection,而 ridge 不行。或者說,lasso 更容易使得權重變為 0,而 ridge 更容易使得權重接近 0。
- 從貝葉斯角度看,lasso(L1 正則)等價於引數ww的先驗概率分佈滿足拉普拉斯分佈,而 ridge(L2 正則)等價於引數ww的先驗概率分佈滿足高斯分佈。具體參考部落格從貝葉斯角度深入理解正則化 -- Zxdon。
也許會有個疑問,線性迴歸還會有過擬合問題?
加入 L1 或 L2 正則化,讓權值儘可能小,最後構造一個所有引數都比較小的模型。因為一般認為引數值小的模型比較簡單,能適應不同的資料集,也在一定程度上避免了過擬合現象。
可以設想一下對於一個線性迴歸方程,若引數很大,那麼只要資料偏移一點點,就會對結果造成很大的影響;但如果引數足夠小,資料偏移得多一點也不會對結果造成什么影響,一種流行的說法是『抗擾動能力強』。具體參見部落格
為什麼 lasso 更容易使部分權重變為 0 而 ridge 不行?
lasso 和 ridge regression 的目標都是minw,bJminw,bJ,式(3)和(4)都是拉格朗日形式(with KKT條件),其中λλ為 KKT 乘子,我們也可以將minw,bJminw,bJ寫成如下形式:
- lasso regression:
- ridge regression:
式(5)和(6)可以理解為,在w限制的取值範圍內,找一個點w^w^使得 mean square error 最小,tt可以理解為正則化的力度,式(5)和(6)中的tt越小,就意味著式(3)和(4)中λλ越大,正則化的力度越大 。
以x∈R2x∈R2為例,式(5)中對ww的限制空間是方形,而式(6)中對ww的限制空間是圓形。因為 lasso 對ww的限制空間是有稜角的,因此
的解更容易切在w的某一個維為 0 的點。如下圖所示:
Fig.1[1] Lasso (left) and ridge (right) regression.
Fig. 1 中的座標系表示ww的兩維,一圈又一圈的橢圓表示函式
的等高線,橢圓越往外,JJ的值越大,w∗w∗表示使得損失JJ取得全域性最優的值。使用 Gradient descent,也就是讓ww向著w∗w∗的位置走。如果沒有 L1 或者 L2 正則化約束,w∗w∗是可以被取到的。但是,由於有了約束
w的取值只能限制在 Fig. 1 所示的灰色方形和圓形區域。當然調整t 的值,我們能夠擴大這兩個區域。
等高線從低到高第一次和w 的取值範圍相切的點,即是 lasso 和 ridge 迴歸想要找的權重 w^。
lasso 限制了w 的取值範圍為有稜角的方形,而 ridge 限制了w 的取值範圍為圓形,等高線和方形區域的切點更有可能在座標軸上,而等高線和圓形區域的切點在座標軸上的概率很小。這就是為什麼 lasso(L1 正則化)更容易使得部分權重取 0,使權重變稀疏;而 ridge(L2 正則化)只能使權重接近 0,很少等於 0。
正是由於 lasso 容易使得部分權重取 0,所以可以用其做 feature selection,lasso 的名字就指出了它是一個 selection operator。權重為 0 的 feature 對迴歸問題沒有貢獻,直接去掉權重為 0 的 feature,模型的輸出值不變。
對於 ridge regression 進行 feature selection,你說它完全不可以吧也不是,weight 趨近於 0 的 feature 不要了不也可以,但是對模型的效果還是有損傷的,這個前提還得是 feature 進行了歸一化。
如果你的模型中有很多變數對模型都有些許影響,那麼用Ridge;當資料量特別大的時候更傾向於用Ridge,因為Ridge計算起來更快。