Logistic Regression的几个变种
原文:http://blog.xlvector.net/2014-02/different-logistic-regression/
最近几年广告系统成为很多公司的重要系统之一,定向广告技术是广告系统中的重要技术,点击率预估是定向广告技术中的重要组成部分,Logistic Regression是解决点击率预估最常用的机器学习算法。所以本文介绍一下Logistic Regression(下文简称LR)。
解决的问题
LR主要用来解决两类分类问题。下面的问题是一些典型的两类分类问题:
- 用户看到一个广告后会点还是不会点
- 一个人是男还是女
- 一张图片中的图像是不是人脸
- 一个人借钱后会不会还
两类分类问题是机器学习的基本问题,所有的分类算法至少都可以解决两类分类问题, 比如:
- 决策树,随机森林,GBDT
- SVM, Vector Machine
- Gauss Process
- 神经网络
那为什么点击率预估问题选择LR呢,主要是因为:
- 数据规模很大,而LR无论是训练还是预测的计算复杂度很低
- 特征很多,对特征做了线性变换,因此问题基本是线性的,线性分类器就可以解决
- LR不仅可以预测一个样本属于那一类,而且可以给出属于每一类的概率
- LR的模型简单,从而解释预测结果也相对容易
- LR的模型简单,从而并行化相对容易
不同类型的LR
自从LR提出之后,学术界对它的改进主要基于两个方面:
- 用什么样的正则化,早期是L2正则化,而最近用的比较多的是L1正则化
- 用什么样的优化算法,如何在最短的时间内收敛到最优的解
正则化
正则化是机器学习中的一个重要技术,它的主要目的是让防止一个模型过拟合。目前比较常用的正则化有L1,和L2:
- L2正则化认为特征的权重的先验分布是一个0附近的高斯分布
- L1正则化认为特征的权重的先验分布是一个0附近的拉普拉斯分布
L1正则化相对与L2正则化有一个优点,就是加入L1正则化的损失函数在优化后,绝大多数特征的权重都是0。这个特性可以大大减少在线预估时的内存占用,并提高预测的速度,这是因为
- 在线预估的主要计算样本的特征向量x和模型的特征权重向量w的点乘
- w向量一般需要用HashMap存储,而一个特征的权重为0,就不需要存储了,因为HashMap中不存在的特征就是权重为0
- 所以L1正则化可以减少w的内存占用,而w减小后,计算w和x的点乘的速度也能提高
优化方法
L2正则化的LR的损失函数是一个可以求导的凸函数,从而可以用最速下降法(梯度法)进行优化。一般梯度法有3种
- Batch
- Mini batch
- SGD (随机梯度法)
这3种方法是最早提出的优化方法。可以用梯度法,自然也可以用牛顿法来获得超线性收敛的特性,于是共轭梯度法和LBFGS也被用来优化LR。LBFGS是基于L2正则化的,如果基于L1正则化,微软提出了OWLQN算法(http://blog.csdn.net/qm1004/article/details/18083637)。
无论是梯度法还是拟牛顿法,它们都是频率学派的优化双方。它们其实是极大似然估计用了不同的优化算法。于是,贝叶斯学派也提出了Bayesian的优化算法
- Ad Predictor : 这是微软的研究员提出的一种算法, 论文可以参考 Web-Scale Bayesian Click-Through Rate Prediction for Sponsored Search Advertising in Microsoft’s Bing Search Engine。
Ad Predictor有几个比较好的特性
- 它只需要扫瞄一次数据集就可以收敛到最优解,而不是像梯度法或者拟牛顿法那样需要反复迭代数据集。
- 它不仅仅能预测出一个样本是正样本的概率,而且还可以给出对于这个概率预测值的置信度
Ad Predictor很好了,不过它是基于L2正则化的,这样总是让人不能满意。Google在2013年发表了一篇论文(Ad Click Prediction: a View from the Trenches),介绍了一个基于L1正则化的LR优化算法FTRL-Proximal,且又具有上述Ad Predictor的两个优点。
并行化
算法的并行化有两种
- 无损的并行化:算法天然可以并行,并行只是提高了计算的速度和解决问题的规模,但和正常执行的结果是一样的。
- 有损的并行化:算法本身不是天然并行的,需要对算法做一些近似来实现并行化,这样并行化之后的双方和正常执行的结果并不一致,但是相似的。
在前面提到的算法中,基于Batch的算法(Batch-GD, LBFGS, OWLQN)都是可以进行无损的并行化的。而基于SGD的算法(Ad Predictor, FTRL-Proximal)都只能进行有损的并行化。
Logistic Regression的几个变种的更多相关文章
- 逻辑回归(Logistic Regression)算法小结
一.逻辑回归简述: 回顾线性回归算法,对于给定的一些n维特征(x1,x2,x3,......xn),我们想通过对这些特征进行加权求和汇总的方法来描绘出事物的最终运算结果.从而衍生出我们线性回归的计算公 ...
- 通俗地说逻辑回归【Logistic regression】算法(二)sklearn逻辑回归实战
前情提要: 通俗地说逻辑回归[Logistic regression]算法(一) 逻辑回归模型原理介绍 上一篇主要介绍了逻辑回归中,相对理论化的知识,这次主要是对上篇做一点点补充,以及介绍sklear ...
- sklearn逻辑回归(Logistic Regression,LR)调参指南
python信用评分卡建模(附代码,博主录制) https://study.163.com/course/introduction.htm?courseId=1005214003&utm_ca ...
- 逻辑回归 Logistic Regression
逻辑回归(Logistic Regression)是广义线性回归的一种.逻辑回归是用来做分类任务的常用算法.分类任务的目标是找一个函数,把观测值匹配到相关的类和标签上.比如一个人有没有病,又因为噪声的 ...
- logistic regression与SVM
Logistic模型和SVM都是用于二分类,现在大概说一下两者的区别 ① 寻找最优超平面的方法不同 形象点说,Logistic模型找的那个超平面,是尽量让所有点都远离它,而SVM寻找的那个超平面,是只 ...
- Logistic Regression - Formula Deduction
Sigmoid Function \[ \sigma(z)=\frac{1}{1+e^{(-z)}} \] feature: axial symmetry: \[ \sigma(z)+ \sigma( ...
- SparkMLlib之 logistic regression源码分析
最近在研究机器学习,使用的工具是spark,本文是针对spar最新的源码Spark1.6.0的MLlib中的logistic regression, linear regression进行源码分析,其 ...
- [OpenCV] Samples 06: [ML] logistic regression
logistic regression,这个算法只能解决简单的线性二分类,在众多的机器学习分类算法中并不出众,但它能被改进为多分类,并换了另外一个名字softmax, 这可是深度学习中响当当的分类算法 ...
- Stanford机器学习笔记-2.Logistic Regression
Content: 2 Logistic Regression. 2.1 Classification. 2.2 Hypothesis representation. 2.2.1 Interpretin ...
随机推荐
- leetcode 奇偶链表 python
要求空间复杂度O(1) 那就只能用指针不断改链表的指针, 不能建立新的内存 时间复杂度O(1) 一遍遍历 不能嵌套循环 我的思想是: 1 如果链表元素数量小于等于2个,那就无法操作 2 能操作的情况下 ...
- BZOJ.3110.[ZJOI2013]K大数查询(整体二分 树状数组/线段树)
题目链接 BZOJ 洛谷 整体二分求的是第K小(利用树状数组).求第K大可以转为求第\(n-K+1\)小,但是这样好像得求一个\(n\). 注意到所有数的绝对值\(\leq N\),将所有数的大小关系 ...
- 持续集成之Jenkins插件使用(一)- 多个job之间的串并联
转载自:http://qa.blog.163.com/blog/static/190147002201391661510655/ Jenkins除了开源和免费,还有一个最吸引人的功能之一就是支持插件. ...
- LR下监控windows系统资源方法
1. 通过客户端与服务器进行网络测试,保证通信畅通.(测试主机本身) 2. 在运行中输入,service.msc打开系统的服务设置,开启服务器端Windows中的如 ...
- FolderSync Instant sync 即时同步
Folderpairs - Edit folderpair - Sync options - Instant sync Select this for instant sync on change. ...
- 关于ANDROID模拟器的一些事
转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 继上一篇Android Studio VS Eclipse的文章后接着来分享AnDevCo ...
- c#开发地磅称重软件
2012年时即做过一个地磅称重软件,最近公司又接了一个地磅过磅软件的项目,把遇到的问题总结一下以备后用. 1.接线问题 因为客户方原来单独使用仪表,仪表未有接线和电脑连接,为此颇费周折才做好了接线.接 ...
- 【spring cloud】【IDEA】【maven】spring cloud多模块在idea上使用maven插件打包报错:程序包XXX不存在
>>>>spring cloud 多模块 >>>>在idea上使用maven插件打包,欲打包成jar包后 进行部署 >>>> 报 ...
- tinyxml使用笔记与总结
在TinyXML中,根据XML的各种元素来定义了一些类: TiXmlBase:整个TinyXML模型的基类. TiXmlAttribute:对应于XML中的元素的属性. ...
- 如何停止一个正在运行的java线程
与此问题相关的内容主要涉及三部分:已废弃的Thread.stop().迷惑的thread.interrupt系列.最佳实践Shared Variable. 已废弃的Thread.stop() @Dep ...