線性回歸(六) LASSO

2021-10-02 09:29:15 字數 3353 閱讀 2672

在嶺回歸那一篇說到特徵過多而樣本過少會出現過擬合的問題,嶺回歸的解決策略是加乙個懲罰函式,也就是正則化。

其實嶺回歸中的正則化只是l2正則化,如果換成是l1正則化,那麼代價函式就會變為

j (θ

0,θ1

,…,θ

n)=1

2m(∑

i=1m

(yi−

hθ(x

i))2

+λ∑i

=1m∣

θi∣)

j(\theta_0,\theta_1,…,\theta_n) = \frac(\sum_^+\lambda\sum_^m|\theta_i|)

j(θ0​,

θ1​,

…,θn

​)=2

m1​(

i=1∑

m​(y

i−hθ

​(xi

))2+

λi=1

∑m​∣

θi​∣

)這就是lasso的代價函式。

為什麼好端端的嶺回歸不用,要用這個lasso呢?

因為嶺回歸缺乏解釋力,最後就算把λ

\lambda

λ調的非常大,特徵引數也只是會趨向0,不會等於0。

明明是特徵過多導致的問題,最後你怎麼還能**這麼多特徵呢?

lasso就不一樣了,隨著λ

\lambda

λ的增大,會將乙個個特徵引數逐步變成0,這些引數對應的特徵就可以被認為是「多餘」的。

下面給出解釋

再來看一眼ridge回歸的代價函式

j (θ

0,θ1

,…,θ

n)=1

2m(∑

i=1m

(yi−

hθ(x

i))2

+λ∑i

=1mθ

i2)j(\theta_0,\theta_1,…,\theta_n) = \frac(\sum_^+\lambda\sum_^m\theta_i^2)

j(θ0​,

θ1​,

…,θn

​)=2

m1​(

i=1∑

m​(y

i−hθ

​(xi

))2+

λi=1

∑m​θ

i2​)

如果把λ

\lambda

λ看成是還未選定的引數,那麼我們就是求以下這個函式的極小值

j (θ

0,θ1

,…,θ

n,λ)

=12m

(∑i=

1m(y

i−hθ

(xi)

)2+λ

∑i=1

mθi2

)j(\theta_0,\theta_1,…,\theta_n,\lambda) = \frac(\sum_^+\lambda\sum_^m\theta_i^2)

j(θ0​,

θ1​,

…,θn

​,λ)

=2m1

​(i=

1∑m​

(yi−

hθ​(

xi))

2+λi

=1∑m

​θi2

​)如果你學過高等數學下冊的話,就很容易想到拉格朗日乘數法,也就是說,求上面這個函式的極小值和求以下這個函式的條件極值是一樣的

j (θ

0,θ1

,…,θ

n)=1

2m∑i

=1m(

yi−h

θ(xi

))2j(\theta_0,\theta_1,…,\theta_n) = \frac\sum_^

j(θ0​,

θ1​,

…,θn

​)=2

m1​i

=1∑m

​(yi

−hθ​

(xi)

)2條件是為:∑i=

1mθi

2≤t\sum_^m\theta_i^2\leq t

∑i=1m​

θi2​

≤t同理,lasso和ridge一樣,只不過條件為:∑i=

1m∣θ

i∣≤t

\sum_^m|\theta_i|\leq t

∑i=1m​

∣θi​

∣≤t

以二元為例,我們看一下這張圖

左邊是lasso,右邊是ridge。

殘差平方和要取到最小,並且在條件的限制下(圖中藍色區域),那麼最小值一定發生在相切處。

ridge的條件是乙個圓,剛好相切在β

1\beta_1

β1​或β

2\beta_2

β2​取0時的概率很小,但lasso是凸出來的角,就很容易在凸角處相切。就更容易使β

1\beta_1

β1​或β

2\beta_2

β2​取到0。

因為是帶絕對值的,所以有些地方是不可導的,那就不能用梯度下降或正規方程來解特徵引數,我也還沒搞明白到底是怎麼求θ

\theta

θ的,以後搞明白了再補一篇吧。

# encoding:utf-8

import numpy as np

from sklearn import linear_model

# 讀取資料

data = np.genfromtxt(

'../data/longley.csv'

,delimiter=

',')

x_data = data[1:

,2:]

y_data = data[1:

,1]# 建立模型

model = linear_model.lassocv(

)model.fit(x_data,y_data)

# 列印lasso係數

print

("lasso係數為 :"

.format

(model.alpha_)

)print

("真實值為:"

)print

(y_data)

print

("lasso**值為:"

lasso回歸 LASSO回歸求解

很感謝網上的優質部落格,正是因為有了這些知識的分享,才讓學習的成本越來越低。我們假定有 lasso回歸訓練出來的係數是稀疏的,可用於做特徵篩選。但是怎麼訓練呢,因為絕對值函式在 處是不可導的,所以直接採用梯度下降法是行不通的,需要利用別的演算法。梯度是乙個函式增長最快的方向,但是當函式在某點不可導時...

嶺回歸 lasso回歸

嶺回歸 ridge regression 和lasso least absolute shrinkage and selection operator 都是ols的改進,知乎上有關於三者異同的詳細討論 關於lasso 這裡記錄一下最近的學習心得。嶺回歸的含義 嶺回歸的權值計算公式中有單位方陣i,就像...

Lasso回歸實驗

資料集我們使用的是 sklearn包中自帶的波士頓房價資料集。乙個簡單的 lasso 回歸實驗還是那六個步驟 載入資料集 拆分資料集 建立模型 在訓練集學習得到模型 模型 模型評測 關於訓練集和測試集的劃分我們使用的是留出法。至於引數設定,我們設定隨機種子為10,學習率為0.1,迭代次數為10000...