逻辑回归(Logistic Regression,LR)应该是互联网行业使用最广的分类模型了。CTR预估、反作弊、推荐系统等等领域都在大量使用LR模型。近几年,DNN有逐渐取代LR的趋势,但LR仍然有着理论完备、训练速度快、物理意义清晰等优势。对于业务发展初期,LR仍然是首选。最后,LR模型本身并不复杂,成功的关键在于特征工程(Feature Engineering)。特征工程以后会有专门的文章描述。
1. 什么是逻辑回归模型。
LR本质上是一个线性分类器,决策超平面是:
[{eta _0} + xeta = 0]
LR与线性分类器的区别在于:LR不但给出决策超平面,还根据样本点到超平面的距离,预估样本属于某一类的概率:
[egin{array}{c}
p(x;b,w) = frac{1}{{1 + {e^{ - ({eta _0} + xeta )}}}}{
m{ (2)}}\
= frac{1}{{1 + {e^{frac{{ - ({eta _0} + xeta )}}{{left| eta
ight|}}*left| eta
ight|}}}};{
m{ (3)}}\
= frac{1}{{1 + {e^{ - {D_x}*left| eta
ight|}}}}{
m{ (4)}}
end{array}]
从式(4)中可以看出,样本离决策平面越远(({{D_x}})越大),则分类越置信((p(x;b,w))越接近0,1)。同样,({left| eta ight|})越小,样本的区分度越大,这也是大多数LR算法都会有一个”正则化(Regularization)”的原因。
2. LR模型优化函数
(本节的详细推到过程请见文末附图)
LR模型预估的是样本属于一个分类的概率。对于iid分布的训练集,优化函数可以写成最大化联合分布概率:
[L({eta _0},eta ) = {prodlimits_{{ m{all instances}}} {pleft( {{x_i}} ight)} ^{{{ m{y}}_{ m{i}}}}}{left( {1 - pleft( {{x_i}} ight)} ight)^{1 - {y_i}}}{ m{ (5)}}]
为了简化描述,我们把x看成是(1+m)维的向量(m为feature数),(w)为(eta )。由式(5)可以推导出:
[egin{array}{c}
Logleft( {Lleft( w
ight)}
ight) = Logleft( {{{prodlimits_{{
m{all instances}}} {pleft( {{x_i}}
ight)} }^{{{
m{y}}_{
m{i}}}}}{{left( {1 - pleft( {{x_i}}
ight)}
ight)}^{1 - {y_i}}}}
ight)\
= sumlimits_{i = 1}^n { - Logleft( {{
m{1 + }}{e^{ - w{x_i}}}}
ight)} - (1 - {y_i})w{x_i}{
m{ (6)}}
end{array}]
要求式(6)的极大值,需要满足以下条件:
[sumlimits_{i = 1}^n {left( {frac{{partial - Logleft( {{ m{1 + }}{e^{ - w{x_i}}}} ight) - left( {1 - {y_i}} ight)w{x_i}}}{{partial {w_j}}}} ight)} = 0]
[sumlimits_{i = 1}^n {left( {{y_i} - p({x_i};w)} ight)} {x_{ij}} = 0{ m{ (7)}}]
式(7)并没有解析解。因此,我们无法求出LR模型的(w)。那么,怎么才能求出LR模型的最优(w)呢?下一节,我们会介绍几个常用的数值求解的方法。
3. 牛顿法
上面介绍了LR模型以及损失函数。由于没有解析解,下面我们介绍如何通过数值方法寻找最优(w)。数值训练方法很多,但最大名鼎鼎的要属牛顿法了,其他很多方法都是牛顿法衍生出来的。
牛顿法的本质是在搜索点的的位置,根据当前点的一阶、二阶导数,用二阶泰勒展开({hat f})近似目标函数(f),将这个近似的函数({hat f})的极小值点作为下一个搜寻点。由于二阶泰勒展开后为二次函数,极小值点有解析解。
目标函数(f)在第k个搜寻点附近的泰勒展开是:
[hat fleft( w ight) = fleft( {{w^{(k)}}} ight) + left( {w - {w^k}} ight) abla fleft( {{w^k}} ight) + frac{1}{2}{left( {w - {w^k}} ight)^2}Hleft( {{w^k}} ight)]
极小值点既为下一个搜索点(导数为0)
[{w^{k + 1}} = {w^k} - {H^{ - 1}}left( {{w^k}} ight) abla fleft( {{w^k}} ight)]
从上式可以看出,牛顿法的每一次迭代都有Hessian矩阵的逆运算,这是一个非常耗时的过程。因此,有人提出了一些近似牛顿算法(quasi-Newton method)来避免耗时的矩阵求逆运算。相关算法将在以后介绍。