文章目录
前言
本文主要介绍了逻辑回归的基本概念和面试题,包含了面试中关于逻辑回归最常见的面试题目和解答思路。
一、逻辑回归总结
虽然名字是回归,但是实际上是用在分类问题上的,实现了将线性模型应用到分类,需要找到一个函数实现将原来的连续变量y映射到一个分类模型。
最简单的就是unit-step函数(单位阶跃函数):
y = { 0 , z < 0 0.5 , z = 0 1 , z > 0 y=\left\{\begin{array}{cc} 0, & z<0 \\ 0.5, & z=0 \\ 1, & z>0 \end{array}\right. y=⎩⎨⎧0,0.5,1,z<0z=0z>0
但是这是不连续的,不易于求导。此时就可以用到sigmoid函数:
sigmoid函数
y = 1 1 + e − z y=\frac{1}{1+e^{-z}} y=1+e−z1
sigmoid函数与线性函数结合
y = 1 1 + e − ( w T x + b ) y=\frac{1}{1+e^{-\left(\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}+b\right)}} y=1+e−(wTx+b)1
逻辑回归中,sigmoid函数的作用:
(1)线性函数的值域范围是实数范围,逻辑回归的预测范围是01,sigmoid函数将线性函数的范围限制在01之间;
(2)线性函数在实数域的敏感度是一致的,sigmoid函数在0附近更加敏感(从斜率可以看出),在远离0附近不敏感,好处是模型可以更加关注模型的边界,增加模型的鲁棒性。
逻辑回归(Logistic Regression,LR)模型的假设:
(1)假设数据服从伯努利分布
伯努利分布:是一个离散型概率分布,若成功,则随机变量取值1;若失败,随机变量取值为0。成功概率记为p,失败为q=1-p。
如下:
f X ( x ) = p x ( 1 − p ) 1 − x = { p if x = 1 q if x = 0 f_{X}(x)=p^{x}(1-p)^{1-x}=\left\{\begin{array}{ll} p & \text { if } x=1 \\ q & \text { if } x=0 \end{array}\right. fX(x)=px(1−p)1−x={pq if x=1 if x=0
一个样本为正类的概率 p = h θ ( x ; θ ) p=h_{\theta}(x ; \theta) p=hθ(x;θ),一个样本为负类的概率 q = 1 − h θ ( x ; θ ) q=1-h_{\theta}(x ; \theta) q=1−hθ(x;θ)。
实际使用中并不一定要求遵循严格的伯努利分布,一般只需要是二分类问题即可。
(2)正类的概率由sigmoid函数计算。
二、面试题
1.LR主要解决什么问题?目的是什么?
Logistic 回归的本质是:逻辑回归假设数据服从伯努利分布,通过极大化似然函数的方法,运用梯度下降来求解参数,来达到将数据二分类的目的。
应用:
- 各种分类场景
- CTR(点击率)预估
点击的样本当作正例,未点击的样本当作负例,求解样本为正例的概率,一般作为baseline。 - 推荐系统的learning to rank
2.LR推导
极大似然估计:利用已知的样本结果信息,反推最有可能(最大概率)导致这些样本结果出现的模型参数值(模型已定,参数未知)。
公式如下:
ℓ ( w , b ) = ∑ i = 1 m ln p ( y i ∣ x i ; w , b ) \ell(\boldsymbol{w}, b)=\sum_{i=1}^{m} \ln p\left(y_{i} \mid \boldsymbol{x}_{i} ; \boldsymbol{w}, b\right) ℓ(w,b)=i=1∑mlnp(yi∣xi;w,b)
为什么用极大似然函数作为损失函数:
(1)先尝试线性回归——平方损失函数
z = w T x + b ϕ ( z ) = 1 1 + e − z J ( w ) = ∑ i 1 2 ( ϕ ( z ( i ) ) − y ( i ) ) 2 \begin{array}{c} z=w^{T} x+b \\ \phi(z)=\frac{1}{1+e^{-z}} \\ J(w)=\sum_{i} \frac{1}{2}\left(\phi\left(z^{(i)}\right)-y^{(i)}\right)^{2} \end{array} z=wTx+bϕ(z)=1+e−z1J(w)=∑i21(ϕ(z(i))−y(i))2
存在的问题是:损失函数J(w)并不是一个严格的凸函数,存在局部最优值(原因1)。因此需要转换思路。
(2)类别的条件概率
p ( y = 1 ∣ x ; w ) = ϕ ( w T x + b ) = ϕ ( z ) p ( y = 0 ∣ x ; w ) = 1 − ϕ ( z ) \begin{array}{c} p(y=1 \mid x ; w)=\phi\left(w^{T} x+b\right)=\phi(z) \\\\ p(y=0 \mid x ; w)=1-\phi(z) \end{array} p(y=1∣x;w)=ϕ(wTx+b)=ϕ(z)p(y=0∣x;w)=1−ϕ(z)
进行合并:
p ( y ∣ x ; w ) = ϕ ( z ) y ( 1 − ϕ ( z ) ) ( 1 − y ) p(y \mid x ; w)=\phi(z)^{y}(1-\phi(z))^{(1-y)} p(y∣x;w)=ϕ(z)y(1−ϕ(z))(1−y)
(3)最大化目标函数
∏ i = 1 n p ( y ( i ) ∣ x ( i ) ; w ) = ∏ i = 1 n ( ϕ ( z ( i ) ) ) y ( i ) ( 1 − ϕ ( z ( i ) ) ) 1 − y ( i ) l ( w ) = ln L ( w ) = ∑ i = 1 n y ( i ) ln ( ϕ ( z ( i ) ) ) + ( 1 − y ( i ) ) ln ( 1 − ϕ ( z ( i ) ) ) J ( w ) = − l ( w ) = − ∑ i = 1 n y ( i ) ln ( ϕ ( z ( i ) ) ) + ( 1 − y ( i ) ) ln ( 1 − ϕ ( z ( i ) ) ) \begin{array}{c} \prod_{i=1}^{n} p\left(y^{(i)} \mid x^{(i)} ; w\right)=\prod_{i=1}^{n}\left(\phi\left(z^{(i)}\right)\right)^{y^{(i)}}\left(1-\phi\left(z^{(i)}\right)\right)^{1-y^{(i)}} \\\\ l(w)=\ln L(w)=\sum_{i=1}^{n} y^{(i)} \ln \left(\phi\left(z^{(i)}\right)\right)+\left(1-y^{(i)}\right) \ln \left(1-\phi\left(z^{(i)}\right)\right) \\\\ J(w)=-l(w)=-\sum_{i=1}^{n} y^{(i)} \ln \left(\phi\left(z^{(i)}\right)\right)+\left(1-y^{(i)}\right) \ln \left(1-\phi\left(z^{(i)}\right)\right) \end{array} ∏i=1np(y(i)∣x(i);w)=∏i=1n(ϕ(z(i)))y(i)(1−ϕ(z(i)))1−y(i)l(w)=lnL(w)=∑i=1ny(i)ln(ϕ(z(i)))+(1−y(i))ln(1−ϕ(z(i)))J(w)=−l(w)=−∑i=1ny(i)ln(ϕ(z(i)))+(1−y(i))ln(1−ϕ(z(i)))
LR模型摒弃掉了均方误差函数,而选择了交叉熵损失函数。
两种损失函数对比:
均方误差函数MSE
L = ( y − y ^ ) 2 2 ∂ L ∂ w = ( y ^ − y ) σ ′ ( w ⋅ x ) x σ ′ ( w ⋅ x ) = w ⋅ x ( 1 − w ⋅ x ) \begin{array}{c} L=\frac{(y-\hat{y})^{2}}{2} \\\\ \frac{\partial L}{\partial w}=(\hat{y}-y) \sigma^{\prime}(w \cdot x) x \\\\ \sigma^{\prime}(w \cdot x)=w \cdot x(1-w \cdot x) \end{array} L=2(y−y^)2∂w∂L=(y^−y)σ′(w⋅x)xσ′(w⋅x)=w⋅x(1−w⋅x)
可以看到,w在初始化时,如果值的波动比较大,则可能会存在梯度值很小的情况,就会导致收敛速度很慢;同时训练过程中还可能会出现梯度值很小而提前终止的情况。这就是梯度消失的现象。
交叉熵损失函数Cross Entropy
g ′ = ∑ i = 1 N x i ( y i − p ( x i ) ) g^{\prime}=\sum_{i=1}^{N} x_{i}\left(y_{i}-p\left(x_{i}\right)\right) g′=i=1∑Nxi(yi−p(xi))
当模型的输出概率偏离于真实概率时,梯度是非常大的,这样可以加快训练速度;当拟合概率接近真实概率时,训练速度会随着梯度值的减小而变缓,这就是我们想要的。交叉熵损失函数可以更新速度稳定,避免梯度消失(原因2)。
3.LR的求解方法
LR是使用梯度下降法求解的;
通过梯度下降法不一定能得到全局最优解,除非保证函数是严格的凸函数,否则容易陷入局部最优值点,而且如果选择的学习率不合适,就会在某一个点附近震荡。
如何对模型选择合适的学习率:
选择非常小的学习率时,则更新的速度会很慢;选择非常大的学习率时,则可能跳过最优解点。所以选择合适的学习率很重要。
在实际操作过程中,可以进行这样的尝试,训练开始时可以选择稍微较大的学习率,让学习的速率较快,后边再调小学习率,避免跳过最优值点。
4.多分类问题如何解决?
有的二分类任务的学习方法可以直接推广到多分类,更多情况下是不支持的,需要基于基本策略把LR针对二分类问题的方法推广到多分类问题:即将一个多分类问题拆分为多个二分类问题,为拆分得到的每一个二分类问题都分类一个分类器,在预测时也需要集成多个分类器的预测结果得到真实的预测值。因此多分类问题的关键在于如何对多分类任务拆分和如何将多个分类器进行集成。
有几种方式:
-
OVO(One Vs One)一对一
对于n个类别,将n个类别中的每两个进行配对,产生$C_{n}^{2} 个 二 分 类 任 务 , 在 每 个 二 分 类 任 务 上 使 用 L R , 得 到 个二分类任务,在每个二分类任务上使用LR,得到 个二分类任务,在每个二分类任务上使用LR,得到C_{n}^{2} $个分类器。
可以通过投票机制来进行整合。
优点是在一定程度上规避了数据集不平衡的情况,性能相对稳定,即使需要训练的模型数增多,但是每个模型使用的训练集数量相对是较少的,整体训练效率可能更高;缺点是需要更多的分类器。
-
OVR(One Vs Rest)一对其他
一次将一个类的样例作为正例、其他所有类别的样例作为负例进行训练,得到n个分类器。
在预测时,如果只有一个预测器预测为正例,则对应的类别标记为最终分类的结果;如果有多个分类器预测为正例时,选择置信度最大的类别作为分类结果。
优点在于分类器数目更少;缺点是会造成训练集样本数量的不平衡现象,特别是类别较多时,容易出现正类样本的数量远远不及负类样本的数量的情况,易造成分类器的不平衡现象。
-
Softmax回归
Softmax也可以实现将多逻辑回归运用到多分类。
Softmax函数的形式如下:
σ ( z ) j = e z j ∑ k = 1 K e z k for j = 1 , … , K \sigma(\mathbf{z})_{j}=\frac{e^{z_{j}}}{\sum_{k=1}^{K} e^{z_{k}}} \quad \text { for } j=1, \ldots, K σ(z)j=∑k=1Kezkezj for j=1,…,K目标函数如下:
h θ ( x ( i ) ) = [ p ( y ( i ) = 1 ∣ x ( i ) ; θ ) p ( y ( i ) = 2 ∣ x ( i ) ; θ ) ⋮ p ( y ( i ) = k ∣ x ( i ) ; θ ) ] = 1 ∑ j = 1 k e θ j T x ( i ) [ e θ 1 T x ( i ) e θ 2 T x ( i ) ⋮ e θ k T x ( i ) ] h_{\theta}\left(x^{(i)}\right)=\left[\begin{array}{c} p\left(y^{(i)}=1 \mid x^{(i)} ; \theta\right) \\ p\left(y^{(i)}=2 \mid x^{(i)} ; \theta\right) \\ \vdots \\ p\left(y^{(i)}=k \mid x^{(i)} ; \theta\right) \end{array}\right]=\frac{1}{\sum_{j=1}^{k} e^{\theta_{j}^{T} x^{(i)}}}\left[\begin{array}{c} e^{\theta_{1}^{T} x^{(i)}} \\ e^{\theta_{2}^{T} x^{(i)}} \\ \vdots \\ e^{\theta_{k}^{T} x^{(i)}} \end{array}\right] hθ(x(i))=⎣⎢⎢⎢⎡p(y(i)=1∣x(i);θ)p(y(i)=2∣x(i);θ)⋮p(y(i)=k∣x(i);θ)⎦⎥⎥⎥⎤=∑j=1keθjTx(i)1⎣⎢⎢⎢⎢⎡eθ1Tx(i)eθ2Tx(i)⋮eθkTx(i)⎦⎥⎥⎥⎥⎤损失函数如下:
J ( θ ) = − 1 m [ ∑ i = 1 m ∑ j = 1 k 1 { y ( i ) = j } log e θ j T x ( i ) ∑ l = 1 k e θ l T x ( i ) ] J(\theta)=-\frac{1}{m}\left[\sum_{i=1}^{m} \sum_{j=1}^{k} 1\left\{y^{(i)}=j\right\} \log \frac{e^{\theta_{j}^{T} x^{(i)}}}{\sum_{l=1}^{k} e^{\theta_{l}^{T} x^{(i)}}}\right] J(θ)=−m1[i=1∑mj=1∑k1{y(i)=j}log∑l=1keθlTx(i)eθjTx(i)] -
其他模型
例如MLP(多层感知机)模型。
5.线性回归与逻辑回归的区别
简单来说,逻辑回归是在线性回归的基础上加了sigmoid函数,进行了函数区间从实数区间到0~1之间的映射,使得逻辑回归成为一个分类算法。
对比如下:
线性回归
一般形式是Y=aX+b,y的取值范围是[-∞,+∞]。
解决的是回归问题,输出的是连续值。
使用了最小二乘法(平方损失函数)作为参数估计方法。
逻辑回归
分类:把Y的结果带入sigmoid函数中,得到[0, 1]之间的取值范围。常用于二分类,设定一个阈值,判断正类概率是否大于该阈值。
解决的是分类问题,输出的是离散值。
使用了极大似然法作为参数估计方法。
6.特征的选择
LR方案不能自动进行特征选择,一般是先进行特征工程,再将筛选好的特征输入LR进行训练。因此在使用LR时通常会有一些注意点:
- 将高度相关的特征去掉
一方面是为了增加可解释性;另一方面也会增加模型的训练速度。 - 不能自动进行特征选择
7.如何解决过拟合现象?
过拟合现象的原因一般是模型过分拟合了训练数据的噪声。
一般的措施是正则化:
- L1正则
假设模型参数服从零均值拉普拉斯分布,偏向于使模型参数更稀疏。 - L2正则
假设模型参数服从零均值正态分布,偏向于使模型得每个参数都较小、但是更稠密。
8.什么是特征的离散化和特征交叉?逻辑回归为什么要对特征进行离散化?
一般来说,在使用LR时,很少直接将数据输入到模型中进行训练,而是先将特征进行离散化处理:将连续特征进行离散化为0-1特征,再进行训练。
好处是:
- 计算速度更快
离散化得到的稀疏向量得内积乘法计算速度更快,计算结果更方便存储、容易扩展。 - 对异常值更具鲁棒性
降低离群点对模型的干扰,例如年龄值为200和40都可以离散化为1。 - 离散化相当于非线性,提升表达能力
LR属于广义的线性模型,表达能力很有限,经过离散化后,每个变量都有单独的权重,某种程度上相当于引入了非线性,提升了模型的表达能力、加大了拟合。 - 离散后可以进行特征交叉,提升表达能力
可以将m+n个变量转化为mn个变量,进一步引入非线性、提升表达能力。
特征交叉是指将两个维度的特征进行拼凑,例如两个特征(取值为0、1)进行内积之后,就有了22=4种拼凑方法,例如性别和年龄2个特征进行组合。
特征交叉引入了特征之间的交互,某种程度是为了引入非线性,来提升模型的表达能力。
特征的离散化和特征交叉都属于特征工程的范畴,都是为了提升模型的表现和可解释性的。LR本来很简单,要提升它的表现,研究特征并进行特征工程是一个可以带来很大收益的手段,找到好的特征输入模型。LR因其简单、拓展方便、优化快、可解释性好,经常作为工业界的baseline,经常会用到离散化和特征交叉的方案,基本特征和组合特征(更加精细)兼具了全局性和个性化建模,因此表现更好。
9.逻辑回归的特征系数的绝对值可以认为是特征的重要性吗?
逻辑回归的特征系数的绝对值越大,对分类效果的影响越显著,然而并不能简单认为特征系数更大的特征更重要:
- 改变变量的尺度就会改变系数绝对值
- 如果特征是线性相关的,则系数可以从一个特征转移到另一个特征
通常情况下,数据集的特征越多,特征之间就越可能线性相关,用系数解释特征就越不可靠。
在对特征进行归一化、统一了变量的尺度后,可能系数的绝对值对特征的重要性有一定的参考意义,前提是特征之间是独立的。
10.数据归一化会对逻辑回归起到什么作用?
归一化(normalization)
X i − X min X max − X min \frac{X_{i}-X_{\min }}{X_{\max }-X_{\min }} Xmax−XminXi−Xmin
标准化(standardization)
X i − μ σ \frac{X_{i}-\mu}{\sigma} σXi−μ
其中μ和σ代表样本的均值和标准差, X max X_{\max} Xmax为最大值, X min X_{\min} Xmin为最小值。
对于归一化和标准化的选择:
都是一种线性变化,数据集中、方差较小时,标准化后会相对更分散,数据本身分布比较广;方差比较大时,经过标准化后会集中分布在一个更小的范围内。
在经验上来看,如果对输入的数据范围有要求,数据比较稳定、不存在极端的最大值或最小值时,一般选择归一化;如果数据存在异常值、噪声较多,一般使用标准化,通过中心化来避免异常值和极端值的影响。
作用如下:
- 利于分析
归一化后,LR模型得到的参数可解释性更强。 - 利于梯度下降
可以使得梯度下降更快,也能避免取值较小的特征参数的影响更大的问题,从而提升模型的表现。一般对于使用梯度下降的模型,或者关心变量取值的模型,一般都需要归一化处理。
11.逻辑模型的优缺点?
优点:
- LR能以概率的形式输出结果,而非只是0,1判定。
- LR的可解释性强,可控度高。
- 训练快,feature engineering之后效果赞。
- 因为结果是概率,可以做ranking model。
缺点:
- 准确率低,模型过于简单。
- 本身无法进行特征筛选。
12.逻辑回归与MLP有什么关系?
LR可以看作是只含有一个神经元的单层神经网络,如下:
Softmax回归可以看作一个多维的逻辑回归,如下:
Softmax可以看作单层多个神经元的神经网络。
MLP的隐藏层到输出层可以看成是一个多类别的逻辑回归,即一个Softmax回归。
总结
逻辑回归模型是机器学习中最基本、最重要的分类模型之一,经常被用作分类任务的baseline,因此掌握逻辑模型非常重要,在面试中也会被经常问到,因此掌握常见的面试题相对基础而又格外重要。
本文原文转载自问我社区,原文链接http://www.wenwoha.com/19/course_article?act_id=157。