逻辑回归面试总结

1、概括

虽然逻辑回归能够用于分类,不过其本质还是线性回归。它仅在线性回归的基础上,在特征到结果的映射中加入了一层sigmoid函数(非线性)映射,即先把特征线性求和,然后使用sigmoid函数来预测。

逻辑回归假设数据服从伯努利分布,通过极大化似然函数的方法,运用梯度下降来求解参数,来达到将数据二分类的目的。

逻辑回归:线性回归可以预测连续值,但是不能解决分类问题,我们需要根据预测的结果判定其属于正类还是负类。所以逻辑回归就是将线性回归的(−∞,+∞)结果,通过sigmoid函数映射到(0,1)之间。

 

2、Regression问题的常规步骤为:

1、寻找h函数(即hypothesis);

2、构造J函数(损失函数);

3、想办法使得J函数最小并求得回归参数(θ)

 

3、逻辑回归的基本假设

任何的模型都是有自己的假设,在这个假设下模型才是适用的。逻辑回归的第一个基本假设是假设数据服从伯努利分布。伯努利分布有一个简单的例子是抛硬币,抛中为正面的概率是p,抛中为负面的概率是1−p.在逻辑回归这个模型里面是假设 hθ(x) 为样本为正的概率,1−hθ(x)为样本为负的概率。那么整个模型可以描述为:hθ(x;θ)=p

逻辑回归的第二个假设是假设样本为正的概率是 

 所以逻辑回归的最终形式 

逻辑回归损失函数:对数损失函数,线性回归的损失函数为平方损失函数,如果将其用于逻辑回归的损失函数,则其数学特性不好,有很多局部极小值,难以用梯度下降法求最优。

取似然函数为:

 

4、逻辑回归的求解方法

1、梯度下降法求的最小值

      θ更新过程:

θ更新过程可以写成:

 

A、由于该极大似然函数无法直接求解,我们一般通过对该函数进行梯度下降来不断逼急最优解。在这个地方其实会有个加分的项,考察你对其他优化方法的了解。因为就梯度下降本身来看的话就有随机梯度下降,批梯度下降,small batch 梯度下降三种方式,面试官可能会问这三种方式的优劣以及如何选择最合适的梯度下降方式。

1、简单来说 批梯度下降会获得全局最优解,缺点是在更新每个参数的时候需要遍历所有的数据,计算量会很大,并且会有很多的冗余计算,导致的结果是当数据量大的时候,每个参数的更新都会很慢。

2、随机梯度下降是以高方差频繁更新,优点是使得sgd会跳到新的和潜在更好的局部最优解,缺点是使得收敛到局部最优解的过程更加的复杂。

3、小批量梯度下降结合了sgd和batch gd的优点,每次更新的时候使用n个样本。减少了参数更新的次数,可以达到更加稳定收敛结果,一般在深度学习当中我们采用这种方法。

B、其实这里还有一个隐藏的更加深的加分项,看你了不了解诸如Adam,动量法等优化方法。因为上述方法其实还有两个致命的问题。

1、第一个是如何对模型选择合适的学习率。自始至终保持同样的学习率其实不太合适。因为一开始参数刚刚开始学习的时候,此时的参数和最优解隔的比较远,需要保持一个较大的学习率尽快逼近最优解。但是学习到后面的时候,参数和最优解已经隔的比较近了,你还保持最初的学习率,容易越过最优点,在最优点附近来回振荡,通俗一点说,就很容易学过头了,跑偏了。

2、第二个是如何对参数选择合适的学习率。在实践中,对每个参数都保持的同样的学习率也是很不合理的。有些参数更新频繁,那么学习率可以适当小一点。有些参数更新缓慢,那么学习率就应该大一点。

2、向量化Vectorization

约定训练数据的矩阵形式如下,x的每一行为一条训练样本,而每一列为不同的特称取值:

θ更新过程可以改为:

 

5、过拟合问题

对于线性回归或逻辑回归的损失函数构成的模型,可能会有些权重很大,有些权重很小,导致过拟合(就是过分拟合了训练数据),使得模型的复杂度提高,泛化能力较差(对未知数据的预测能力)

问题的主因:过拟合问题往往源自过多的特征。

解决方法

1、减少特征数量(减少特征会失去一些信息,即使特征选的很好)

  • 可用人工选择要保留的特征;
  • 模型选择算法;

2、正则化(特征较多时比较有效)

  • 保留所有特征,但减少θ的大小

正则化方法

正则化是结构风险最小化策略的实现,是在经验风险上加一个正则化项或惩罚项。正则化项一般是模型复杂度的单调递增函数,模型越复杂,正则化项就越大。

正则项可以取不同的形式,在回归问题中取平方损失,就是参数的L2范数,也可以取L1范数。取平方损失时,模型的损失函数变为:

lambda是正则项系数:

1、如果它的值很大,说明对模型的复杂度惩罚大,对拟合数据的损失惩罚小,这样它就不会过分拟合数据,在训练数据上的偏差较大,在未知数据上的方差较小,但是可能出现欠拟合的现象;

2、如果它的值很小,说明比较注重对训练数据的拟合,在训练数据上的偏差会小,但是可能会导致过拟合。

正则化后的梯度下降算法θ的更新变为:

 

6、逻辑回归如何分类

逻辑回归作为一个回归(也就是y值是连续的),如何应用到分类上去呢。y值确实是一个连续的变量。逻辑回归的做法是划定一个阈值,y值大于这个阈值的是一类,y值小于这个阈值的是另外一类。阈值具体如何调整根据实际情况选择。一般会选择0.5做为阈值来划分。

 

7、逻辑回归的损失函数为什么要使用极大似然函数作为损失函数?

损失函数一般有四种,平方损失函数,对数损失函数,HingeLoss0-1损失函数,绝对值损失函数。将极大似然函数取对数以后等同于对数损失函数。在逻辑回归这个模型下,对数损失函数 的训练求解参数的速度是比较快的。至于原因大家可以求出这个式子的梯度更新

为什么不选平方损失函数的呢?其一是因为如果你使用平方损失函数,你会发现梯度更新的速度和sigmod函数本身的梯度是很相关的。sigmod函数在它在定义域内的梯度都不大于0.25。这样训练会非常的慢。

 

8、逻辑回归在训练的过程当中,如果有很多的特征高度相关或者说有一个特征重复了100遍,会造成怎样的影响?

1、先说结论,如果在损失函数最终收敛的情况下,其实就算有很多特征高度相关也不会影响分类器的效果。

2、但是对特征本身来说的话,假设只有一个特征,在不考虑采样的情况下,你现在将它重复100遍。训练以后完以后,数据还是这么多,但是这个特征本身重复了100遍,实质上将原来的特征分成了100份,每一个特征都是原来特征权重值的百分之一。

3、如果在随机采样的情况下,其实训练收敛完以后,还是可以认为这100个特征和原来那一个特征扮演的效果一样,只是可能中间很多特征的值正负相消了。

 

9、为什么我们还是会在训练的过程当中将高度相关的特征去掉?

1、去掉高度相关的特征会让模型的可解释性更好

2、可以大大提高训练的速度。如果模型当中有很多特征高度相关的话,就算损失函数本身收敛了,但实际上参数是没有收敛的,这样会拉低训练的速度。其次是特征多了,本身就会增大训练的时间。

 

 10、逻辑回归为什么要对特征进行离散化

在工业界,很少直接将连续值做啥逻辑回归模型的特征输入,而是将连续特征离散化为一系列0、1特征交给逻辑回归模型,优势如下:

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

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

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

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

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

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

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

 

11、逻辑回归和线性回归的比较

虽然逻辑回归能够用于分类,但是其本质是线性回归。

1、Logistic 回归是在线性回归的实数范围输出的基础上,在特征到结果的映射中加入了一层sigmoid函数(非线性)映射,将值收敛到了0~1范围内(即先把特征进行线性求和,之后使用sigmoid函数来预测结果),其损失函数也从最小二乘函数变为了对数损失函数,以提供最优化所需要的导数(sigmoid函数是softmax函数的二元特例,其导数均为函数值的f*(1-f)形式)。

2、线性回归优化目标函数是最小二乘,逻辑回归的优化目标函数是似然函数。

3、线性回归是在整数域范围内进行预测,敏感度一致,而逻辑回归的分类范围是将输入线性到[0,1]之间了,逻辑回归就是一种减小预测范围,将预测值限定为[0,1]间的一种回归模型。逻辑回归鲁棒性更好,可以轻松处理0/1分类问题。

4、LR往往解决二元0/1分类的问题的,只是它和线性回归耦合的太紧,冠上了回归的名字,若要求多元分类,将sigmoid换为softmax即可。

 

12、逻辑回归的优点总结

1、形式简单,模型的可解释性非常好。从特征的权重可以看到不同的特征对最后结果的影响,某个特征的权重值比较高,那么这个特征最后对结果的影响会比较大。

2、模型效果不错。在工程上是可以接受的(作为baseline),如果特征工程做的好,效果不会太差,并且特征工程可以大家并行开发,大大加快开发的速度。

3、训练速度较快。分类的时候,计算量仅仅只和特征的数目相关。并且逻辑回归的分布式优化sgd发展比较成熟,训练的速度可以通过堆机器进一步提高,这样我们可以在短时间内迭代好几个版本的模型。

4、资源占用小,尤其是内存。因为只需要存储各个维度的特征值,。

5、方便输出结果调整。逻辑回归可以很方便的得到最后的分类结果,因为输出的是每个样本的概率分数,我们可以很容易的对这些概率分数进行cutoff,也就是划分阈值(大于某个阈值的是一类,小于某个阈值的是一类)。

 

13、逻辑回归的缺点总结

1、准确率并不是很高。因为形式非常的简单(非常类似线性模型),很难去拟合数据的真实分布。

2、很难处理数据不平衡的问题。举个例子:如果我们对于一个正负样本非常不平衡的问题比如正负样本比 10000:1.我们把所有样本都预测为正也能使损失函数的值比较小。但是作为一个分类器,它对正负样本的区分能力不会很好。

3、处理非线性数据较麻烦。逻辑回归在不引入其他方法的情况下,只能处理线性可分的数据,或者进一步说,处理二分类的问题 。

4、逻辑回归本身无法筛选特征。有时候,我们会用gbdt来筛选特征,然后再上逻辑回归。

 

  • 0
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值