第三周课程中,逻辑回归代价函数的求导过程没有具体展开,在此推导并记录:
逻辑回归的代价函数可以统一写成如下一个等式:
$J( heta ) = -frac{1}{m}left[sum_{i=1}^{m}y^{(i)}log(h_ heta (x^{(i)}))+(1-y^{(i)})log(1-h_ heta (x^{(i)})) ight]$
其中:$h_ heta (x^{(i)}) = frac{1}{1+e^{- heta^mathrm {T} x}}$
为了避免求导过程太冗长复杂,我们做一些显示的简化:
$J( heta ) = -frac{1}{m}left[sum_{i=1}^{m}K( heta) ight]$
其中:$K( heta) = y^{(i)}log(h_ heta (x^{(i)}))+(1-y^{(i)})log(1-h_ heta (x^{(i)}))$
$h_ heta (x^{(i)}) = frac{1}{1+e^{- heta^mathrm {T} x}}$
OK,下面开始我们的推导过程:如果要求$J( heta)$对某一个参数$ heta$的偏导数,则:
(1)根据求导公式,可以先把常数项$-frac{1}{m}sum_{i=1}^{m}$提取出来,这样就只需要对求和符号内部的表达式求导,即:
$J( heta ){}' = -frac{1}{m}left[sum_{i=1}^{m}K( heta){}' ight]$
$K( heta){}' = left(ylog(h_ heta (x))+(1-y)log(1-h_ heta (x)) ight ){}'$(为方便显示,先把右上角表示第i个样本的上标去掉)
(2)根据对数复合求导公式,$log(x){}' = frac{1}{x}x{}'$,对$K( heta)$继续求导可得:
$K( heta){}' = yfrac{1}{h_ heta (x)}h_ heta (x){}'+(1-y)frac{1}{1-h_ heta (x)}(1-h_ heta (x)){}'$
(3)根据幂函数复合求导公式,$(y^{x}){}' = xy^{x-1}x{}'$,及以e为底的指数求导公式,对$h_ heta(x)$继续求导可得:
$h_ heta (x){}' = left( frac{1}{1+e^{- heta^mathrm {T} x}} ight){}'=-frac{(1+e^{- heta^mathrm {T} x}){}'}{(1+e^{- heta^mathrm {T} x})^{2}} = frac{e^{- heta^mathrm {T}x}( heta^mathrm {T} x){}'}{(1+e^{- heta^mathrm {T} x})^{2}} = left(frac{1}{1+e^{- heta^mathrm{T}x}}(1-frac{1}{1+e^{- heta^mathrm{T}x}}) ight)( heta^mathrm{T}x){}' = h_ heta(x)(1-h_ heta(x))( heta^mathrm{T}x){}'$
同理,$(1-h_ heta (x)){}'= -frac{e^{- heta^mathrm {T}x}( heta^mathrm {T} x){}'}{(1+e^{- heta^mathrm {T} x})^{2}} = -h_ heta(x)(1-h_ heta(x))( heta^mathrm{T}x){}'$
(4)把步骤3的结果带入步骤2,化简后可得:
$K( heta){}' = (y-h_ heta(x))( heta^mathrm{T}x){}'$
再把上面结果带入步骤1,化简后可得:
$J( heta){}' = frac{1}{m}left[sum_{i=1}^{m}(h_ heta(x)-y)( heta^mathrm{T}x){}' ight]$
最后$( heta^mathrm{T}x){}'$,对第j个$ heta$求偏导,结果即$X_{j}$(j表示样本中第几项),得到最终结果:
$frac{partial J( heta)}{partial heta_{j}} = frac{1}{m}left[sum_{i=1}^{m}(h_ heta(x^{(i)})-y^{(i)})x_{j}^{(i)} ight]$