最近在看机器学习实战,其中有些代码部分容易让人摸不着头脑。主要是代码里面把原理细节的东西隐藏了,为了更好地理解Logistic Regression,在这篇博客记录一下推导过程。
首先是Logistic Regression的损失函数(loss function): 其中y为实际值,a为计算值。
L(y,a)=−[y∗ln(a)+(1−y)∗ln(1−a)] L ( y , a ) = − [ y ∗ l n ( a ) + ( 1 − y ) ∗ l n ( 1 − a ) ]
对于单个例子 xi=(xi1,xi2...,xin) x i = ( x i 1 , x i 2 . . . , x i n ) 和 wT=(w1,w2...,wn) w T = ( w 1 , w 2 . . . , w n ) 有:
a=sigmoid(xi∗w) a = s i g m o i d ( x i ∗ w ) 其中 sigmoid(x)=11+e−x s i g m o i d ( x ) = 1 1 + e − x
对于 w w 中的来说,有以下链式求导:
∂L(y,a)∂wj=∂L(y,a)∂a∂a∂(xi∗w)∂(xi∗w)∂wj ∂ L ( y , a ) ∂ w j = ∂ L ( y , a ) ∂ a ∂ a ∂ ( x i ∗ w ) ∂ ( x i ∗ w ) ∂ w j
其中 ∂L(y,a)∂a=−(y−a)a(1−a) ∂ L ( y , a ) ∂ a = − ( y − a ) a ( 1 − a )
对于sigmoid函数来说有 g′(x)=g(x)(1−g(x)) g ′ ( x ) = g ( x ) ( 1 − g ( x ) ) 故上述式子可 ∂a∂(xi∗w)=a(1−a) ∂ a ∂ ( x i ∗ w ) = a ( 1 − a )
最后 ∂(xi∗w)∂wj=xij ∂ ( x i ∗ w ) ∂ w j = x i j
所以 ∂L(y,a)∂wj=−(y−a)xij ∂ L ( y , a ) ∂ w j = − ( y − a ) x i j
推广到多例子的
w
w
有:
故对 w w 的更新为以下式子: