機器學習演算法中為了防止過擬合,會在損失函式中加上懲罰因子,即為l1/l2正則化。因此最終的優化目標函式為:
f(x) = l(x) + c*reg(x) , c > 0
本文只講解l1正則化,因此reg(x) = |x|
首先l(x)和reg(x)都是連續函式,因此f(x)也是連續函式;其次l(x)和reg(x)都是凸函式,因此f(x)也是凸函式;所以f(x)是有最優解的。而|x|僅在x=0時是不可導的,
當f(x)有最優解0時的必要條件為, f(x)在x=0處的左導數與右導數異號,即
(l』(0) + c)(l』(0) - c) < 0 得到c > |l』(0)|
下面舉乙個例子說明:
目標函式為f(x,y) = (x-1)^2+(y+2)^2 + 3.0(|x|+|y|)
使用sgd得到最優解, **如下:
#!/usr/bin/env python
#-*- coding:utf8 -*-
import sys
defsign
(x):
if x > 0:
return
1elif x < 0:
return -1
else:
return
0learning_rate = 0.001
c = 3.0
defsolution
(derive, init_pnt):
dim_num = len(init_pnt)
pnt = [x for x in init_pnt]
print pnt, derive
for i in xrange(10000):
deri_arr =
for d in xrange(dim_num):
deri = derive[d](pnt[d])
pnt[d] = pnt[d] - learning_rate * deri
print pnt, deri_arr
return pnt
if __name__ == "__main__":
# y = (x - 1)**2 + (y + 1) ** 2 + c(|x| + |y|)
derive = [lambda x: 2*(x-1)+c*sign(x), lambda y: 2*(y+2)+c*sign(y)]
init_pnt = [5, 5]
point = solution(derive, init_pnt)
print
"minimum point of f(x,y) = (x-1)^2+(y+2)^2 + %s(|x|+|y|) : (%s,%s)" % (c, point[0], point[1])
迭代10000次,結果如下:
[0.004361948510801818, -0.4999999975259809] [-5.001278660298994, 4.957954047313251e-09]
[0.0033532246137802147, -0.49999999753092894] [1.0087238970216037, 4.948038423435719e-09]
[0.002346518164552654, -0.4999999975358671] [1.0067064492275604, 4.93814233948342e-09]
[0.0013418251282235488, -0.4999999975407954] [1.0046930363291053, 4.928265795456355e-09]
[0.0003391414779671017, -0.4999999975457138][1.0026836502564471, 4.9184092354437325e-09]
[-0.0006615368049888324, -0.49999999755062235][1.0006782829559342, 4.908572215356344e-09]
[0.004339786268621145, -0.4999999975555211] [-5.001323073609978, 4.898755179283398e-09]
[0.0033311066960839027, -0.4999999975604101] [1.0086795725372424, 4.888957683135686e-09]
[0.002324444482691735, -0.49999999756528923] [1.0066622133921679, 4.8791797269132076e-09]
[0.0013197955937263512, -0.49999999757015867] [1.0046488889653835, 4.869421310615962e-09]
minimum point of f(x,y) = (x-1)^2+(y+2)^2 + 3.0(|x|+|y|) : (0.00131979559373,-0.49999999757)
這個例子中(x,y)=(0,0)時,
f』_(x) f』+(x)= (-2-3) (-2+3) < 0
f』_(y) f』+(y)= (4-3) (4+3) > 0
所以f(x,y)在x維的最優解為0,在y維的最優解不為0。反映在上面的迭代過程中,也是x維接近為0,y維遠偏離於0。從加粗的數來看,x維的導數從正數變為負數又變為正數,導數在0處左右波動,表明最優解就在附近。
正則化 L1正則化(稀疏性正則化)
稀疏向量通常包含許多維度。建立特徵組合會導致包含更多維度。由於使用此類高維度特徵向量,因此模型可能會非常龐大,並且需要大量的 ram。在高維度稀疏向量中,最好盡可能使權重正好降至 0。正好為 0 的權重基本上會使相應特徵從模型中移除。將特徵設為 0 可節省 ram 空間,且可以減少模型中的噪點。以乙...
L1正則化與稀疏性 L1正則化不可導問題
l1正則化與稀疏性 座標軸下降法 解決l1正則化不可導的問題 lasso回歸演算法 座標軸下降法與最小角回歸法小結 l1正則化使得模型引數具有稀疏性的原理是什麼?機器學習經典之作 pattern recognition and machine learning 中的第三章作出的乙個解釋無疑是權威且直...
學習筆記 稀疏性正則化 l1正則化
還記得我們之前用經度和緯度來進行分箱嗎?僅僅是2個特徵進行分箱組合就讓我們的輸入特徵數量暴增。假設我們現在有k個特徵需要來分箱,每個分為長度為k的獨熱編碼。那麼我們輸入特徵就為 k k個,這種指數增長會占用我們大量ram。這是我們需要辦法來拯救我們的ram。那麼乙個好的方法就是讓我們的部分權重為0,...