1. 程式人生 > >機器學習演算法--Elastic Net

機器學習演算法--Elastic Net

1) alpha : float, optional

Constant that multiplies the penalty terms. Defaults to 1.0. See the notes for the exact mathematical meaning of this parameter.``alpha = 0`` is equivalent to an ordinary least square, solved by the LinearRegression object. For numerical reasons, using alpha = 0 with the Lasso object is not advised. Given this, you should use the LinearRegression object.

2) l1_ratio : float

The ElasticNet mixing parameter, with 0 <= l1_ratio <= 1. For l1_ratio = 0 the penalty is an L2 penalty. For l1_ratio = 1 it is an L1 penalty. For 0 < l1_ratio < 1, the penalty is a combination of L1 and L2.

 

elastic net是結合了lasso和ridge regression的模型。elastic net在具有多個特徵,並且特徵之間具有一定關聯的資料中比較有用。

l1_ratio:在0到1之間,代表在l1懲罰和l2懲罰之間,如果l1_ratio=1,則為lasso,是調節模型效能的一個重要指標。

函式: score(X,y,sample_weight):

評價模型效能的標準,值越接近1,模型效果越好。

 

彈性網路最妙的地方是它永遠可以產生有效解。由於它不會產生交叉的路徑,所以產生的解都相當不錯。舉例來說,對一個隨機產生的50個城市的推銷員問題,彈性網路的解只有比德賓和威爾蕭的論文中所提的最具競爭力的演演算法長2%(什麼是最具競爭力的演演算法?有人說是林-克尼根(Lin-Kernighan)演演算法,也有人說是SA+OP)。但是彈性網路最吸引人的地方不在它的有效解,而在它收斂的速度。許多人試著去改善彈性網路收斂的速度,都有不錯的結果。舉例來說,柏爾(Burr)所提出的改良版可令50個城市的推銷員問題的收斂次數由1250大幅降為30次。一個最佳化的彈性網路的速度會比林-克尼根快兩倍。

彈性網路在很多特徵互相聯絡的情況下是非常有用的。Lasso 很可能只隨機考慮這些特徵中的一個,而彈性網路更傾向於選擇兩個。 在實踐中,Lasso 和 Ridge 之間權衡的一個優勢是它允許在迴圈過程(Under rotate)中繼承 Ridge 的穩定性。

 

L1正則化使得模型更加稀疏,L2使得模型引數更趨近於0,提高泛化能。

L0範數:就是指矩陣中非零元素的個數,很顯然,在損失函式後面加上L0正則項就能夠得到稀疏解,但是L0範數很難求解,是一個NP問題,因此轉為求解相對容易的L1範數(l1能夠實現稀疏性是因為l1是L0範數的最優凸近似) 。

L1範數:矩陣中所有元素的絕對值的和。損失函式後面加上L1正則項就成了著名的Lasso問題(Least Absolute Shrinkage and Selection Operator),L1範數可以約束方程的稀疏性。

L2範數: 其實就是矩陣所有元素的平方和開根號,即歐式距離,在迴歸問題中,在損失函式(或代價函式)後面加上L2正則項就變成了嶺迴歸(Ridge Regression),也有人叫他權重衰減,L2正則項的一個很大的用處就是用於防止機器學習中的過擬合問題,同L1範數一樣,L2範數也可以對方程的解進行約束,但他的約束相對L1更平滑,在模型預測中,L2往往比L1好。L2會讓W的每個元素都很小,接近於0,但是不會等於0.而越小的引數模型越簡單,越不容易產生過擬合,以下引自另一篇文章: 

到目前為止,我們只是解釋了L2正則化項有讓w“變小”的效果(公式中的lamda越大,最後求得的w越小),但是還沒解釋為什麼w“變小”可以防止overfitting?一個所謂“顯而易見”的解釋就是:更小的權值w,從某種意義上說,表示網路的複雜度更低,對資料的擬合剛剛好(這個法則也叫做奧卡姆剃刀),而在實際應用中,也驗證了這一點,L2正則化的效果往往好於未經正則化的效果。當然,對於很多人(包括我)來說,這個解釋似乎不那麼顯而易見,所以這裡新增一個稍微數學一點的解釋:

過擬合的時候,擬合函式的係數往往非常大,為什麼?如下圖所示,過擬合,就是擬合函式需要顧忌每一個點,最終形成的擬合函式波動很大。在某些很小的區間裡,函式值的變化很劇烈。這就意味著函式在某些小區間裡的導數值(絕對值)非常大,由於自變數值可大可小,所以只有係數足夠大,才能保證導數值很大。 

L1 L2區別總結: 

加入正則項是為了避免過擬合,或解進行某種約束,需要解保持某種特性 

L1正則假設引數的先驗分佈是Laplace分佈,可以保證模型的稀疏性,也就是某些引數等於0,L1正則化是L0正則化的最優凸近似,比L0容易求解,並且也可以實現稀疏的效果, 

L1也稱Lasso;

L2正則假設引數的先驗分佈是Gaussian分佈,可以保證模型的穩定性,也就是引數的值不會太大或太小.L2範數是各引數的平方和再求平方根,我們讓L2範數的正則項最小,可以使W的每個元素都很小,都接近於0。但與L1範數不一樣的是,它不會是每個元素為0,而只是接近於0。越小的引數說明模型越簡單,越簡單的模型越不容易產生過擬合現象。

L2正則化江湖人稱Ridge,也稱“嶺迴歸”

在實際使用中,如果特徵是高維稀疏的,則使用L1正則;如果特徵是低維稠密的,則使用L2正則。 

 

L2不能控制feature的“個數”,但是能防止模型overfit到某個feature上;相反L1是控制feature“個數”的,並且鼓勵模型在少量幾個feature上有較大的權重。