sklearn中逻辑回归(logistic regression)的损失函数推导

最近无意阅读sklearn中关于logistic regression的文档时,发现其损失函数和意识中长的不一样,有必要简单梳理下。

绝大部分的文章或者资料都习惯于将label y的空间定义为0和1,因此我们使用极大似然估计(maximum likelihood estimate)可以很轻松写出其似然函数:

\leqno(1)\qquad L(\theta )= \sum ylog(h(\theta ))+(1-y)log(1-h(\theta )) 

加上L2正则项后,整理可得我们需要最小化的损失函数如下:

\leqno(2)\qquad Loss(\theta)= \sum_{i=0}^{m}-y_i\theta x_i-ln(1-h_\theta(x_i)) + C\theta^T\theta

sklearn中假设y正负label定义为1和-1,因此其损失函数也和上面形式不太一样,sklearn关于logistic regression的损失函数为:

\leqno(3)\qquad \min_{w, c} \|w\|_1 + C \sum_{i=1}^n \log(\exp(- y_i (X_i^T w + c)) + 1).

前面第一项为正则项,我们集中看一下后一项的推导,首先logistic function:

h(x)=\frac{1}{1+e^{-x}}

显然y属于(1,-1)后,对于单个样本,其概率可统一为h(\theta^Tx_iy_i):

  P(y_i=1|x_i,\theta ) = h_\theta (x_i,\theta)=\frac{1}{1+e^{-\theta^Tx_iy_i}}

P(y_i=-1|x_i,\theta ) = 1-h_\theta (x_i,\theta)=\frac{1}{1+e^{-\theta^Tx_iy_i}}

即最大化似然概率为:

\max_{\theta} \Pi _{i=1}^mh(\theta^Tx_iy_i)\\=\max_{\theta} \sum _{i=1}^mlog(h(\theta^Tx_iy_i))\\ =\min_{\theta} \sum _{i=1}^m-log(h(\theta^Tx_iy_i))\\ =\min_{\theta} \sum _{i=1}^m-log(\frac{1}{1+e^{-\theta^Tx_iy_i}})\\ =\min_{\theta} \sum _{i=1}^mlog(1+e^{-\theta^Tx_iy_i})\\ =\min_{\theta} \sum _{i=1}^mlog(exp({-\theta^Tx_iy_i})+1)\\

看上去已经和(3)给出的损失函数很接近了,式(3)中c应该为偏置项目,但是无关大雅。我们再看下一下sklearn中计算损失的代码,损失out包含两个部分,同理0.5 * alpha * np.dot(w,w)显然是L2的正则化:

    # Logistic loss is the negative of the log of the logistic function.
    out = -np.sum(sample_weight * log_logistic(yz)) + .5 * alpha * np.dot(w, w)

yz等于\theta^Tx_iy_i,可见符合上述推导的公式。

猜你喜欢

转载自blog.csdn.net/wh_springer/article/details/89236868