正文共5103张图,34张图,预计阅读时间20分钟。

写作计划

线性模型LR(没有考虑特征间的关联)——>LR +多项式模型(特征组合,不适用于特征稀疏场景,泛化能力弱)——>FM(适用于稀疏特征场景*,泛化能力强)——>FFM【省去零值特征,提高FFM模型训练和预测的速度,这也是稀疏样本采用FFM的显著优势】

前言

逻辑回归(LR,Logistic Regression)是传统机器学习中的一种分类模型,由于LR算法具有简单、高效、易于并行且在线学习(动态扩展)的特点,在工业界具有非常广泛的应用。

在线学习算法:LR属于一种在线学习算法,可以利用新的数据对各个特征的权重进行更新,而不需要重新利用历史数据训练。

LR适用于各项广义上的分类任务,例如:评论信息正负情感分析(二分类)、用户点击率(二分类)、用户违约信息预测(二分类)、用户等级分类(多分类 )等场景。

实际开发中,一般针对该类任务首先都会构建一个基于LR的模型作为Baseline Model,实现快速上线,然后在此基础上结合后续业务与数据的演进,不断的优化改进!

1、线性回归模型

提到LR,就不得不先从线性回归模型讲起:

概念:对于多维空间中存在的样本点,我们用特征的线性组合(特征加权)去拟合空间中点的分布和轨迹。

有监督训练数据集(X,Y),X表示特征,Y表示标签,w表示该某一特征对应的权重,最终的线性模型如hw(x)所示:

线性回归模型既可以用于回归,也可以用于分类。

  • 解决回归问题,可以用于连续目标值的预测。

  • 但是针对分类问题,该方法则有点不适应,应为线性回归的输出值是不确定范围的,无法很好的一一对应到我们的若干分类中。即便是一个二分类,线性回归+阈值的方式,已经很难完成一个鲁棒性很好的分类器了。

为了更好的实现分类,逻辑回归诞生了。

[逻辑回归是假设数据服从Bernoulli分布,因此LR属于参数模型]

2、逻辑回归

通过在线性回归模型中引入Sigmoid函数,将线性回归的不确定范围的连续输出值映射到(0,1)范围内,成为一个概率预测问题。

可以把LR看作单层的神经网络。

LR目标函数:

其中Sigmoid函数g(z)的定义如下:

Sigmoid函数的函数图像为:

Sigmoid函数的导数形式:

整合一下,LR的单个样本的目标函数为:

假设有n个独立的训练样本{(x1, y1) ,(x2, y2),…, (xn, yn)},y={0, 1}。那每一个观察到的样本(xi, yi)出现的概率是:

解释一下:

当y=1的时候,后面那一项是不是没有了,那就只剩下x属于1类的概率,当y=0的时候,第一项是不是没有了,那就只剩下后面那个x属于0的概率(1减去x属于1的概率)。所以不管y是0还是1,上面得到的数,都是(x, y)出现的概率。

那我们的整个样本集,也就是n个独立的样本出现的似然函数为(因为每个样本都是独立的,所以n个样本出现的概率就是他们各自出现的概率相乘),到整个样本的后验概率:

其中:

通过对数进一步化简为,最终LR的目标函数为:

2.1.如何求解模型的参数?

LR模型的数学形式确定后,剩下就是如何去求解模型中的参数。

统计学中常用的一种方法是最大似然估计(MLE),即找到一组参数,使得在这组参数下,我们的数据的似然度(概率)越大。对于该优化问题,存在多种求解方法,这里以梯度下降的为例说明。

梯度下降(Gradient Descent)又叫作最速梯度下降,是一种迭代求解的方法,通过在每一步选取使目标函数变化最快的一个方向调整参数的值来逼近最优值。

基本步骤如下:

利用链式法对目标函数则进行求导:

其中,一共可以分为三部分分别求导:

第一部分:

第二部分:

第三部分:

最终整体的求导形式:

模型参数的更新公式为:

沿梯度负方向选择一个较小的步长可以保证损失函数是减小的,另一方面,逻辑回归的损失函数是凸函数(加入正则项后是严格凸函数),可以保证我们找到的局部最优值同时是全局最优。

此外,常用的凸优化的方法都可以用于求解该问题。例如共轭梯度下降,牛顿法,LBFGS等。

2.2.Python实现LR的核心代码片段

 1# coding:utf-8 2''' 3Created on Oct 27, 2010 4Logistic Regression Working Module 5@author: Peter 6代码来源:机器学习实战-第五章的源码片段 7''' 8def sigmoid(inX): 9return 1.0/(1+exp(-inX))10def stocGradAscent(dataMatrix, classLabels, numIter=150):11m,n = shape(dataMatrix)12weights = ones(n)   #initialize to all ones13for j in range(numIter):14dataIndex = range(m)15for i in range(m):16    alpha = 4/(1.0+j+i)+0.0001    #apha decreases with iteration, does not 17    randIndex = int(random.uniform(0,len(dataIndex)))#go to 0 because of the constant18    h = sigmoid(sum(dataMatrix[randIndex]*weights))19    # 标签的真实值-预测值20    error = classLabels[randIndex] - h21    # 模型参数更新公式(与我们推导的形式一致)22    weights = weights + alpha * error * dataMatrix[randIndex]23    del(dataIndex[randIndex])24return weights

2.3.模型的优化-引入正则化

当模型的参数过多时,很容易遇到过拟合的问题。这时就需要有一种方法来控制模型的复杂度,典型的做法在优化目标中加入正则项,通过惩罚过大的参数来防止过拟合。

引入正则项的LR目标函数:

一般情况下,取p=1或p=2,分别对应L1,L2正则化,两者的区别可以从下图中看出来,L1正则化(左图)倾向于使参数变为0,因此能产生稀疏解。

实际应用时,由于我们数据的维度可能非常高,L1正则化因为能产生稀疏解,使用的更为广泛一些。

3、LR如何解决多分类问题?

简言之,把Sigmoid函数换成softmax函数,即可适用于多分类的场景。

Softmax 回归是直接对逻辑回归在多分类的推广,相应的模型也可以叫做多元逻辑回归(Multinomial Logistic Regression)。

softmax函数为:

整体的目标函数:

使用softmax的多分类与使用Sigmoid的二分类有什么区别与联系?

通过上面的推导可知,当多分类的K=2时,与使用Sigmoid的二分类是一致的。

4、LR如何解决线性不可分问题?

逻辑回归本质上是一个线性模型,但是,这不意味着只有线性可分的数据能通过LR求解,实际上,我们可以通过2种方式帮助LR实现:

(1)利用特殊核函数,对特征进行变换:把低维空间转换到高维空间,而在低维空间不可分的数据,到高维空间中线性可分的几率会高一些。

(2)扩展LR算法,提出FM算法。

使用核函数(特征组合映射)


针对线性不可分的数据集,可以尝试对给定的两个feature做一个多项式特征的映射,例如:

下面两个图的对比说明了线性分类曲线和非线性分类曲线(通过特征映射)

左图是一个线性可分的数据集,右图在原始空间中线性不可分,但是利用核函数,对特征转换 [x1,x2]=>[x1,x2,x21,x22,x1x2]后的空间是线性可分的,对应的原始空间中分类边界为一条类椭圆曲线。

在LR中,我们可以通过在基本线性回归模型的基础上引入交叉项,来实现非线性分类,如下:

但是这种直接在交叉项xixj的前面加上交叉项系数wij的方式在稀疏数据的情况下存在一个很大的缺陷,即在对于观察样本中未出现交互的特征分量,不能对相应的参数进行估计。

即,在数据稀疏性普遍存在的实际应用场景中,二次项参数的训练是很困难的。其原因是,每个参数 wij的训练需要大量xi和 xj都非零的样本;由于样本数据本来就比较稀疏,满足xi 和 xj都非零”的样本将会非常少。训练样本的不足,很容易导致参数 wij 不准确,最终将严重影响模型的性能。

为什么特征稀疏?


one-hote编码带来的问题

在机器学习中,尤其是计算广告领域,特征并不总是数值型,很多时候是分类值,对于categorical feature,通常会采用one-hot encoding转换成数值型特征,转化过程会产生大量稀疏数据。

可以这么理解:对于每一个特征,如果它有m个可能取值,那么经过one-hot encoding之后,就变成了m个二元特征,并且,这些特征互斥,每次只有一个激活,因此,数据会变得稀疏。

one-hot编码带来的另一个问题是特征空间变大。同样以上面淘宝上的item为例,将item进行one-hot编码以后,样本空间有一个categorical变为了百万维的数值特征,特征空间一下子暴增一百万。所以大厂动不动上亿维度,就是这么来的。

在工业界,很少直接将连续值(eg.年龄特征)作为逻辑回归模型的特征输入,而是将连续特征离散化为一系列0、1特征交给LR。

LR为什么要对连续数值特征进行离散化?


1、离散特征的增加和减少都很容易,易于模型的快速迭代;

2、稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展;

3、离散化后的特征对异常数据有很强的鲁棒性:比如一个特征是年龄>30是1,否则0。如果特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰;

4、逻辑回归属于广义线性模型,表达能力受限;单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合;

5、离散化后可以进行特征交叉,由M+N个变量变为M*N个变量,进一步引入非线性,提升表达能力;

6、特征离散化后,模型会更稳定,比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问;

7、特征离散化以后,起到了简化了逻辑回归模型的作用,降低了模型过拟合的风险。

李沐曾经说过:模型是使用离散特征还是连续特征,其实是一个“海量离散特征+简单模型” 同 “少量连续特征+复杂模型”的权衡。既可以离散化用线性模型,也可以用连续特征加深度学习。就看是喜欢折腾特征还是折腾模型了。通常来说,前者容易,而且可以n个人一起并行做,有成功经验;后者目前看很赞,能走多远还须拭目以待。

使用FM模型


另一种方法是对LR进行扩展,因子分解机(Factorization Machine,FM)是对LR算法的扩展。FM模型是一种基于矩阵分解的机器学习模型,对于稀疏数据具有很好的学习能力;

对于因子分解机FM来说,最大的特点是对于稀疏的数据具有很好的学习能力。

FM解决了LR泛化能力弱的问题,其目标函数如下所示:

上面两张精简的PPT来自于新浪微博AI-Lab的张俊林老师的技术分享。

后续有时间继续从FM-->FFM开始写

5、面试常见问题

针对学生党的福利时刻,自己记录的几个有关LR的面试题:

LR与SVM的联系与区别:


联系:

1、LR和SVM都可以处理分类问题,且一般都用于处理线性二分类问题(在改进的情况下可以处理多分类问题)

2、两个方法都可以增加不同的正则化项,如l1、l2等等。所以在很多实验中,两种算法的结果是很接近的。

区别:

1、LR是参数模型[逻辑回归是假设y服从Bernoulli分布],SVM是非参数模型,LR对异常值更敏感。

2、从目标函数来看,区别在于逻辑回归采用的是logistical loss,SVM采用的是hinge loss,这两个损失函数的目的都是增加对分类影响较大的数据点的权重,减少与分类关系较小的数据点的权重。

3、SVM的处理方法是只考虑support vectors,也就是和分类最相关的少数点,去学习分类器。而逻辑回归通过非线性映射,大大减小了离分类平面较远的点的权重,相对提升了与分类最相关的数据点的权重。

4、逻辑回归相对来说模型更简单,好理解,特别是大规模线性分类时比较方便。而SVM的理解和优化相对来说复杂一些,SVM转化为对偶问题后,分类只需要计算与少数几个支持向量的距离,这个在进行复杂核函数计算时优势很明显,能够大大简化模型和计算。

5、logic 能做的 svm能做,但可能在准确率上有问题,svm能做的logic有的做不了。

如何选择LR与SVM?


非线性分类器,低维空间可能很多特征都跑到一起了,导致线性不可分。

1、如果Feature的数量很大,跟样本数量差不多,这时候选用LR或者是Linear Kernel的SVM

2、如果Feature的数量比较小,样本数量一般,不算大也不算小,选用SVM+Gaussian Kernel

3、如果Feature的数量比较小,而样本数量很多,需要手工添加一些feature变成第一种情况。

模型复杂度:SVM支持核函数,可处理线性非线性问题;LR模型简单,训练速度快,适合处理线性问题;决策树容易过拟合,需要进行剪枝

损失函数:SVM hinge loss; LR L2正则化; adaboost 指数损失
数据敏感度:SVM添加容忍度对outlier不敏感,只关心支持向量,且需要先做归一化; LR对远点敏感

数据量:数据量大就用LR,数据量小且特征少就用SVM非线性核

什么是参数模型(LR)与非参数模型(SVM)?


在统计学中,参数模型通常假设总体(随机变量)服从某一个分布,该分布由一些参数确定(比如正太分布由均值和方差确定),在此基础上构建的模型称为参数模型;非参数模型对于总体的分布不做任何假设,只是知道总体是一个随机变量,其分布是存在的(分布中也可能存在参数),但是无法知道其分布的形式,更不知道分布的相关参数,只有在给定一些样本的条件下,能够依据非参数统计的方法进行推断。

原文链接:https://www.jianshu.com/p/dce9f1af7bc9

查阅更为简洁方便的分类文章以及最新的课程、产品信息,请移步至全新呈现的“LeadAI学院官网”:

www.leadai.org

请关注人工智能LeadAI公众号,查看更多专业文章

大家都在看

LSTM模型在问答系统中的应用

基于TensorFlow的神经网络解决用户流失概览问题

最全常见算法工程师面试题目整理(一)

最全常见算法工程师面试题目整理(二)

TensorFlow从1到2 | 第三章 深度学习革命的开端:卷积神经网络

装饰器 | Python高级编程

今天不如来复习下Python基础

逻辑回归(LR)个人学习总结篇相关推荐

  1. 推荐系统(4)-逻辑回归LR、POLY2、FM、FFM

    逻辑回归LR.POLY2.FM.FFM 1.逻辑回归LR 2.辛普森悖论 3.POLY2 4.FM-2010 5.FFM 6.GBDT+LR-2014 7.LS-PLM-2017 <深度学习/推 ...

  2. python机器学习案例系列教程——逻辑分类/逻辑回归LR/一般线性回归(softmax回归)

    全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 线性函数.线性回归 参考:http://blog.csdn.net/luanpeng825485697/article/details ...

  3. 逻辑回归LR vs 支持向量机SVM

    目录 LR vs SVM LR和SVM的相同点 LR和SVM的不同点 逻辑回归LR LR损失函数 LR公式推导 支持向量机SVM 间隔和支持向量 对偶问题 核函数 软间隔和正则化 LR vs SVM ...

  4. 【机器学习算法笔记系列】逻辑回归(LR)算法详解和实战

    逻辑回归(LR)算法概述 逻辑回归(Logistic Regression)是用于处理因变量为分类变量的回归问题,常见的是二分类或二项分布问题,也可以处理多分类问题,它实际上是属于一种分类方法. 逻辑 ...

  5. 【神经网络本质是多项式回归】Jeff Dean等论文发现逻辑回归和深度学习一样好

    起因是以色列理工学院工业工程与管理学院的助理教授 Uri Shalit 在 Twitter 上发文,指出这篇论文的补充材料里,有一处结果非常值得注意:标准化逻辑回归实质上与深度神经网络一样好. Uri ...

  6. 对数线性模型之一(逻辑回归), 广义线性模型学习总结

    经典线性模型自变量的线性预测就是因变量的估计值. 广义线性模型:自变量的线性预测的函数是因变量的估计值.常见的广义线性模型有:probit模型.poisson模型.对数线性模型等等.对数线性模型里有: ...

  7. 机器学习实战(四)逻辑回归LR(Logistic Regression)

    目录 0. 前言 1. Sigmoid 函数 2. 梯度上升与梯度下降 3. 梯度下降法(Gradient descent) 4. 梯度上升法(Gradient ascent) 5. 梯度下降/上升法 ...

  8. 机器学习算法——逻辑回归(LR)

    LR是很多分类算法的基础组件,它的好处是输出值自然地落在0到1之间,并且有概率意义.模型清晰,背后的概率学经得住推敲.它拟合出来的参数就代表了每一个特征(feature)对结果的影响. Logisti ...

  9. sklearn之逻辑回归LR

    对于线性回归,由于都是求线性参数:逻辑回归,由于其呈S型,具有在坐标轴两个左右边进行急剧上升下降的趋近1或者0,因此具有分类特性. 决策树是天生的过拟合,而线性回归是天生的欠拟合: L1范式可以完成 ...

  10. Python | 逻辑回归(数据学习时长与是否通过考试)

    逻辑回归 逻辑回归里虽然带回归2字,其实其本质是分类,相当于打个标签,0或1,包括得出0或1的概率 线性回归返回的是一个数值,而不是标签,对于标签的预测,逻辑回归更合适 其中X=z=a+bx impo ...

最新文章

  1. 燕赵志愿云如何认证_如何获得云安全专家CCSP认证
  2. 交换机网络嗅探方法之欺骗交换机缓存
  3. 序列化 - 实现ISerializable
  4. [NOIP2017 TG D2T2]宝藏
  5. 如何连接oracle xe_为什么应始终将连接池与Oracle XE一起使用
  6. Shell脚本学习指南(一)——入门
  7. 《电子元器件的可靠性》——3.3节可靠性筛选试验
  8. Spring Cloud 常用注解
  9. Android识别图片中的WIFI二维码,并自动连接
  10. OpenCV MPR.DLL WNetRestoreConnectionA相关问题
  11. SAP中会计科目删除相关知识点
  12. NLP常见语言模型总结
  13. flex:1代表什么意思
  14. html中版权怎么写,html版权符号代码怎么打?通过什么方式输入?
  15. jupyter notebook无法连接python3服务器内核 一直显示正在连接服务器
  16. ClinkHouse基本使用说明
  17. python中format函数用法简书_从Python安装到语法基础,这才是初学者都能懂的爬虫教程...
  18. JS如何在高德地图多边形覆盖物填充平行折线的算法
  19. 极品特效HTML5动画推荐,不看的程序员后悔一辈子
  20. java基础小记_Java基础学习小记--多态

热门文章

  1. xss 全编码两次_URL编码与XSS
  2. 查看硬件配置的Linux命令,LINUX 查看硬件配置命令的教程
  3. mysql安装(glibc版本安装5.7.22)
  4. linux进程创建过程,Linux 进程创建过程的分析
  5. android 截屏_图文小编福利:Apowersoft专业截屏王
  6. 怎么看mysql的最大连接数_怎么查看和修改 MySQL 的最大连接数?
  7. 沃尔什哈达玛变换Matlab,哈达玛变换矩阵-数字图像处理.ppt
  8. [leetcode]468. Validate IP Address验证有效IP地址
  9. BGP 路由属性 公认可选 LOCAL_PREF
  10. slf4j与logback的结合使用