逻辑斯蒂回归(Logistic Regression)


转载请标明出处:http://blog.csdn.net/wuzqchom/article/details/74016215




在之前的博客,简单的介绍了线性回归,今天来看看和其十分相关的Logistic Regression。

1. 问题背景

线性回归可以让我们呢学习得到特征和目标label的权重关系,新来的一组测试样本,用同样的特征,它可以告诉我们一个预测值。但是很多时候我们需要的是一个更加有意义的值,比如在CTR预估的时候我们预测用户点击投放广告的概率,医院里预测一个人心脏病发的概率。Logistic Regre(LR)就可以做这么一件事。

2. 初窥

首选来看看Sigmoid函数,其函数表达式为: $$\theta(x)=\frac{1}{1+e^{-x}}$$ 函数图像如下(摘自[维基百科](https://en.wikipedia.org/wiki/Sigmoid_function)):
![Sigmoid function](https://img-blog.csdnimg.cn/img_convert/4125c4706e83800df10c18afba7c95ac.png)

我们可以看到他把所有的x值都映射到(0,1),可以很好的满足我们的需求。其实Logistc Regression的本质就是线性回归套上一个Sigmoid函数,合并起来之后,其函数表达式如下所示(将 w T x + b w^Tx+b wTx+b中的b看成是 w 0 w_0 w0):
h ( x ) = 1 1 + e − w T x = θ ( w T x ) h(x)=\frac{1}{1+e^{-w^Tx}}=\theta(w^Tx) h(x)=1+ewTx1=θ(wTx)

3. 真容

函数表达式有了,那么我们应该如何去学习一个目标呢,即要学习的参数有哪些呢?上式中要估计的参数为 w w w b b b。我们使用最大似然法来求解。之前的线性回归问题用的损失函数是Squared Error,但是LR用的在实际使用的是时候是一种分类学习算法。所以均方误差并不合适,取而代之的是Cross-Entropy error。下面看看推导吧。

假设我们有训练样本 D = { ( x 1 , 1 ) , . . . , ( x n , − 1 ) } D=\{(x_1,1),...,(x_n,-1)\} D={(x1,1),...,(xn,1)},那么对于训练样本的似然函数为:

\begin{align}L(h) = p(x_1)h(x_1),…,p(x_n)h(-x_n)
\end{align}
对于上式我们需要最大化似然,求解得到参数即可。
g = a r g m a x h L ( h ) g=\mathop{argmax}\limits_{h} L(h) g=hargmaxL(h)

其中 g g g为我们的目标的hypothesis,由于 p ( x 1 ) , . . . , p ( x n ) p(x_1),...,p(x_n) p(x1),...,p(xn)对于所有的 h h h都是一样的,所以:
\begin{align}L(h) &\propto h(x_1),…,h(-x_n)
\&=\prod_{n=1}^Nh(y_nx_n)
\end{align}

PS:
p ( y = 1 ∣ x ) = h ( x ) p(y=1|x)=h(x) p(y=1x)=h(x)
p ( y = − 1 ∣ x ) = 1 − h ( x ) p(y=-1|x)=1-h(x) p(y=1x)=1h(x)
即为伯努利分布,这也是Logistic Regression适合用于分类的原因。

我们的目标是求 w w w参数的取值,使用 h ( x ) = θ ( w T x ) h(x)=\theta(w^Tx) h(x)=θ(wTx)代入得到目标:
\begin{align}L(h) &\propto \prod_{n=1}N\theta(y_nwTx_n)
\end{align}
取对数得 m a x w l n ∏ n = 1 N θ ( y n w T x n ) \mathop{max}\limits_{w}ln\prod_{n=1}^N\theta(y_nw^Tx_n) wmaxlnn=1Nθ(ynwTxn),又因为 θ \theta θ是一个指数表示的形式,所以原来的累乘可以变成累加形式,并将最大化问题转换成最小化问题:
m i n w 1 N ∑ n = 1 N l n ( 1 + e x p ( − y n w T x n ) ) \mathop{min}\limits_{w}\frac{1}{N}\sum\limits_{n=1}^Nln(1+exp(-y_nw^Tx_n)) wminN1n=1Nln(1+exp(ynwTxn))
其中 1 N \frac{1}{N} N1只是为了使得和损失函数在形式上的统一, e r r ( w , x n , y n ) = l n ( 1 + e x p ( − y n w T x n ) ) err(w,x_n,y_n)=ln(1+exp(-y_nw^Tx_n)) err(w,xn,yn)=ln(1+exp(ynwTxn)) 称之为cross-entropy error。

PS:
这里可能有人说好像和其一些地方的cross-entropy
error不太一样,这是因为本文使用的label为 y n y_n yn=1或-1,但代进去就会发现两个表达式的结果是一致的。

4. 一步之遥

既然有了损失函数之后,我们要做的就是然这个损失函数最小化就好了。由于LR的损失函数是一个高阶可导连续的凸函数,那么根据凸优化理论就可以使用梯度下降法来求得其最优解,我们需要一个优化的方向和一个learning rate。

方向可以由梯度得到, e r r ( w , x n , y n ) err(w,x_n,y_n) err(w,xn,yn) w w w求导即可。学习率是一个超参。因此整个过程可以描述如下:

initialize w 0 w_0 w0 for t=0,1,…   
  1.计算: ∇ E i n ( w t ) = 1 N ∑ n = 1 N θ ( − y n w t T x n ) ( − y n x n ) \nabla{E_{in}(w_t)=\frac{1}{N}\sum\limits_{n=1}^N\theta(-y_nw_t^Tx_n)(-y_nx_n)} Ein(wt)=N1n=1Nθ(ynwtTxn)(ynxn)
  2.更新 w t + 1 = w t − η ∇ E i n ( w t ) w_{t+1}=w_t-\eta\nabla E_{in}(w_t) wt+1=wtηEin(wt)

直到 ∇ E i n ( w t ) = 0 \nabla E_{in}(w_t)=0 Ein(wt)=0 或者一定的迭代步数之后停止循环。

5. 尾巴

LR看起来是一个简单的模型,但据我所知在工业界还是挺受欢迎的,原因就在于它虽然简单,但是够稳定,可解释性好。但是LR本质上毕竟是一个线性模型,学习能力有限。

这里对于LR是线性模型可能有人会有一些疑问,LR明明用了一个sigmoid变换啊,而sigmoid不是可以作为神经网络的一种叫做激活函数的东西,这还是线性模型?这里LR和神经网络不同的是,LR只是通过sigmoid函数将线性回归的预测值映射到(0,1),但其决策的平面还是线性的,所以LR本质上还是一个线性模型。

一种方法是前期加入一些特征工程的工作(比如,不同特征进行组合),使得其达到拟合非线性的效果。还有一种方法就是使用模型来组合特征(如Facebook 2014年文章中的GBDT+LR),然后再将这些特征送到LR做分类。最近阿里公开其自主研发的MLR(Mixed Logistic Regression)算法,通过分片线性的方式,使其可以直接在原始空间学习非线性关系,实现拟合非线性的平面。最后,当然还可以使用近几年很火的DNN来自动提取特征了,再接一个LR或者softmax,但很可能会遇到过拟合的问题以及模型的稳定性都是一个值得商榷的问题。

以上内容均为博主根据相关资料整理而成,如有错误,请予指正。

参考资料:

  1. 周志华.《机器学习》p58-p59
  2. 林轩田. 机器学习基石课程 Lecture 10
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值