LogisticRegression模型
逻辑回归(Logistic Regression)是机器学习中的⼀种分类模型,由于算法的简单和⾼效,在实际中应⽤⾮常⼴泛。本⽂作为美团机器学习InAction系列中的⼀篇,主要关注逻辑回归算法的数学模型和参数求解⽅法,最后也会简单讨论下逻辑回归和贝叶斯分类的关系,以及在多分类问题上的推⼴。
逻辑回归
问题
实际⼯作中,我们可能会遇到如下问题:
1. 预测⼀个⽤户是否点击特定的商品
2. 判断⽤户的性别
3. 预测⽤户是否会购买给定的品类
4. 判断⼀条评论是正⾯的还是负⾯的
这些都可以看做是分类问题,更准确地,都可以看做是⼆分类问题。同时,这些问题本⾝对美团也有很重
要的价值,能够帮助我们更好的了解我们的⽤户,服务我们的⽤户。要解决这些问题,通常会⽤到⼀些已有的分类算法,⽐如逻辑回归,或者⽀持向量机。它们都属于有监督的学习,因此在使⽤这些算法之前,必须要先收集⼀批标注好的数据作为训练集。有些标注可以从log中拿到(⽤户的点击,购买),有些可以从⽤户填写的信息中获得(性别),也有⼀些可能需要⼈⼯标注(评论情感极性)。另⼀⽅⾯,知道了⼀个⽤户或者⼀条评论的标签后,我们还需要知道⽤什么样的特征去描述我们的数据,对⽤户来说,可以从⽤户的浏览记录和购买记录中获取相应的统计特征,⽽对于评论来说,最直接的则是⽂本特征。这样拿到数据的特征和标签后,就得到⼀组训练数据:
其中是⼀个 m 维的向量,,y 在 {0, 1} 中取值。(本⽂⽤{1,0}表⽰正例和负例,后⽂沿⽤此定义。)
我们的问题可以简化为,如何到这样⼀个决策函数,它在未知数据集上能有⾜够好的表现。⾄于如何衡量⼀个⼆分类模型的好坏,我们可以⽤分类错误率这样的指标:。也可以⽤准确率,召回率,AUC等指标来衡量。
值得⼀提的是,模型效果往往和所⽤特征密切相关。特征⼯程在任何⼀个实⽤的机器学习系统中都是必不可少的,机器学习InAction系列已有⼀篇⽂章中对此做了详细的介绍,本⽂不再详细展开。
模型
sigmoid 函数第一范式正则化不能产生稀疏解
在介绍逻辑回归模型之前,我们先引⼊sigmoid函数,其数学形式是:
对应的函数曲线如下图所⽰:
从上图可以看到sigmoid函数是⼀个s形的曲线,它的取值在[0, 1]之间,在远离0的地⽅函数的值会很快接近0/1。这个性质使我们能够以概率的⽅式来解释(后边延伸部分会简单讨论为什么⽤该函数做概率建模是合理的)。
决策函数
⼀个机器学习的模型,实际上是把决策函数限定在某⼀组条件下,这组限定条件就决定了模型的假设空间。当然,我们还希望这组限定条件简单⽽合理。⽽逻辑回归模型所做的假设是:
这⾥的 \(g(h)\) 是上边提到的 sigmoid 函数,相应的决策函数为:
选择0.5作为阈值是⼀个⼀般的做法,实际应⽤时特定的情况可以选择不同阈值,如果对正例的判别准确性要求⾼,可以选择阈值⼤⼀些,对正例的召回要求⾼,则可以选择阈值⼩⼀些。
参数求解
模型的数学形式确定后,剩下就是如何去求解模型中的参数。统计学中常⽤的⼀种⽅法是最⼤似然估计,即到⼀组参数,使得在这组参数下,我们的数据的似然度(概率)越⼤。在逻辑回归模型中,似然度可表⽰为:
取对数可以得到对数似然度:
另⼀⽅⾯,在机器学习领域,我们更经常遇到的是损失函数的概念,其衡量的是模型预测错误的程度。常⽤的损失函数有0-1损失,log损失,hinge损失等。其中log损失在单个数据点上的定义为
如果取整个数据集上的平均log损失,我们可以得到
即在逻辑回归模型中,我们最⼤化似然函数和最⼩化log损失函数实际上是等价的。对于该优化问题,存在多种求解⽅法,这⾥以梯度下降的为例说明。梯度下降(Gradient Descent)⼜叫作最速梯度下降,是⼀种迭代求解的⽅法,通过在每⼀步选取使⽬标函数变化最快的⼀个⽅向调整参数的值来逼近最优值。基本步骤如下:
选择下降⽅向(梯度⽅向,)
选择步长,更新参数
重复以上两步直到满⾜终⽌条件
其中损失函数的梯度计算⽅法为:
沿梯度负⽅向选择⼀个较⼩的步长可以保证损失函数是减⼩的,另⼀⽅⾯,逻辑回归的损失函数是凸函数(加⼊正则项后是严格凸函数),可以保证我们到的局部最优值同时是全局最优。此外,常⽤的凸优化的⽅法都可以⽤于求解该问题。例如共轭梯度下降,⽜顿
法,LBFGS等。
分类边界
知道如何求解参数后,我们来看⼀下模型得到的最后结果是什么样的。很容易可以从sigmoid函数看出,当,y = 1,否则 y = 0。
是模型隐含的分类平⾯(在⾼维空间中,我们说是超平⾯)。所以说逻辑回归本质上是⼀个线性模型,但是,这不意味着只有线性可分的数据能通过LR求解,实际上,我们可以通过特征变换的⽅式把低维空间转换到⾼维空间,⽽在低维空间不可分的数据,到⾼维空间中线性可分的⼏率会⾼⼀些。下⾯两个图的对⽐说明了线性分类曲线和⾮线性分类曲线(通过特征映射)。
左图是⼀个线性可分的数据集,右图在原始空间中线性不可分,但是在特征转换
后的空间是线性可分的,对应的原始空间中分类边界为⼀条类椭圆曲线。
正则化
当模型的参数过多时,很容易遇到过拟合的问题。这时就需要有⼀种⽅法来控制模型的复杂度,典型的做法在优化⽬标中加⼊正则项,通过惩罚过⼤的参数来防⽌过拟合:
⼀般情况下,取p=1或p=2,分别对应L1,L2正则化,两者的区别可以从下图中看出来,L1正则化(左图)倾向于使参数变为0,因此能产⽣稀疏解。
实际应⽤时,由于我们数据的维度可能⾮常⾼,L1正则化因为能产⽣稀疏解,使⽤的更为⼴泛⼀些。
延伸
⽣成模型和判别模型
逻辑回归是⼀种判别模型,表现为直接对条件概率P(y|x)建模,⽽不关⼼背后的数据分布P(x,y)。⽽⾼斯贝叶斯模型(Gaussian Naive Bayes)是⼀种⽣成模型,先对数据的联合分布建模,再通过贝叶斯公式来计算样本属于各个类别的后验概率,即:
通常假设P(x|y)是⾼斯分布,P(y)是多项式分布,相应的参数都可以通过最⼤似然估计得到。如果我们考虑⼆分类问题,通过简单的变化可以得到:
如果,⼆次项会抵消,我们得到⼀个简单的线性关系:
由上式进⼀步可以得到:
可以看到,这个概率和逻辑回归中的形式是⼀样的。这种情况下GNB 和 LR 会学习到同⼀个模型。实际上,在更⼀般的假设(P(x|y)的分布属于指数分布族)下,我们都可以得到类似的结论。
多分类(softmax)
如果\(y\)不是在[0,1]中取值,⽽是在\(K\)个类别中取值,这时问题就变为⼀个多分类问题。有两种⽅式可以出处理该类问题:⼀种是我们对每个类别训练⼀个⼆元分类器(One-vs-all),当\(K\)个类别不是互斥的时候,⽐如⽤户会购买哪种品类,这种⽅法是合适的。如果\(K\)个类
别是互斥的,即 \(y = i\) 的时候意味着 \(y\) 不能取其他的值,⽐如⽤户的年龄段,这种情况下 Softmax 回归更合适⼀些。Softmax 回归是直接对逻辑回归在多分类的推⼴,相应的模型也可以叫做多元逻辑回归(Multinomial Logistic Regression)。模型通过 softmax 函数来对概率建模,具体形式如下:
⽽决策函数为:
对应的损失函数为:
类似的,我们也可以通过梯度下降或其他⾼阶⽅法来求解该问题,这⾥不再赘述。
应⽤
本⽂开始部分提到了⼏个在实际中遇到的问题,这⾥以预测⽤户对品类的购买偏好为例,介绍⼀下美团是如何⽤逻辑回归解决⼯作中问题的。该问题可以转换为预测⽤户在未来某个时间段是否会购买某个品类,如果把会购买标记为1,不会购买标记为0,就转换为⼀个⼆分类问题。我们⽤到的特征包括⽤户在美团的浏览,购买等历史信息,见下表
其中提取的特征的时间跨度为30天,标签为2天。⽣成的训练数据⼤约在7000万量级(美团⼀个⽉有过⾏为的⽤户),我们⼈⼯把相似的⼩品类聚合起来,最后有18个较为典型的品类集合。如果⽤户在给定的时间内购买某⼀品类集合,就作为正例。哟了训练数据后,使⽤Spark 版的LR算法对每个品类训练⼀个⼆分类模型,迭代次数设为100次的话模型训练需要40分钟左右,平均每个模型2分钟,测试集上的AUC也⼤多在0.8以上。训练好的模型会保存下来,⽤于预测在各个品类上的购买概率。预测的结果则会⽤于推荐等场景。
由于不同品类之间正负例分布不同,有些品类正负例分布很不均衡,我们还尝试了不同的采样⽅法,最终⽬标是提⾼下单率等线上指标。经过⼀些参数调优,品类偏好特征为推荐和排序带来了超过1%的下单率提升。
此外,由于LR模型的简单⾼效,易于实现,可以为后续模型优化提供⼀个不错的baseline,我们在排序等服务中也使⽤了LR模型。
总结
逻辑回归的数学模型和求解都相对⽐较简洁,实现相对简单。通过对特征做离散化和其他映射,逻辑回归也可以处理⾮线性问题,是⼀个⾮常强⼤的分类器。因此在实际应⽤中,当我们能够拿到许多低层次的特征时,可以考虑使⽤逻辑回归来解决我们的问题。
参考资料
Trevor Hastie et al. The elements of statistical learning
Andrew Ng, CS 229 lecture notes
C.M. Bishop, Pattern recognition and machine learning
Andrew Ng et al. On discriminative vs. generative classifiers:a comparison of logistic regression and naïve bayes
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论