Logistic Regression的几个变种

原文:http://blog.xlvector.net/2014-02/different-logistic-regression/

最近几年广告系统成为很多公司的重要系统之一,定向广告技术是广告系统中的重要技术,点击率预估是定向广告技术中的重要组成部分,Logistic Regression是解决点击率预估最常用的机器学习算法。所以本文介绍一下Logistic Regression(下文简称LR)。

解决的问题

LR主要用来解决两类分类问题。下面的问题是一些典型的两类分类问题:

  1. 用户看到一个广告后会点还是不会点
  2. 一个人是男还是女
  3. 一张图片中的图像是不是人脸
  4. 一个人借钱后会不会还

两类分类问题是机器学习的基本问题,所有的分类算法至少都可以解决两类分类问题, 比如:

  1. 决策树,随机森林,GBDT
  2. SVM, Vector Machine
  3. Gauss Process
  4. 神经网络

那为什么点击率预估问题选择LR呢,主要是因为:

  1. 数据规模很大,而LR无论是训练还是预测的计算复杂度很低
  2. 特征很多,对特征做了线性变换,因此问题基本是线性的,线性分类器就可以解决
  3. LR不仅可以预测一个样本属于那一类,而且可以给出属于每一类的概率
  4. LR的模型简单,从而解释预测结果也相对容易
  5. LR的模型简单,从而并行化相对容易

不同类型的LR

自从LR提出之后,学术界对它的改进主要基于两个方面:

  1. 用什么样的正则化,早期是L2正则化,而最近用的比较多的是L1正则化
  2. 用什么样的优化算法,如何在最短的时间内收敛到最优的解

正则化

正则化是机器学习中的一个重要技术,它的主要目的是让防止一个模型过拟合。目前比较常用的正则化有L1,和L2:

  1. L2正则化认为特征的权重的先验分布是一个0附近的高斯分布
  2. L1正则化认为特征的权重的先验分布是一个0附近的拉普拉斯分布

L1正则化相对与L2正则化有一个优点,就是加入L1正则化的损失函数在优化后,绝大多数特征的权重都是0。这个特性可以大大减少在线预估时的内存占用,并提高预测的速度,这是因为

  • 在线预估的主要计算样本的特征向量x和模型的特征权重向量w的点乘
  • w向量一般需要用HashMap存储,而一个特征的权重为0,就不需要存储了,因为HashMap中不存在的特征就是权重为0
  • 所以L1正则化可以减少w的内存占用,而w减小后,计算w和x的点乘的速度也能提高

优化方法

L2正则化的LR的损失函数是一个可以求导的凸函数,从而可以用最速下降法(梯度法)进行优化。一般梯度法有3种

  1. Batch
  2. Mini batch
  3. 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有几个比较好的特性

  1. 它只需要扫瞄一次数据集就可以收敛到最优解,而不是像梯度法或者拟牛顿法那样需要反复迭代数据集。
  2. 它不仅仅能预测出一个样本是正样本的概率,而且还可以给出对于这个概率预测值的置信度

Ad Predictor很好了,不过它是基于L2正则化的,这样总是让人不能满意。Google在2013年发表了一篇论文(Ad Click Prediction: a View from the Trenches),介绍了一个基于L1正则化的LR优化算法FTRL-Proximal,且又具有上述Ad Predictor的两个优点。

并行化

算法的并行化有两种

  1. 无损的并行化:算法天然可以并行,并行只是提高了计算的速度和解决问题的规模,但和正常执行的结果是一样的。
  2. 有损的并行化:算法本身不是天然并行的,需要对算法做一些近似来实现并行化,这样并行化之后的双方和正常执行的结果并不一致,但是相似的。

在前面提到的算法中,基于Batch的算法(Batch-GD, LBFGS, OWLQN)都是可以进行无损的并行化的。而基于SGD的算法(Ad Predictor, FTRL-Proximal)都只能进行有损的并行化。

时间: 2024-08-26 12:13:01

Logistic Regression的几个变种的相关文章

sklearn逻辑回归(Logistic Regression,LR)调参指南

python信用评分卡建模(附代码,博主录制) https://study.163.com/course/introduction.htm?courseId=1005214003&utm_campaign=commission&utm_source=cp-400000000398149&utm_medium=share sklearn逻辑回归官网调参指南 https://scikit-learn.org/stable/modules/generated/sklearn.linear

Logistic Regression & Classification (1)

一.为什么不使用Linear Regression 一个简单的例子:如果训练集出现跨度很大的情况,容易造成误分类.如图所示,图中洋红色的直线为我们的假设函数 .我们假定,当该直线纵轴取值大于等于0.5时,判定Malignant为真,即y=1,恶性肿瘤:而当纵轴取值小于0.5时,判定为良性肿瘤,即y=0. 就洋红色直线而言,是在没有最右面的"×"的训练集,通过线性回归而产生的.因而这看上去做了很好的分类处理,但是,当训练集中加入了右侧的"×"之后,导致整个线性回归的结

对Logistic Regression 的初步认识

线性回归 回归就是对已知公式的未知参数进行估计.比如已知公式是y=a∗x+b,未知参数是a和b,利用多真实的(x,y)训练数据对a和b的取值去自动估计.估计的方法是在给定训练样本点和已知的公式后,对于一个或多个未知参数,机器会自动枚举参数的所有可能取值,直到找到那个最符合样本点分布的参数(或参数组合).也就是给定训练样本,拟合参数的过程,对y= a*x + b来说这就是有一个特征x两个参数a b,多个样本的话比如y=a*x1+b*x2+...,用向量表示就是y =  ,就是n个特征,n个参数的拟

Coursera台大机器学习课程笔记9 -- Logistic Regression

这一节课主要讲如何用logistic regression做分类. 在误差衡量问题上,选取了最大似然函数误差函数,这一段推导是难点. 接下来是如何最小化Ein,采用的是梯度下降法,这个比较容易. 参考:http://beader.me/mlnotebook/section3/logistic-regression.html http://www.cnblogs.com/ymingjingr/p/4330304.html

logistic regression编程练习

本练习以<机器学习实战>为基础, 重现书中代码, 以达到熟悉算法应用为目的 1.梯度上升算法 新建一个logRegres.py文件, 在文件中添加如下代码: from numpy import * #加载模块 numpy def loadDataSet(): dataMat = []; labelMat = [] #加路径的话要写作:open('D:\\testSet.txt','r') 缺省为只读 fr = open('testSet.txt') #readlines()函数一次读取整个文件

最详细的基于R语言的Logistic Regression(Logistic回归)源码,包括拟合优度,Recall,Precision的计算

这篇日志也确实是有感而发,我对R不熟悉,但实验需要,所以简单学了一下.发现无论是网上无数的教程,还是书本上的示例,在讲Logistic Regression的时候就是给一个简单的函数及输出结果说明.从来都没有讲清楚几件事情: 1. 怎样用训练数据训练模型,然后在测试数据上进行验证(测试数据和训练数据可能有重合)? 2. 怎样计算预测的效果,也就是计算Recall,Precision,F-measure等值? 3. 怎样计算Nagelkerke拟合优度等评价指标? 发现这些书本和一些写博客的朋友,

深度学习 Deep LearningUFLDL 最新Tutorial 学习笔记 2:Logistic Regression

1 Logistic Regression 简述 Linear Regression 研究连续量的变化情况,而Logistic Regression则研究离散量的情况.简单地说就是对于推断一个训练样本是属于1还是0.那么非常easy地我们会想到概率,对,就是我们计算样本属于1的概率及属于0的概率,这样就能够依据概率来预计样本的情况,通过概率也将离散问题变成了连续问题. Specifically, we will try to learn a function of the form: P(y=1

Regularization in Linear Regression & Logistic Regression

一.正则化应用于基于梯度下降的线性回归 上一篇文章我们说过,通过正则化的思想,我们将代价函数附加了一个惩罚项,变成如下的公式: 那么我们将这一公式套用到线性回归的代价函数中去.我们说过,一般而言θ0我们不做处理,所以我们把梯度下降计算代价函数最优解的过程转化为如下两个公式. 我们通过j>0的式子,能够分析得出,θj 我们可以提取公因子,即将上式变成: 由于θj的系数小于1,可以看出, 正则化线性回归的梯度下降算法的变化在于,每次都在原有算法更新规则的 基础上令 θ 值减少了一个额外的值. 那么至

Logistic Regression‘s Cost Function & Classification (2)

一.为什么不用Linear Regression的Cost Function来衡量Logistic Regression的θ向量 回顾一下,线性回归的Cost Function为 我们使用Cost函数来简化上述公式: 那么通过上一篇文章,我们知道,在Logistic Regression中,我们的假设函数是sigmoid形式的,也就是: 这样一来会产生一个凸(convex)函数优化的问题,我们将g(z)带入到Cost函数中,得到的J(θ)是一个十分不规则的非凸函数,如图所示,如果使用梯度下降法来