逻辑回归面试题汇总(整理)

这篇文章主要是我整理的逻辑回归模型在面试中涉及到的问题。

文章目录

  • 逻辑回归模型介绍
    • 逻辑回归的基本假设
    • 逻辑回归的损失函数
      • 逻辑回归的损失函数为什么要使用极大似然函数作为损失函数?
    • 逻辑回归的求解方法
      • 梯度下降
      • 其他方法
    • 逻辑回归的目的
    • 逻辑回归的优缺点
  • 特征问题
    • 特征相关性问题
    • 特征离散化
    • 特征交叉
  • 逻辑回归是线性模型吗?
  • 逻辑回归输出值的意义
  • 欠拟合和过拟合
  • 多分类问题
  • 模型之间的对比
    • 线性回归
    • 最大熵
    • SVM
    • 贝叶斯

逻辑回归模型介绍

原文
如何凸显你是一个对逻辑回归已经非常了解的人呢。那就是用一句话概括它!逻辑回归假设数据服从伯努利分布,通过极大化似然函数的方法,运用梯度下降来求解参数,来达到将数据二分类的目的。

这里面其实包含了5个点
1:逻辑回归的假设,
2:逻辑回归的损失函数,
3:逻辑回归的求解方法,
4:逻辑回归的目的,
5:逻辑回归如何分类。

这些问题是考核你对逻辑回归的基本了解。

逻辑回归的基本假设

任何的模型都是有自己的假设,在这个假设下模型才是适用的。逻辑回归的第一个基本假设是假设数据服从伯努利分布。伯努利分布有一个简单的例子是抛硬币,抛中为正面的概率是p,抛中为负面的概率是1−p.

  • 在逻辑回归这个模型里面是假设 hθ(x) 为样本为正的概率,1−hθ(x)为样本为负的概率。那么整个模型可以描述为在这里插入图片描述
  • 逻辑回归的第二个假设是假设样本为正的概率是
    在这里插入图片描述
  • 所以逻辑回归的最终形式 :
    在这里插入图片描述

逻辑回归的损失函数

逻辑回归的损失函数是它的极大似然函数
在这里插入图片描述

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

损失函数一般有四种,平方损失函数,对数损失函数,HingeLoss0-1损失函数,绝对值损失函数。将极大似然函数取对数以后等同于对数损失函数。在逻辑回归这个模型下,对数损失函数的训练求解参数的速度是比较快的。至于原因大家可以求出这个式子的梯度更新
θj=θj−(yi−hθ(xi;θ))∗xij
这个式子的更新速度只和xij,yi相关。和sigmod函数本身的梯度是无关的。这样更新的速度是可以自始至终都比较的稳定。
为什么不选平方损失函数的呢?其一是因为如果你使用平方损失函数,你会发现梯度更新的速度和sigmod函数本身的梯度是很相关的。sigmod函数在它在定义域内的梯度都不大于0.25。这样训练会非常的慢。

逻辑回归的求解方法

梯度下降

逻辑回归面试题汇总(整理)_第1张图片逻辑回归面试题汇总(整理)_第2张图片
当样本量极大的时候,每次更新权重需要耗费大量的算力,这时可以采取随机梯度下降法,这时,每次迭代的时候需要将样本重新打乱,然后用下面的式子更新权重在这里插入图片描述
由于该极大似然函数无法直接求解,我们一般通过对该函数进行梯度下降来不断逼急最优解。在这个地方其实会有个加分的项,考察你对其他优化方法的了解。因为就梯度下降本身来看的话就有随机梯度下降,批梯度下降,small batch 梯度下降三种方式,面试官可能会问这三种方式的优劣以及如何选择最合适的梯度下降方式。

  • 批梯度下降会获得全局最优解,缺点是在更新每个参数的时候需要遍历所有的数据,计算量会很大,并且会有很多的冗余计算,导致的结果是当数据量大的时候,每个参数的更新都会很慢。
  • 随机梯度下降是以高方差频繁更新,优点是使得sgd会跳到新的和潜在更好的局部最优解,缺点是使得收敛到局部最优解的过程更加的复杂。
  • 小批量梯度下降结合了sgd和batch gd的优点,每次更新的时候使用n个样本。减少了参数更新的次数,可以达到更加稳定收敛结果,一般在深度学习当中我们采用这种方法。
  • 其实这里还有一个隐藏的更加深的加分项,看你了不了解诸如Adam,动量法等优化方法。因为上述方法其实还有两个致命的问题。
    1. 第一个是如何对模型选择合适的学习率。自始至终保持同样的学习率其实不太合适。因为一开始参数刚刚开始学习的时候,此时的参数和最优解隔的比较远,需要保持一个较大的学习率尽快逼近最优解。但是学习到后面的时候,参数和最优解已经隔的比较近了,你还保持最初的学习率,容易越过最优点,在最优点附近来回振荡,通俗一点说,就很容易学过头了,跑偏了。
    2. 第二个是如何对参数选择合适的学习率。在实践中,对每个参数都保持的同样的学习率也是很不合理的。有些参数更新频繁,那么学习率可以适当小一点。有些参数更新缓慢,那么学习率就应该大一点。这里我们不展开,有空我会专门出一个专题介绍。

其他方法

https://chenrudan.github.io/blog/2016/01/09/logisticregression.html#4.2
逻辑回归面试题汇总(整理)_第3张图片
逻辑回归面试题汇总(整理)_第4张图片

逻辑回归的目的

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

逻辑回归的优缺点

面试的时候,别人也经常会问到,你在使用逻辑回归的时候有哪些感受。觉得它有哪些优缺点。在这里我们总结了逻辑回归应用到工业界当中一些优点

  • 形式简单,模型的可解释性非常好。从特征的权重可以看到不同的特征对最后结果的影响,某个特征的权重值比较高,那么这个特征最后对结果的影响会比较大。
  • 模型效果不错。在工程上是可以接受的(作为baseline),如果特征工程做的好,效果不会太差,并且特征工程可以大家并行开发,大大加快开发的速度。
  • 训练速度较快。分类的时候,计算量仅仅只和特征的数目相关。并且逻辑回归的分布式优化sgd发展比较成熟,训练的速度可以通过堆机器进一步提高,这样我们可以在短时间内迭代好几个版本的模型。
  • 资源占用小,尤其是内存。因为只需要存储各个维度的特征值,。
  • 方便输出结果调整。逻辑回归可以很方便的得到最后的分类结果,因为输出的是每个样本的概率分数,我们可以很容易的对这些概率分数进行cutoff,也就是划分阈值(大于某个阈值的是一类,小于某个阈值的是一类)。

但是逻辑回归本身也有许多的缺点:

  • 准确率并不是很高。因为形式非常的简单(非常类似线性模型),很难去拟合数据的真实分布。
  • 很难处理数据不平衡的问题。举个例子:如果我们对于一个正负样本非常不平衡的问题比如正负样本比 10000:1.我们把所有样本都预测为正也能使损失函数的值比较小。但是作为一个分类器,它对正负样本的区分能力不会很好。
  • 处理非线性数据较麻烦。逻辑回归在不引入其他方法的情况下,只能处理线性可分的数据,或者进一步说,处理二分类的问题 。
  • 逻辑回归本身无法筛选特征。有时候,我们会用gbdt来筛选特征,然后再上逻辑回归。

特征问题

特征相关性问题

逻辑回归在训练的过程当中,如果有很多的特征高度相关或者说有一个特征重复了100遍,会造成怎样的影响?
先说结论,如果在损失函数最终收敛的情况下,其实就算有很多特征高度相关也不会影响分类器的效果。
但是对特征本身来说的话,假设只有一个特征,在不考虑采样的情况下,你现在将它重复100遍。训练以后完以后,数据还是这么多,但是这个特征本身重复了100遍,实质上将原来的特征分成了100份,每一个特征都是原来特征权重值的百分之一。
如果在随机采样的情况下,其实训练收敛完以后,还是可以认为这100个特征和原来那一个特征扮演的效果一样,只是可能中间很多特征的值正负相消了。
为什么我们还是会在训练的过程当中将高度相关的特征去掉?

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

特征离散化

逻辑斯特回归为什么要对特征进行离散化?
https://blog.csdn.net/yang090510118/article/details/39478033
在工业界,很少直接将连续值作为特征喂给逻辑回归模型,而是将连续特征离散化为一系列0、1特征交给逻辑回归模型,这样做的优势有以下几点:

  1. 稀疏向量内积乘法运算速度快,计算结果方便存储,容易scalable(扩展)。
  2. 离散化后的特征对异常数据有很强的鲁棒性:比如一个特征是年龄>30是1,否则0。如果特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰。
  3. 逻辑回归属于广义线性模型,表达能力受限;单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合。
  4. 离散化后可以进行特征交叉,由M+N个变量变为M*N个变量,进一步引入非线性,提升表达能力。
  5. 特征离散化后,模型会更稳定,比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问。
    李沐少帅指出,模型是使用离散特征还是连续特征,其实是一个“海量离散特征+简单模型” 同 “少量连续特征+复杂模型”的权衡。既可以离散化用线性模型,也可以用连续特征加深度学习。就看是喜欢折腾特征还是折腾模型了。通常来说,前者容易,而且可以n个人一起并行做,有成功经验;后者目前看很赞,能走多远还须拭目以待。
    大概的理解:
    1)计算简单
    2)简化模型
    3)增强模型的泛化能力,不易受噪声的影响

特征交叉

在逻辑回归模型中,为什么常常要做特征组合(特征交叉)?
逻辑回归模型属于线性模型,线性模型不能很好处理非线性特征,特征组合可以引入非线性特征,提升模型的表达能力。另外,基本特征可以认为是全局建模,组合特征更加精细,是个性化建模,但对全局建模会对部分样本有偏,对每一个样本建模又会导致数据爆炸,过拟合,所以基本特征+特征组合兼顾了全局和个性化。

逻辑回归是线性模型吗?

  • 逻辑回归是一种广义线性模型,它引入了Sigmod函数,是非线性模型,但本质上还是一个线性回归模型,因为除去Sigmod函数映射关系,其他的算法原理,步骤都是线性回归的。
  • 逻辑回归和线性回归首先都是广义的线性回归,在本质上没多大区别,区别在于逻辑回归多了个Sigmod函数,使样本映射到[0,1]之间的数值,从而来处理分类问题。另外逻辑回归是假设变量服从伯努利分布,线性回归假设变量服从高斯分布。逻辑回归输出的是离散型变量,用于分类,线性回归输出的是连续性的,用于预测。逻辑回归是用最大似然法去计算预测函数中的最优参数值,而线性回归是用最小二乘法去对自变量因变量关系进行拟合。

逻辑回归输出值的意义

逻辑回归输出的值是0到1之间的值,这个值是真实的概率吗?
https://blog.csdn.net/tunghao/article/details/86480040
逻辑回归面试题汇总(整理)_第5张图片

结论:逻辑回归模型之所以是sigmoid 的形式,源于我们假设y服从伯努利分布,伯努利分布又属于指数分布族,经过推导,将伯努利分布变成指数分布族的形式后。我们发现伯努利分布的唯一参数Φ与指数分布族中的参数η具有sigmoid函数关系,于是我们转而求η与x的关系,此时,我们又假设η与x具有线性关系。
至此,找到了我们要用的模型的样子,也就是逻辑回归。
逻辑回归输出的到底是不是概率呢?答案是如果你的情况满足本文所说的两个假设,那么你训练模型的过程,就确实是在对概率进行建模。
这两个假设并不是那么容易满足的。所以,很多情况下,我们得出的逻辑回归输出值,无法当作真实的概率,只能作为置信度来使用。

欠拟合和过拟合

  • 欠拟合
    • 从数据层面上考虑
      可以增加新特征,例如,组合、泛化、相关性、高次特征,来增大假设空间等;
    • 从模型层面上考虑
      增加模型的复杂度,例如SVM的核函数,决策树不进行剪枝、DNN等更复杂的模型,去掉正则化项或者减小正则化参数,加深训练轮数等。
  • 过拟合
    • 增加样本量,减少模型复杂度
      减少特征数量,在实际使用中会用很多方法进行特征筛选,例如基于IV值的大小,变量的稳定性,变量之间的相关性等。
      正则化是减少模型复杂度的常用方法,常用的有L1正则化和L2正则化。
      https://chenrudan.github.io/blog/2016/01/09/logisticregression.html
      逻辑回归面试题汇总(整理)_第6张图片

多分类问题

https://blog.csdn.net/u011734144/article/details/79717470

  • one vs rest
    由于概率函数 hΘ(X) 所表示的是样本标记为某一类型的概率,但可以将一对一(二分类)扩展为一对多(one vs rest):

    1. 将类型class1看作正样本,其他类型全部看作负样本,然后我们就可以得到样本标记类型为该类型的概率p1;
    2. 然后再将另外类型class2看作正样本,其他类型全部看作负样本,同理得到p2;
    3. 以此循环,我们可以得到该待预测样本的标记类型分别为类型class i时的概率pi,最后我们取pi中最大的那个概率对应的样本标记类型作为我们的待预测样本类型。
  • softmax
    逻辑回归面试题汇总(整理)_第7张图片

模型之间的对比

线性回归

首先逻辑回归和线性回归首先都是广义的线性回归,其次经典线性模型的优化目标函数是最小二乘,而逻辑回归则是似然函数,另外线性回归在整个实数域范围内进行预测,敏感度一致,而分类范围,需要在[0,1]。逻辑回归就是一种减小预测范围,将预测值限定为[0,1]间的一种回归模型,因而对于这类问题来说,逻辑回归的鲁棒性比线性回归的要好。

逻辑回归的模型本质上是一个线性回归模型,逻辑回归都是以线性回归为理论支持的。但线性回归模型无法做到sigmoid的非线性形式,sigmoid可以轻松处理0/1分类问题。

这主要是由于线性回归在整个实数域内敏感度一致,而分类范围,需要在[0,1]之内。而逻辑回归就是一种减小预测范围,将预测值限定为[0,1]间的一种回归模型,其回归方程与回归曲线如下图所示。逻辑曲线在z=0时,十分敏感,在z>>0或z<<0处,都不敏感,将预测值限定为(0,1)。

LR在线性回归的实数范围输出值上施加sigmoid函数将值收敛到0~1范围, 其目标函数也因此从差平方和函数变为对数损失函数, 以提供最优化所需导数(sigmoid函数是softmax函数的二元特例, 其导数均为函数值的f*(1-f)形式)。请注意, LR往往是解决二元0/1分类问题的, 只是它和线性回归耦合太紧, 不自觉也冠了个回归的名字(马甲无处不在). 若要求多元分类,就要把sigmoid换成大名鼎鼎的softmax了。

最大熵

https://www.jianshu.com/p/504b8d09c23e
最大熵原理是概率模型学习的一个准则,最大熵认为,学习概率模型时,在所有可能的分布中,熵最大的模型是最好的模型。
直观地来讲,最大熵原理认为要选择的概率模型首先必须要满足既有事实,即约束条件。在没有更多信息的情况下,那些不确定的部分都是等可能的,最大熵原理通过熵的最大化来表示等可能性。
逻辑回归面试题汇总(整理)_第8张图片
逻辑回归面试题汇总(整理)_第9张图片
逻辑回归面试题汇总(整理)_第10张图片
因此,可以这样说,最大熵在解决二分类问题时就是逻辑回归,在解决多分类问题时就是多项逻辑回归。此外,最大熵与逻辑回归都称为对数线性模型(log linear model)。

SVM

https://blog.csdn.net/jieming2002/article/details/79317496

  • 相同点:
    1. 都是分类算法
    2. 都是监督学习算法
    3. 都是判别模型
    4. 都能通过核函数方法针对非线性情况分类
    5. 目标都是找一个分类超平面
    6. 都能减少离群点的影响
  • 不同点:
    1. 损失函数不同,逻辑回归是cross entropy loss,svm是hinge loss
    2. 逻辑回归在优化参数时所有样本点都参与了贡献,svm则只取离分离超平面最近的支持向量样本。这也是为什么逻辑回归不用核函数,它需要计算的样本太多。并且由于逻辑回归受所有样本的影响,当样本不均衡时需要平衡一下每一类的样本个数。
    3. 逻辑回归对概率建模,svm对分类超平面建模
    4. 逻辑回归是处理经验风险最小化,svm是结构风险最小化。这点体现在svm自带L2正则化项,逻辑回归并没有
      在这里插入图片描述
    5. 逻辑回归通过非线性变换减弱分离平面较远的点的影响,svm则只取支持向量从而消去较远点的影响
    6. 逻辑回归是统计方法,svm是几何方法

贝叶斯

这两个算法有一些相似之处,并且在对比判别模型和生成模型,它们作为典型的分类算法经常被提及,因此这里也做一个小小的总结。
相同点是,它们都能解决分类问题和都是监督学习算法。此外,有意思的是,当假设朴素贝叶斯的条件概率P(X|Y=ck)服从高斯分布时Gaussian Naive Bayes,它计算出来的P(Y=1|X)形式跟逻辑回归是一样的[18]。
不同的地方在于,逻辑回归为判别模型求的是p(y|x),朴素贝叶斯为生成模型求的是p(x,y)。前者需要迭代优化,后者不需要。在数据量少的情况下后者比前者好,数据量足够的情况下前者比后者好。由于朴素贝叶斯假设了条件概率P(X|Y=ck)是条件独立的,也就是每个特征权重是独立的,如果数据不符合这个情况,朴素贝叶斯的分类表现就没有逻辑回归好。

你可能感兴趣的:(ML)