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 ...
随机推荐
- CF912D Fishes 期望 + 贪心
有趣的水题 由期望的线性性质,全局期望 = 每个格子的期望之和 由于权值一样,我们优先选概率大的点就好了 用一些数据结构来维护就好了 复杂度$O(k \log n)$ #include <set ...
- 【HDU】3401:Trade【单调队列优化DP】
Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- NOIP2018 RP++
飞吧,不用看向地面. NOIP,RP++.
- hdoj 1002 A + B Problem II 高精度 java
A + B Problem II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- CentOS6.X关闭防火墙
一.关闭防火墙 1.重启后永久性生效: 开启:chkconfig iptables on 关闭:chkconfig iptables off 2.即时生效,重启后失效: 开启:service ipta ...
- Caffe2(1)----Ubantu14.04安装
英文好的请直接参考官方安装文档:Ubantu14.04下的源码编译. Caffe2的安装相比以前Caffe一代的安装,简直有点一键装机的感觉,下面简单总结下Caffe2的安装. 环境:Ubantu14 ...
- 使用socket.io+redis来实现基本的聊天室应用场景
本文根据socket.io与Redis来实现基本的聊天室应用场景,主要表现于多个浏览器之间的信息同步和实时更新. 只是简单记录了一下, 更详细的内容可以参考后续的一篇补充文章: 使用node.js + ...
- ESB的几个基本概念
京-星之泪: 请教一个问题:esb中路由和管道对的概念应该怎么理解,各自有什么用途,他们之间的关系 北京-kimmking: transport endpoint inbound outboun ...
- Android字体简述
Android是一个典型的Linux内核的操作系统.在Android系统中,主要有DroidSans和DroidSerif两大字体阵营,从名字就可以看出来,前者是无衬线字体,后者是衬线字体.具体来说, ...
- [Go] 复合类型(数组、切片、字典、结构体)变量的 初始化 及 注意事项
Go变量 初始化 对 复合类型(数组.切片.字典.结构体)变量的初始化是,有一些语法限制: 1.初始化表达式必须包含类型标签: 2.左花括号必须在类型尾部,不能另起一行: 3.多个成员初始值以逗号分隔 ...