最近无意阅读sklearn中关于logistic regression的文档时,发现其损失函数和意识中长的不一样,有必要简单梳理下。
绝大部分的文章或者资料都习惯于将label y的空间定义为0和1,因此我们使用极大似然估计(maximum likelihood estimate)可以很轻松写出其似然函数:
加上L2正则项后,整理可得我们需要最小化的损失函数如下:
sklearn中假设y正负label定义为1和-1,因此其损失函数也和上面形式不太一样,sklearn关于logistic regression的损失函数为:
前面第一项为正则项,我们集中看一下后一项的推导,首先logistic function:
显然y属于(1,-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等于,可见符合上述推导的公式。