引言
逻辑回归常用于预测疾病发生的概率,例如因变量是是否恶性肿瘤,自变量是肿瘤的大小、位置、硬度、患者性别、年龄、职业等等(很多文章里举了这个例子,但现代医学发达,可以通过病理检查,即获取标本放到显微镜下观察是否恶变来判断);广告界中也常用于预测点击率或者转化率(cvr/ctr),例如因变量是是否点击,自变量是物料的长、宽、广告的位置、类型、用户的性别、爱好等等。
本章主要介绍逻辑回归算法推导、梯度下降法求最优值的推导及spark的源码实现。
常规方法
一般回归问题的步骤是:
1. 寻找预测函数(h函数,hypothesis)
2. 构造损失函数(J函数)
3. 使损失函数最小,获得回归系数θ
而第三步中常见的算法有:
1. 梯度下降
2. 牛顿迭代算法
3. 拟牛顿迭代算法(BFGS算法和L-BFGS算法)
其中随机梯度下降和L-BFGS在spark mllib中已经实现,梯度下降是最简单和容易理解的。
推导
二元逻辑回归
构造预测函数
hθ(x)=g(θTx)=11+e−θTx
其中:
θTx=∑i=1nθixi=θ0+θ1x1+θ2x2+...+θnxnθ=⎡⎣⎢⎢⎢θ0θ1...θn⎤⎦⎥⎥⎥,x=⎡⎣⎢⎢⎢x0x1...xn⎤⎦⎥⎥⎥
为何LR模型偏偏选择sigmoid 函数呢?逻辑回归不是回归问题,而是二分类问题,因变量不是0就是1,那么我们很自然的认为概率函数服从伯努利分布,而伯努利分布的指数形式就是个sigmoid 函数。
函数 hθ(x) 表示结果取1的概率,那么对于分类1和0的概率分别为:
P(y=1|x;θ)=hθ(x)P(y=0|x;θ)=1−hθ(x)
概率一般式为:
P(y|x;θ)=(hθ(x))y((1−hθ(x)))1−y最大似然估计的思想
当从模型总体随机抽取m组样本观测值后,我们的目标是寻求最合理的参数估计 θ′ 使得从模型中抽取该m组样本观测值的概率最大。最大似然估计就是解决此类问题的方法。求最大似然函数的步骤是:- 写出似然函数
- 对似然函数取对数
- 对对数似然函数的参数求偏导并令其为0,得到方程组
- 求方程组的参数
为什么第三步要取对数呢,因为取对数后,乘法就变成加法了,且单调性一致,不会改变极值的位置,后边就更好的求偏导。
- 构造损失函数
线性回归中的损失函数是:
J(θ)=12m∑i=1m(yi−hθ(xi))2
线性回归损失函数有很明显的实际意义,就是平方损失。而逻辑回归却不是,它的预测函数 hθ(x) 明显是非线性的,如果类比的使用线性回归的损失函数于逻辑回归,那 J(θ) 很有可能就是非凸函数,即存在很多局部最优解,但不一定是全局最优解。我们希望构造一个凸函数,也就是一个碗型函数做为逻辑回归的损失函数。
按照求最大似然函数的方法,逻辑回归似然函数:
L(θ)=∏i=1mP(yi|xi;θ)=∏i=1m(hθ(xi))yi((1−hθ(xi)))1−yi
其中m表示样本数量,取对数:
l(θ)=logL(θ)=∑i=1m(yiloghθ(xi)+(1−yi)log(1−hθ(xi)))
我们的目标是求最大 l(θ) 时的 θ ,如上函数是一个上凸函数,可以使用梯度上升来求得最大似然函数值(最大值)。或者上式乘以-1,变成下凸函数,就可以使用梯度下降来求得最小负似然函数值(最小值):
J(θ)=−1ml(θ)
同样是取极小值,思想与损失函数一致,即我们把如上的 J(θ) 作为逻辑回归的损失函数。Andrew Ng的课程中,上式乘了一个系数1/m,我怀疑就是为了和线性回归的损失函数保持一致吧。 - 求最小值时的参数
我们求最大似然函数参数的第三步时,令对参数 θ 偏导=0,然后求解方程组。考虑到参数数量的不确定,即参数数量很大,此时直接求解方程组的解变的很困难,或者根本就求不出精确的参数。于是,我们用随机梯度下降法,求解方程组的值。
当然也可以使用牛顿法、拟牛顿法。梯度下降法是最容易理解和推导的,如下是推导过程:
梯度下降 θ 的更新过程,走梯度方向的反方向:
θj:=θj−αδδθjJ(θ)
其中:
δδθjJ(θ)=−1m∑i=1m(yi1hθ(xi)