《直击面试官》—没人比我更懂逻辑回归,附 9 大面试高频问题
~浪里个浪~
大家好,我还是浪哥
今天分享的内容比较硬核,而且还相当硬核
为什么?
逻辑回归想必人人都有所耳闻,但是你真的认识它?你真的知道?
公式推导什么的暂且不谈,因为那个确实有点绕,难的是逻辑回归相关的概念有很多,当然,面试官也最喜欢问
所以,今天的文章分为两部分:
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,只是可能中间很多特征的系数正负相互抵消了
比如做评分卡,如果引入了高度相关的特征,那么最后逻辑回归的系数符号可能就会不一致。
虽然高度相关特征对模型结果没什么大的影响,但还是要剔除相关性高的特征,原因:
① 可以减少特征数量,提高模型的训练速度,减少过拟合的风险。
② 去掉高相关特征可以让模型的可解释性更好。比如在做评分卡时,为了使最后每个特征的系数符号一致,必须做特征相关性筛选。
不用多说了吧,你应该算是知道自己到底懂不懂逻辑回归了
往期文章
2021-03-16
强烈建议收藏本文,如果能三连支持就更好了。
我是浪哥,划船不用桨,全凭本事浪~