查看原文
其他

《直击面试官》—没人比我更懂逻辑回归,附 9 大面试高频问题

浪哥 小一的学习笔记 2023-01-01

~浪里个浪~

大家好,我还是浪哥

今天分享的内容比较硬核,而且还相当硬核

为什么?

逻辑回归想必人人都有所耳闻,但是你真的认识它?你真的知道?

公式推导什么的暂且不谈,因为那个确实有点绕,难的是逻辑回归相关的概念有很多,当然,面试官也最喜欢问

所以,今天的文章分为两部分:

  • 5 个核心知识点
  • 9 大面试高频问题

核心知识点需要看点公式,不感兴趣的直接看高频问题也行

老规矩,阅读今天的文章之前 你需要先对逻辑回归有一个基本的认知,你可以大致过一遍西瓜书或者速读小一前面的文章:

以下是正文...



逻辑回归定义

逻辑回归的定义特别简单,就一句话:

假设数据服从伯努利分布(01 分布),通过似然函数的方法利用梯度下降法求解参数θ,以达到将数据二分类的目的


5 大核心要点

1. 逻辑回归的假设

假设数据服从伯努利分布,也是说事件发生的概率为p,则不发生的概率为1-p

换句话说,当模型y的值等于标签为1的概率是p,用sigmoid 函数表示为:,则不发生的概率为

将单个样本看作一个事件,那么这个事件发生的概率用公示表示:

以上公示等价于:

解释一下:当 y=1,结果是 p;当 y=0,结果是 1-p


如果我们的样本数据有N个,单个样本 ,它的标签是 的概率是:

带入到 sigmoid 函数,则事件发生的概率就是


2. 逻辑回归的损失函数

需要先解释一下什么是似然函数?

最大似然原理:已知模型预测结果,求产生这种结果的模型参数

再形象一点:已知模型当前的结果(即概率已知为1),使得真实预测结果尽可能的偏向于模型结果,即概率最大,叫做最大似然

因为多个样本发生的总概率为每个样本发生概率的乘积,所以这组样本发生的概率:

当目标函数取最大值时,整体概率最大,P总 也最大,此时两边都取log函数,连乘变连加,方便计算


因为 log 函数在 0-1 之间的会随着 x 增大 y 值增大,但是由于损失函数表示的是模型预测结果和真实结果之间的差异,这个差异当然是越小越好,所以当 -log 时,随着 x 的增大 y 值越小。

即:

化简得:

注意此处的等式左边越小,对应的右边的概率结果越大

继续化简得:


左边加负号的另一种说法:

这个函数 又叫做它的损失函数。损失函数可以理解成衡量我们当前的模型的输出结果,跟实际的输出结果之间的差距的一种函数。

这里的损失函数的值等于事件发生的总概率,我们希望它越大越好。

但是跟损失的含义有点儿违背,因此也可以在前面取个负号。

个人觉得这个说法有点牵强,根据图形表示往左边加负号更有理有据。


3. 逻辑回归的求解方法

由于对损失函数直接求解参数 θ 无法求解,所以一般都通过梯度下降法不断逼近最优解,求解参数 θ。

梯度下降法:梯度为函数增长速度最快的方向,沿着负梯度方向更新参数 θ

梯度求解:

θ 的更新过程需要对损失函数取偏导,更新如下:

更进一步的化简得:

因为:,最后梯度化简为:

可以发现化简后梯度的计算时如此简单,这就是为什么选择sigmoid函数的原因之一。

此时对应的梯度下降的参数更新为:

展开对应的 p 则:

此处有一个关于梯度下降 很重要的面试问题,在后面会提到


4. 逻辑回归的目的

逻辑回归的目的是将数据二分类,提高准确率


5. 逻辑回归的分类

逻辑回归的 y 值是连续的,进行分类时:逻辑回归的做法是划定一个阈值,y 值大于这个阈值的是一类,y 值小于这个阈值的是另外一类。

阈值具体如何调整根据实际情况选择,一般会选择 0.5 做为阈值来划分。

9 大面试问题

1. 逻辑回归做分类的样本应该满足什么分布?

应该满足伯努利分布,逻辑回归的分类标签是基于样本特征通过伯努利分布产生的,分类器要做的就是估计这个分布。


2. 逻辑回归和线性回归的区别?

① 逻辑回归和线性回归首先都是广义的线性回归,在本质上没多大区别,区别在于逻辑回归多了个 sigmoid 函数,使样本映射到 [0,1] 之间的数值,从而来处理分类问题。

② 逻辑回归是假设变量服从伯努利分布,线性回归假设变量服从正态分布。

③ 逻辑回归输出的是离散型变量,用于分类;线性回归输出的是连续型的,用于预测。

④ 逻辑回归是用最大似然法去计算预测函数中的最优参数值,而线性回归是用最小二乘法去对自变量因变量关系进行拟合。


3. 逻辑回归的优缺点?

优点:

  • 实现简单,速度快,占用内存小,可在短时间内迭代多个版本的模型。
  • 模型的可解释性非常好,可以直接看到各个特征对模型结果的影响,可解释性在金融领域非常重要,所以在目前业界大部分使用的仍是逻辑回归模型。
  • 模型客群变化的敏感度不如其他高复杂度模型,因此稳健更好,鲁棒性更强。
  • 特征工程做得好,模型的效果不会太差,并且特征工程可以并行开发,大大加快开发的速度。
  • 模型的结果可以很方便的转化为策略规则,且线上部署简单。

缺点和局限性:

  • 容易欠拟合,相比集成模型,准确度不是很高。
  • 对数据的要求比较高,逻辑回归对缺失值,异常值,共线性都比较敏感,且不能直接处理非线性的特征。所以在数据清洗和特征工程上会花去很大部分的时间。
  • 在金融领域对场景的适应能力有局限性,例如数据不平衡问题,高维特征,大量多类特征,逻辑回归在这方面不如决策树适应能力强。
4. 逻辑回归解决过拟合的方法有哪些?

① 减少特征数量,在实际使用中会用很多方法进行特征筛选,例如基于 IV 值的大小,变量的稳定性,变量之间的相关性等。

② 正则化,常用的有 L1 正则化和 L2 正则化。

逻辑回归算法模型比较简单,常会导致模型欠拟合,过拟合一般较少出现。


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

损失函数一般有四种、平方损失函数、对数损失函数、0-1 损失函数,绝对值损失函数。

将极大似然函数取对数以后等同于对数损失函数。

在逻辑回归这个模型下,对数损失函数的训练求解参数的速度是比较快的:

这个式子的更新速度只和 相关,和 sigmod 函数本身的梯度是(即 sigmoid 求导)无关的。这样更新的速度是可以自始至终都比较的稳定。


你可能会问:为什么不选平方损失函数的呢?

因为如果你使用平方损失函数,你会发现梯度更新的速度和 sigmod 函数本身的梯度是很相关的。

sigmod 函数在它在定义域内的梯度都不大于 0.25,这样训练会非常的慢。


6. 梯度下降有哪些?优劣呢?

就梯度下降本身来看的话有 随机梯度下降,批梯度下降,small batch 梯度下降三种方式,这三种方式有各自的优劣:

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

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

小批量梯度下降可以看一个例子:

随机选取一个样本,用它代表整体样本,即把它的值乘以 N

小批量梯度下降结合了sgd 和 batch gd 的优点,每次更新的时候使用 n 个样本。减少了参数更新的次数,可以达到更加稳定收敛结果。


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

第一个是如何对模型选择合适的学习率。

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

第二个是如何对参数选择合适的学习率。

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


7. 逻辑回归为什么要对特征进行离散化?

工作中很少直接将连续型变量带入逻辑回归模型中,而是将特征进行离散化后再加入模型,例如评分卡的分箱和 woe 转化。

这样做的优势有以下几个:

① 特征离散化之后,起到了简化模型的作用,使模型变得更稳定,降低了模型过拟合的风险。

② 离散化之后的特征对异常数据不敏感

③ 特征离散化之后,每个离散变量都有单独的权重,相当于给模型引入了非线性,能够提高模型的表达能力。

④ 离散化后的特征可进行特征交叉,进一步引入非线性,提高模型的表达能力。


8. 逻辑回归的特征系数的绝对值可以认为是特征的重要性吗?

首先特征系数的绝对值越大,对分类效果的影响越显著,但不能表示系数更大的特征重要性更高。

因为改变变量的尺度就会改变系数的绝对值,而且如果特征是线性相关的,则系数可以从一个特征转移到另一个特征,特征间相关性越高,用系数解释变量的重要性就越不可靠。


9. 高度相关的特征带入逻辑回归到底有什么影响?为什么逻辑回归要将高度相关特征剔除?

在损失函数最终收敛的情况下,就算有很多相关度很高的特征,也不会影响模型的效果。

假设一个特征将它重复 100 次,生成 100 个高度相关的特征。那么模型训练完之后,这 100 个特征和原来那一个特征扮演的效果一样,每一个特征的权重都是原来特征的 1/100,只是可能中间很多特征的系数正负相互抵消了

比如做评分卡,如果引入了高度相关的特征,那么最后逻辑回归的系数符号可能就会不一致。

虽然高度相关特征对模型结果没什么大的影响,但还是要剔除相关性高的特征,原因:

① 可以减少特征数量,提高模型的训练速度,减少过拟合的风险。

② 去掉高相关特征可以让模型的可解释性更好。比如在做评分卡时,为了使最后每个特征的系数符号一致,必须做特征相关性筛选。

不用多说了吧,你应该算是知道自己到底懂不懂逻辑回归了



往期文章


直击面试官--->决策树最最最最最最常被问到的6个基础问题

2021-03-16


强烈建议收藏本文,如果能三连支持就更好了。

我是浪哥,划船不用桨,全凭本事浪~

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存