(1)l1正則化公式
l1正則化,英文稱作l1-norm,或者稱為l1範數。對於線性回歸模型,使用l1正則化的模型建模叫做lasso回歸
。一般在正則化項之前新增乙個係數,這個係數為調整因子α,它決定了我們要如何對模型的複雜的進行「懲罰」。複雜的模型由權重w增大來表現,往往過於複雜的模型也表現為過擬合。l1正則化是指權值向量w中各個元素的絕對值之和。其中我們需要最小化(3)式,來求得合適的權重係數,避免過擬合問題。從公式(3)中很明顯可以看到,l1正則化只有在懲罰大係數時才區別於l2正則。因為它使用的是(模數)而l2正則使用時作為懲罰項。(2
)l1正則化有什麼用?
l1正則化可以產生稀疏權值矩陣,即產生乙個稀疏模型,可以用於特徵選擇。一定程度上,
l1也是可以防止過擬合的。(3
)l1是如何產生稀疏模型與特徵選擇的呢?
稀疏矩陣指的是很多元素為0,只有少數元素是非零值的矩陣,即得到的線性回歸模型的大部分係數都是0。通常機器學習中特徵數量很多,例如文字處理時,如果將乙個片語(term)作為乙個特徵,那麼特徵數量會達到上萬個。在**或分類時,那麼多特徵顯然難以選擇,但是如果這些特徵得到的模型是乙個稀疏模型,表示只有少數特徵對這個模型有貢獻,絕大部分特徵是沒有貢獻的,或者貢獻微小(因為它們前面的係數是0或者是很小的值,即使去掉對模型也沒有什麼影響),此時我們就可以只關注係數是非零值的特徵。這就是稀疏模型與特徵選擇的關係。
當j0等值線與l圖形首次相交的地方就是最優解。上圖中j0與l在l的乙個頂點處相交,這個頂點就是最優解。注意到這個頂點的值是(w1,w2)=(0,w)。可以直觀想象,因為l函式有很多『突出的角』(二維情況下四個,多維情況下更多),j0與這些角接觸的機率會遠大於與l其它部位接觸的機率,而在這些角上,會有很多權值等於0,這就是為什麼l1正則化可以產生稀疏模型,進而可以用於特徵選擇。(1
)l2正則化公式
公式(4)展示的是l2的正則化。l2正則化英文為l2 –norm,或者是l2正規化。對於線性回歸,使用l2正則化的模型叫做ridge回歸(嶺回歸)
。同l1正則化一樣,在正則化項之前新增乙個係數α。l2正則化是指權值向量w中各個元素的平方和然後再求平方根(可以看到ridge回歸的l2正則化項有平方符號)。
注意:當α=0 時,懲罰項沒有作用,嶺回歸所產生的引數估計將與最小二乘法相同。但是當α→∞ 時,懲罰項的收縮作用就增大了,導致嶺回歸下的係數估計會接近於零。可以看出,選擇乙個恰當的α值至關重要。為此,交叉驗證派上用場了。由這種方法產生的係數估計也被稱為 l2 範數(l2-norm)。(2
)l2正則化作用?
l2正則化可以防止模型過擬合(
overfitting)。
(3)l2
正則化為什麼可以解決過擬合問題?
擬合過程中通常都傾向於讓權值盡可能小,最後構造乙個所有引數都比較小的模型。因為一般認為引數值小的模型比較簡單,能適應不同的資料集,也在一定程度上避免了過擬合現象。可以設想一下對於乙個線性回歸方程,若引數很大,那麼只要資料偏移一點點,就會對結果造成很大的影響;但如果引數足夠小,資料偏移得多一點也不會對結果造成什麼影響,專業一點的說法是『抗擾動能力強』。
為什麼l2
正則化可以獲得很小的引數呢?
以線性回歸中的梯度下降法為例。假設要求的引數為θ,hθ(x)是我們的假設函式,那麼線性回歸的代價函式如下:
那麼在梯度下降中,最終用於迭代計算引數θ的公式為:
其中α是learning rate。上式是沒有新增l2正則化項的迭代公式,如果在原始代價函式之後新增l2正則化,則迭代公式會變成下面的樣子:
其中λ就是正則化引數。從上式可以看到,與未新增l2正則化的迭代公式相比,每一次迭代,
都要先乘以乙個小於1的因子,從而使得
不斷減小,因此總得來看,θ是不斷減小的。
最開始也提到l1正則化一定程度上也可以防止過擬合。之前做了解釋,當l1的正則化係數很小時,得到的最優解會很小,可以達到和l2正則化類似的效果。
機器學習 L1與L2正則化項
題目 關於支援向量機svm,下列說法錯誤的是 a.l2正則項,作用是最大化分類間隔,使得分類器擁有更強的泛化能力 b.hinge 損失函式,作用是最小化經驗分類錯誤 c.分類間隔為1 w w 代表向量的模 d.當引數c越小時,分類間隔越大,分類錯誤越多,趨於欠學習 錯誤 在logistic regr...
L1和L2正則化
l1和l2正則化 l1與l2正則化都是防止模型過擬合,其方式略有不同。具體請見下文。1 l1 正則化l1正則化 1範數 是指,各權值 變數 特徵 絕對值之和。其作用是產生權值的稀疏模型,也就是讓大部分權值為0.為什麼能產生權值稀疏模型?因為如下圖所示,各權值絕對值之和後得到乙個矩陣,很容易在矩陣的頂...
l1和l2正則化
import tensorflow as tf import tensorflow.contrib as contrib weight tf.constant 1.0,2.0 3.0,4.0 with tf.session as sess print sess.run contrib.layers....