逻辑回归是一个非常经典的算法,其中也包含了非常多的细节,曾看到一句话:如果面试官问你熟悉哪个机器学习模型,可以说 SVM,但千万别说 LR,因为细节真的太多了。

1. 模型介绍

Logistic Regression 虽然被称为回归,但其实际上是分类模型,并常用于二分类。Logistic Regression 因其简单、可并行化、可解释强深受工业界喜爱。
Logistic 回归的本质是:假设数据服从这个分布,然后使用极大似然估计做参数的估计。

1.1 Logistic 分布

Logistic 分布是一种连续型的概率分布,其分布函数密度函数分别为:

其中, μ 表示位置参数, γ>0 为形状参数。我们可以看下其图像特征:

Logistic 分布是由其位置和尺度参数定义的连续分布。Logistic 分布的形状与正态分布的形状相似,但是 Logistic 分布的尾部更长,所以我们可以使用 Logistic 分布来建模比正态分布具有更长尾部和更高波峰的数据分布。在深度学习中常用到的 Sigmoid 函数就是 Logistic 的分布函数在 μ=0,γ=1 的特殊形式。

1.2 Logistic 回归

之前说到 Logistic 回归主要用于分类问题,我们以二分类为例,对于所给数据集假设存在这样的一条直线可以将数据完成线性可分。

决策边界可以表示为

,假设某个样本点
那么可以判断它的类别为 1,这个过程其实是感知机。

Logistic 回归还需要加一层,它要找到分类概率 P(Y=1) 与输入向量 x 的直接关系,然后通过比较概率值来判断类别。

考虑二分类问题,给定数据集

考虑到

取值是连续的,因此它不能拟合离散变量。可以考虑用它来拟合条件概率
,因为概率的取值也是连续的。

但是对于

(若等于零向量则没有什么求解的价值),
取值为 R ,不符合概率取值为 0 到 1,因此考虑采用广义线性模型。

最理想的是单位阶跃函数:

但是这个阶跃函数不可微,对数几率函数是一个常用的替代函数:

于是有:

我们将 y 视为 x 为正例的概率,则 1-y 为 x 为其反例的概率。两者的比值称为几率(odds),指该事件发生与不发生的概率比值,若事件发生的概率为 p。则对数几率:

将 y 视为类后验概率估计,重写公式有:

也就是说,输出 Y=1 的对数几率是由输入 x 的线性函数表示的模型,这就是逻辑回归模型。当

的值越接近正无穷, P(Y=1|x) 概率值也就越接近 1。因此

逻辑回归的思路是,先拟合决策边界(不局限于线性,还可以是多项式),再建立这个边界与分类的概率联系,从而得到了二分类情况下的概率。

在这我们思考个问题,我们使用对数几率的意义在哪?通过上述推导我们可以看到 Logistic 回归实际上是使用线性回归模型的预测值逼近分类任务真实标记的对数几率,其优点有:
直接对分类的概率建模,无需实现假设数据分布,从而避免了假设分布不准确带来的问题;
不仅可预测出类别,还能得到该预测的概率,这对一些利用概率辅助决策的任务很有用;
对数几率函数是任意阶可导的凸函数,有许多数值优化算法都可以求出最优解。

1.3 代价函数

逻辑回归模型的数学形式确定后,剩下就是如何去求解模型中的参数。在统计学中,常常使用极大似然估计法来求解,即找到一组参数,使得在这组参数下,我们的数据的似然度(概率)最大。
设:

似然函数:

为了更方便求解,我们对等式两边同取对数,写成对数似然函数:

在机器学习中我们有损失函数的概念,其衡量的是模型预测错误的程度。如果取整个数据集上的平均对数似然损失,我们可以得到:

即在逻辑回归模型中,我们最大化似然函数最小化损失函数实际上是等价的。

1.4 求解

求解逻辑回归的方法有非常多,我们这里主要聊下梯度下降和牛顿法。优化的主要目标是找到一个方向,参数朝这个方向移动之后使得损失函数的值能够减小,这个方向往往由一阶偏导或者二阶偏导各种组合求得。逻辑回归的损失函数是:

1.随机梯度下降

梯度下降是通过 J(w) 对 w 的一阶导数来找下降方向,并且以迭代的方式来更新参数,更新方式为 :

其中 k 为迭代次数。每次更新参数后,可以通过比较

小于阈值或者到达最大迭代次数来停止迭代。

2. 牛顿法

牛顿法的基本思路是,在现有极小点估计值的附近对 f(x) 做二阶泰勒展开,进而找到极小点的下一个估计值。假设 wk 为当前的极小值估计值,那么有:

然后令

,得到了
。因此有迭代更新式:

推导:

其中

为海森矩阵:

此外,这个方法需要目标函数是二阶连续可微的,本文中的 J(w) 是符合要求的。

1.5 正则化

正则化是一个通用的算法和思想,所以会产生过拟合现象的算法都可以使用正则化来避免过拟合。
在经验风险最小化的基础上(也就是训练误差最小化),尽可能采用简单的模型,可以有效提高泛化预测精度。如果模型过于复杂,变量值稍微有点变动,就会引起预测精度问题。正则化之所以有效,就是因为其降低了特征的权重,使得模型更为简单。
正则化一般会采用 L1 范式或者 L2 范式,其形式分别为

1.L1 正则化

LASSO 回归,相当于为模型添加了这样一个先验知识:w 服从零均值拉普拉斯分布。 首先看看拉普拉斯分布长什么样子:

由于引入了先验知识,所以似然函数这样写:

取 log 再取负,得到目标函数:

等价于原始损失函数的后面加上了 L1 正则,因此 L1 正则的本质其实是为模型增加了“模型参数服从零均值拉普拉斯分布”这一先验知识。

2. L2 正则化

Ridge 回归,相当于为模型添加了这样一个先验知识:w 服从零均值正态分布。
首先看看正态分布长什么样子:

由于引入了先验知识,所以似然函数这样写:

取 ln 再取负,得到目标函数:

等价于原始的损失函数后面加上了 L2 正则,因此 L2 正则的本质其实是为模型增加了“模型参数服从零均值正态分布”这一先验知识。

3. L1 和 L2 的区别

从上面的分析中我们可以看到,L1 正则化增加了所有权重 w 参数的绝对值之和逼迫更多 w 为零,也就是变稀疏( L2 因为其导数也趋 0, 奔向零的速度不如 L1 给力了)。我们对稀疏规则趋之若鹜的一个关键原因在于它能实现特征的自动选择。一般来说,大部分特征 x_i 都是和最终的输出 y_i 没有关系或者不提供任何信息的。在最小化目标函数的时候考虑 x_i 这些额外的特征,虽然可以获得更小的训练误差,但在预测新的样本时,这些没用的特征权重反而会被考虑,从而干扰了对正确 y_i 的预测。L1 正则化的引入就是为了完成特征自动选择的光荣使命,它会学习地去掉这些无用的特征,也就是把这些特征对应的权重置为 0。

L2 正则化中增加所有权重 w 参数的平方之和,逼迫所有 w 尽可能趋向零但不为零(L2 的导数趋于零)。因为在未加入 L2 正则化发生过拟合时,拟合函数需要顾忌每一个点,最终形成的拟合函数波动很大,在某些很小的区间里,函数值的变化很剧烈,也就是某些 w 值非常大。为此,L2 正则化的加入就惩罚了权重变大的趋势。
我们以二维样本为例,图解阐述加入 L1 正则化和 L2 正则化之后目标函数求解时发生的变化。
原函数曲线等高线(同颜色曲线上,每一组 ω1,ω2 带入后值都相同)

那现在我们看下加了 L1 正则化和 L2 正则化之后,目标函数求解的时候,最终解会有什么变化。

从上边两幅图中我们可以看出:
如果不加 L1 和 L2 正则化的时候,对于线性回归这种目标函数凸函数的话,我们最终的结果就是最里边的紫色的小圈圈等高线上的点。
当加入 L1 正则化的时候,我们先画出

的图像,也就是一个菱形,代表这些曲线上的点算出来的 L1 范数
都为 F。那我们现在的目标是不仅是原曲线算的值要小(越来越接近中心的紫色圈圈),还要使得这个菱形越小越好(F 越小越好)。那么还和原来一样的话,过中心紫色圈圈的那个菱形明显很大,因此我们要取到一个恰好的值。那么如何求值呢?

以同一条原曲线目标等高线来说,现在以最外圈的红色等高线为例,我们看到,对于红色曲线上的每个点都可做一个菱形,根据上图可知,当这个菱形与某条等高线相切(仅有一个交点)的时候,这个菱形最小,上图相割对比较大的两个菱形对应的 L1 范数更大。用公式说这个时候能使得在相同的

,由于相切的时候的
小,即
所以能够使得
更小;

有了第一条的说明我们可以看出,最终加入 L1 范数得到的解一定是某个菱形和某条原函数等高线的切点。现在有个比较重要的结论来了,我们经过观察可以看到,几乎对于很多原函数等高曲线,和某个菱形相交的时候及其容易相交在坐标轴(比如上图),也就是说最终的结果,解的某些维度及其容易是 0,比如上图最终解是ω=(0,x),这也就是我们所说的 L1 更容易得到稀疏解(解向量中 0 比较多)的原因;
当然光看着图说,L1 的菱形更容易和等高线相交在坐标轴一点都没说服力,只是个感性的认识,我们接下来从更严谨的方式来证明,简而言之就是假设现在我们是一维的情况下

,其中 h(w) 是目标函数, f(w) 是没加 L1 正则化项前的目标函数, C|ω| 是 L1 正则项,要使得 0 点成为最值可能的点,虽然在 0 点不可导,但是我们只需要让 0 点左右的导数异号,即
即可也就是
的情况下,0 点都是可能的最值点。

当加入 L2 正则化的时候,分析和 L1 正则化是类似的,也就是说我们仅仅是从菱形变成了圆形而已,同样还是求原曲线和圆形的切点作为最终解。当然与 L1 范数比,我们这样求的 L2 范数的从图上来看,不容易交在坐标轴上,但是仍然比较靠近坐标轴。因此这也就是我们老说的,L2 范数能让解比较小(靠近 0),但是比较平滑(不等于 0)

综上所述,我们可以看见,加入正则化项,在最小化经验误差的情况下,可以让我们选择解更简单(趋向于 0)的解。
结构风险最小化:在经验风险最小化的基础上(也就是训练误差最小化),尽可能采用简单的模型,以此提高泛化预测精度。 因此,加正则化项就是结构风险最小化的一种实现正则化之所以能够降低过拟合的原因在于,正则化是结构风险最小化的一种策略实现。

简单总结下:
给 loss function 加上正则化项,能使新得到的优化目标函数

,需要在 f 和 ||w|| 中做一个权衡,如果还像原来只优化 f 的情况下,那可能得到一组解比较复杂,使得正则项 ||w|| 比较大,那么 h 就不是最优的,因此可以看出加正则项能让解更加简单,符合奥卡姆剃刀理论,同时也比较符合在偏差和方差(方差表示模型的复杂度)分析中,通过降低模型复杂度,得到更小的泛化误差,降低过拟合程度。

L1 正则化就是在 loss function 后边所加正则项为 L1 范数,加上 L1 范数容易得到稀疏解(0 比较多)。L2 正则化就是 loss function 后边所加正则项为 L2 范数的平方,加上 L2 正则相比于 L1 正则来说,得到的解比较平滑(不是稀疏),但是同样能够保证解中接近于 0(但不是等于 0,所以相对平滑)的维度比较多,降低模型的复杂度。

1.6 并行化

从逻辑回归的求解方法中我们可以看到,无论是随机梯度下降还是牛顿法,或者是没有提到的拟牛顿法,都是需要计算梯度的,因此逻辑回归的并行化最主要的就是对目标函数梯度计算的并行化。
我们看到目标函数的梯度向量计算中只需要进行向量间的点乘和相加,可以很容易将每个迭代过程拆分成相互独立的计算步骤,由不同的节点进行独立计算,然后归并计算结果。
下图是一个标签和样本矩阵,行为特征向量,列为特征维度。

样本矩阵按行划分,将样本特征向量分布到不同的计算节点,由各计算节点完成自己所负责样本的点乘与求和计算,然后将计算结果进行归并,则实现了按行并行的 LR。按行并行的 LR 解决了样本数量的问题,但是实际情况中会存在针对高维特征向量进行逻辑回归的场景,仅仅按行进行并行处理,无法满足这类场景的需求,因此还需要按列将高维的特征向量拆分成若干小的向量进行求解。

并行计算总共会被分为两个并行化计算步骤和两个结果归并步骤: 步骤一:各节点并行计算点乘,计算

,其中 k=1,2...M/m ,
表示第 t 次迭代中节点 (r,c) 上的第 k 个特征向量与特征权重分量的点乘,
为第 t 次迭代中特征权重向量在第 c 列节点上的分量;

步骤二:对行号相同的节点归并点乘结果:

步骤三:各节点独立算标量与特征向量相乘:

可以理解为由第 r 行节点上部分样本计算出的目标函数梯度向量在第 c 列节点上的分量。

步骤四:对列号相同的节点进行归并:

就是目标函数的梯度向量
在第 c 列节点上的分量,对其进行归并得到目标函数的梯度向量:

这个过程如下图所示:

所以并行计算 LR 的流程如下所示。

所以并行 LR 实际上就是在求解损失函数最优解的过程中,针对寻找损失函数下降方向中的梯度方向计算作了并行化处理,而在利用梯度确定下降方向的过程中也可以采用并行化。

2. 与其他模型的对比

2.1 与线性回归

逻辑回归是在线性回归的基础上加了一个 Sigmoid 函数(非线形)映射,使得逻辑回归称为了一个优秀的分类算法。本质上来说,两者都属于广义线性模型,但他们两个要解决的问题不一样,逻辑回归解决的是分类问题,输出的是离散值,线性回归解决的是回归问题,输出的连续值。
我们需要明确 Sigmoid 函数到底起了什么作用:
线性回归是在实数域范围内进行预测,而分类范围则需要在 [0,1],逻辑回归减少了预测范围;
线性回归在实数域上敏感度一致,而逻辑回归在 0 附近敏感,在远离 0 点位置不敏感,这个的好处就是模型更加关注分类边界,可以增加模型的鲁棒性。

2.2 与最大熵模型

逻辑回归和最大熵模型本质上没有区别,最大熵在解决二分类问题时就是逻辑回归,在解决多分类问题时就是多项逻辑回归。
首先进行符号定义:
1.

表示,输入时 x,输出的 y=u 的概率;

2.A(u,v) 是一个指示函数,若 u=v,则 A(u,v)=1,否则 A(u,v)=0;
3.我们的目标就是从训练数据中,学习得到一个模型,使得

最大化,也就是输入 x,预测结果是 y 的概率最大,也就是使得
最大。

对于逻辑回归而言:

我们这里可以用更泛化的形式来表示 π():

回到我们的目标:令

最大,可以用极大似然估计的方法来求解。

那个 π() 也就是多分类的sigmoid function, 他有两个导数的性质(矩阵的分数求导):

然后我们求偏导:

令偏导数为 0:

使用

这个函数,我们可以重写等式:

想要证明逻辑回归跟最大熵模型是等价的,那么,只要能够证明它们的 π() 是相同,结论自然就出来了。现在,我们不知道最大熵模型的 π() ,但是我们知道下面的一些性质:

利用信息论,我们可以得到 π() 的熵,定义如下:

现在,我们有了目标: ∑π() 最大,也有了上面的4个约束条件。求解约束最优化问题,可以通过拉格朗日乘子,将约束最优化问题转换为无约束最优化的对偶问题。我们的拉格朗日式子可以写成如下:

对 L 求偏导,得到:

令偏导 = 0,得到:

从而得到:

因为有约束条件:

所以:

因此,可以得到:

代入
,并且简化一下式子:

这就是逻辑回归中提到的那个泛化的式子,这就证明了逻辑回归是最大熵模型的一个特殊例子。到此,逻辑回归与最大熵模型的关系就解释完毕了。

2.3 与 SVM

相同点:

  • 都是分类算法,本质上都是在找最佳分类超平面;
  • 都是监督学习算法;
  • 都是判别式模型,判别模型不关心数据是怎么生成的,它只关心数据之间的差别,然后用差别来简单对给定的一个数据进行分类;
  • 都可以增加不同的正则项。

不同点:

  • LR 是一个统计的方法,SVM 是一个几何的方法;
  • SVM 的处理方法是只考虑 Support Vectors,也就是和分类最相关的少数点去学习分类器。而逻辑回归通过非线性映射减小了离分类平面较远的点的权重,相对提升了与分类最相关的数据点的权重;
  • 损失函数不同:LR 的损失函数是交叉熵,SVM 的损失函数是 HingeLoss,这两个损失函数的目的都是增加对分类影响较大的数据点的权重,减少与分类关系较小的数据点的权重。对 HingeLoss 来说,其零区域对应的正是非支持向量的普通样本,从而所有的普通样本都不参与最终超平面的决定,这是支持向量机最大的优势所在,对训练样本数目的依赖大减少,而且提高了训练效率;
  • LR 是参数模型,SVM 是非参数模型,参数模型的前提是假设数据服从某一分布,该分布由一些参数确定(比如正太分布由均值和方差确定),在此基础上构建的模型称为参数模型;非参数模型对于总体的分布不做任何假设,只是知道总体是一个随机变量,其分布是存在的(分布中也可能存在参数),但是无法知道其分布的形式,更不知道分布的相关参数,只有在给定一些样本的条件下,能够依据非参数统计的方法进行推断。所以 LR 受数据分布影响,尤其是样本不均衡时影响很大,需要先做平衡,而 SVM 不直接依赖于分布;
  • LR 可以产生概率,SVM 不能;
  • LR 不依赖样本之间的距离,SVM 是基于距离的;
  • LR 相对来说模型更简单好理解,特别是大规模线性分类时并行计算比较方便。而 SVM 的理解和优化相对来说复杂一些,SVM 转化为对偶问题后,分类只需要计算与少数几个支持向量的距离,这个在进行复杂核函数计算时优势很明显,能够大大简化模型和计算。

2.4 与朴素贝叶斯

朴素贝叶斯和逻辑回归都属于分类模型,当朴素贝叶斯的条件概率

服从高斯分布时,它计算出来的 P(Y=1|X) 形式跟逻辑回归是一样的。

两个模型不同的地方在于:

  • 逻辑回归是判别式模型 p(y|x),朴素贝叶斯是生成式模型 p(x,y):判别式模型估计的是条件概率分布,给定观测变量 x 和目标变量 y 的条件模型,由数据直接学习决策函数 y=f(x) 或者条件概率分布 P(y|x) 作为预测的模型。判别方法关心的是对于给定的输入 x,应该预测什么样的输出 y;而生成式模型估计的是联合概率分布,基本思想是首先建立样本的联合概率概率密度模型 P(x,y),然后再得到后验概率 P(y|x),再利用它进行分类,生成式更关心的是对于给定输入 x 和输出 y 的生成关系;
  • 朴素贝叶斯的前提是条件独立,每个特征权重独立,所以如果数据不符合这个情况,朴素贝叶斯的分类表现就没逻辑会好了。

3. 模型细节

3.1 为什么适合离散特征

我们在使用逻辑回归的时候很少会把数据直接丢给 LR 来训练,我们一般会对特征进行离散化处理,这样做的优势大致有以下几点:
离散后稀疏向量内积乘法运算速度更快,计算结果也方便存储,容易扩展;
离散后的特征对异常值更具鲁棒性,如 age>30 为 1 否则为 0,对于年龄为 200 的也不会对模型造成很大的干扰;
LR 属于广义线性模型,表达能力有限,经过离散化后,每个变量有单独的权重,这相当于引入了非线性,能够提升模型的表达能力,加大拟合;
离散后特征可以进行特征交叉,提升表达能力,由 M+N 个变量编程 M*N 个变量,进一步引入非线形,提升了表达能力;
特征离散后模型更稳定,如用户年龄区间,不会因为用户年龄长了一岁就变化;
总的来说,特征离散化以后起到了加快计算,简化模型和增加泛化能力的作用。

3.2 为什么不用平方误差

假设目标函数是 MSE,即:

这里 Sigmoid 的导数项为:

根据 w 的初始化,导数值可能很小(想象一下 Sigmoid 函数在输入较大时的梯度)而导致收敛变慢,而训练途中也可能因为该值过小而提早终止训练(梯度消失)。

另一方面,交叉熵的梯度如下,当模型输出概率偏离于真实概率时,梯度较大,加快训练速度,当拟合值接近于真实概率时训练速度变缓慢,没有 MSE 的问题。

最大似然估计,就是利用已知的样本结果,反推最有可能(最大概率)导致这样结果的参数值。
例如:一个麻袋里有白球与黑球,但是我不知道它们之间的比例,那我就有放回的抽取10次,结果我发现我抽到了8次黑球2次白球,我要求最有可能的黑白球之间的比例时,就采取最大似然估计法: 我假设我抽到黑球的概率为p,那得出8次黑球2次白球这个结果的概率为:
P(黑=8)=p^8*(1-p)^2,现在我想要得出p是多少啊,很简单,使得P(黑=8)最大的p就是我要求的结果,接下来求导的的过程就是求极值的过程啦。
可能你会有疑问,为什么要ln一下呢,这是因为ln把乘法变成加法了,且不会改变极值的位置(单调性保持一致嘛)这样求导会方便很多~

面试问题

1、LR推导(伯努利过程,极大似然,损失函数,梯度下降),有没有最优解?

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

任何的模型都是有自己的假设,在这个假设下模型才是适用的。逻辑回归的第一个基本假设是假设数据服从伯努利分布。

伯努利分布:是一个离散型概率分布,若成功,则随机变量取值1;若失败,随机变量取值为0。成功概率记为p,失败为q = 1-p。

也就是说,输出 Y=1 的对数几率是由输入 x 的线性函数表示的模型,这就是逻辑回归模型。当ωTx+b的值越接近正无穷,P(Y=1|x)概率值也就越接近 1。因此逻辑回归的思路是,先拟合决策边界(不局限于线性,还可以是多项式),再建立这个边界与分类的概率联系,从而得到了二分类情况下的概率。

在这我们思考个问题,我们使用对数几率的意义在哪?通过上述推导我们可以看到Logistic 回归实际上是使用线性回归模型的预测值逼近分类任务真实标记的对数几率,其优点有:

1.直接对分类的概率建模,无需实现假设数据分布,从而避免了假设分布不准确带来的问题;
2.不仅可预测出类别,还能得到该预测的概率,这对一些利用概率辅助决策的任务很有用;
3.对数几率函数是任意阶可导的凸函数,有许多数值优化算法都可以求出最优解。

逻辑回归与极大似然估计的关系:

最大似然估计就是通过已知结果去反推最大概率导致该结果的参数。极大似然估计是概率论在统计学中的应用,它提供了一种给定观察数据来评估模型参数的方法,即 “模型已定,参数未知”,通过若干次试验,观察其结果,利用实验结果得到某个参数值能够使样本出现的概率为最大,则称为极大似然估计。逻辑回归是一种监督式学习,是有训练标签的,就是有已知结果的,从这个已知结果入手,去推导能获得最大概率的结果参数,只要我们得出了这个参数,那我们的模型就自然可以很准确的预测未知的数据了。

即在逻辑回归模型中,我们最大化似然函数和最小化对数似然损失函数实际上是等价的。

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

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

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

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

3、逻辑回归在训练的过程当中,如果有很多的特征高度相关或者说有一个特征重复了100遍,会造成怎样的影响?为什么我们还是会在训练的过程当中将高度相关的特征去掉?

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

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

4、LR可以用核么?可以怎么用?l1和l2正则项是啥?lr加l1还是l2好?加哪个可以用核(加l2正则项,和svm类似,加l2正则项可以用核方便处理)

LR可以用核解决非线性分类问题:

区别是:SVM如果不用核函数,也得像逻辑回归一样,在映射后的高维空间显示的定义非线性映射函数Φ,而引入了核函数之后,可以在低维空间做完点积计算后,映射到高维。

综上,逻辑回归本质上是线性回归模型,关于系数是线性函数,分离平面无论是线性还是非线性的,逻辑回归其实都可以进行分类。对于非线性的,需要自己去定义一个非线性映射。

l1和l2正则项是啥?lr加l1还是l2好?参考上面

5、LR可以用来处理非线性问题么?(还是lr啊 只不过是加了核的lr 这里加核是显式地把特征映射到高维 然后再做lr)怎么做?可以像SVM那样么?为什么?

LR可以用核解决非线性分类问题:
(1)利用特殊核函数,对特征进行变换:把低维空间转换到高维空间,而在低维空间不可分的数据,到高维空间中线性可分的几率会高一些。
(2)扩展LR算法,提出FM算法。

区别是:SVM如果不用核函数,也得像逻辑回归一样,在映射后的高维空间显示的定义非线性映射函数Φ,而引入了核函数之后,可以在低维空间做完点积计算后,映射到高维。

综上,逻辑回归本质上是线性回归模型,关于系数是线性函数,分离平面无论是线性还是非线性的,逻辑回归其实都可以进行分类。对于非线性的,需要自己去定义一个非线性映射。

使用核函数(特征组合映射):
针对线性不可分的数据集,可以尝试对给定的两个feature做一个多项式特征的映射,例如:

下面两个图的对比说明了线性分类曲线和非线性分类曲线(通过特征映射)

在LR中,我们可以通过在基本线性回归模型的基础上引入交叉项,来实现非线性分类,如下:

但是这种直接在交叉项xixj的前面加上交叉项系数wij的方式在稀疏数据的情况下存在一个很大的缺陷,即在对于观察样本中未出现交互的特征分量,不能对相应的参数进行估计。
即,在数据稀疏性普遍存在的实际应用场景中,二次项参数的训练是很困难的。其原因是,每个参数 wij的训练需要大量xi和 xj都非零的样本;由于样本数据本来就比较稀疏,满足xi 和 xj都非零”的样本将会非常少。训练样本的不足,很容易导致参数 wij 不准确,最终将严重影响模型的性能。 使用FM模型:
另一种方法是对LR进行扩展,因子分解机(Factorization Machine,FM)是对LR算法的扩展。FM模型是一种基于矩阵分解的机器学习模型,对于稀疏数据具有很好的学习能力;
对于因子分解机FM来说,最大的特点是对于稀疏的数据具有很好的学习能力。
FM解决了LR泛化能力弱的问题,其目标函数如下(2)式所示:

6、为什么LR需要归一化或者取对数,为什么LR把特征离散化后效果更好,为什么把特征组合之后还能提升,反正这些基本都是增强了特征的表达能力,或者说更容易线性可分吧

为什么LR需要归一化或者取对数?
符合假设、利于分析、归一化也有利于梯度下降。

为什么LR把特征离散化后效果更好?离散化的好处有哪些?
逻辑回归属于广义线性模型,表达能力受限;
在工业界,很少直接将连续值作为逻辑回归模型的特征输入,而是将连续特征离散化为一系列0、1特征交给逻辑回归模型,这样做的优势有以下几点:
1.逻辑回归属于广义线性模型,表达能力受限;单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合;
2.离散化后可以进行特征交叉,由M+N个变量变为M*N个变量,进一步引入非线性,提升表达能力;
3.特征离散化以后,简化了逻辑回归模型,降低了模型过拟合的风险。
4.离散特征的增加和减少都很容易,易于模型的快速迭代;
5.稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展;
6.离散化后的特征对异常数据有很强的鲁棒性:比如一个特征是年龄>30是1,否则0。如果特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰;
7.特征离散化后,模型会更稳定,比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问;

7、美团技术团队《Logistic Regression 模型简介》https://tech.meituan.com/intro_to_logistic_regression.html

应用
预测用户在未来某个时间段是否会购买某个品类,如果把会购买标记为1,不会购买标记为0,就转换为一个二分类问题。我们用到的特征包括用户在美团的浏览,购买等历史信息,见下表

其中提取的特征的时间跨度为30天,标签为2天。生成的训练数据大约在7000万量级(美团一个月有过行为的用户),我们人工把相似的小品类聚合起来,最后有18个较为典型的品类集合。如果用户在给定的时间内购买某一品类集合,就作为正例。哟了训练数据后,使用Spark版的LR算法对每个品类训练一个二分类模型,迭代次数设为100次的话模型训练需要40分钟左右,平均每个模型2分钟,测试集上的AUC也大多在0.8以上。训练好的模型会保存下来,用于预测在各个品类上的购买概率。预测的结果则会用于推荐等场景。

由于不同品类之间正负例分布不同,有些品类正负例分布很不均衡,我们还尝试了不同的采样方法,最终目标是提高下单率等线上指标。经过一些参数调优,品类偏好特征为推荐和排序带来了超过1%的下单率提升。

此外,由于LR模型的简单高效,易于实现,可以为后续模型优化提供一个不错的baseline,我们在排序等服务中也使用了LR模型。

8、SVM和logistic回归分别在什么情况下使用?https://www.zhihu.com/question/21704547

如何选择LR与SVM?
如果Feature的数量很大,跟样本数量差不多,这时候选用LR或者是Linear Kernel的SVM
如果Feature的数量比较小,样本数量一般,不算大也不算小,选用SVM+Gaussian Kernel
如果Feature的数量比较小,而样本数量很多,需要手工添加一些feature变成第一种情况。

什么是参数模型(LR)与非参数模型(SVM)?
参数模型通常假设总体(随机变量)服从某一个分布,该分布由一些参数确定(比如正太分布由均值和方差确定),在此基础上构建的模型称为参数模型;
非参数模型对于总体的分布不做任何假设,只是知道总体是一个随机变量,其分布是存在的(分布中也可能存在参数),但是无法知道其分布的形式,更不知道分布的相关参数,只有在给定一些样本的条件下,能够依据非参数统计的方法进行推断。

9、为什么LR可以用来做CTR预估?https://www.zhihu.com/question/23652394

1、为什么LR可以用来做点击率预估?
把被点击的样本当成正例,把未点击的样本当成负例,那么样本的ctr实际上就是样本为正例的概率,LR可以输出样本为正例的概率,所以可以用来解决这类问题,另外LR相比于其他模型有求解简单、可解释强的优点,这也是工业界所看重的。

2、满足什么样条件的数据用LR最好?换句话说,为了LR工作的更好,要对数据做一些什么处理?
这里给个充分不必要的条件:

10、逻辑回归估计参数时的目标函数 (就是极大似然估计那部分)。如果加上一个先验的服从高斯分布的假设,会是什么样(天啦。我不知道,其实就是在后面乘一个东西,取log后就变成加一个东西,实际就变成一个正则项)

参照L2正则化

11、逻辑回归估计参数时的目标函数逻辑回归的值表示概率吗?(值越大可能性越高,但不能说是概率)

即:对于输入的x,y=1的概率估计。

12、手推逻辑回归目标函数,正类是1,反类是-1。一般都是正例是1,反例是0的,就是极大似然函数的指数不一样

13、看没看过scikit-learn源码LR的实现?(回头看了一下是调用的liblinear)

14、naive bayes和logistic regression的区别http://m.blog.csdn.net/blog/muye5/19409615

如果GNB假设成立,在渐进意义上,NB和LR会收敛成同一个分类器,否则,二者一般会训练出不同的分类器,这时,当数据量无限时,LR的结果往往比NB要好
LR不必假设数据的各个属性之间必须是相互独立的,对于不满足假设的数据,LR会在训练过程中对W参数自动调整
但是GNB与LR相比,GNB会快速的收敛,并且需要log n (n是数据维度)级别的样本数据。而LR需要n级别的数据,这时,对于小数据量下,GNB可能会比LR好一些!

15、LR为什么用sigmoid函数。这个函数有什么优点和缺点?为什么不用其他函数?sigmoid函数由那个指数族分布,加上二项分布导出来的。损失函数是由最大似然估计求出的。

逻辑回归是在线性回归的基础上加了一个 Sigmoid 函数(非线性)映射,使得逻辑回归称为了一个优秀的分类算法。本质上来说,两者都属于广义线性模型,但他们两个要解决的问题不一样,逻辑回归解决的是分类问题,输出的是离散值,线性回归解决的是回归问题,输出的连续值。

Sigmoid 函数到底起了什么作用:
线性回归是在实数域范围内进行预测,而分类范围则需要在 [0,1],逻辑回归减少了预测范围;
线性回归在实数域上敏感度一致,而逻辑回归在 0 附近敏感,在远离 0 点位置不敏感,这个的好处就是模型更加关注分类边界,可以增加模型的鲁棒性。

16、了解其他的分类模型吗,问LR缺点,LR怎么推导,写LR目标函数,目标函数怎么求最优解(也不会)讲讲LR的梯度下降,梯度下降有哪几种,逻辑函数是啥

LR与其他模型的对比:

1、LR与线性回归

  • 线性回归和逻辑回归都是广义线性回归模型的特例
  • 线性回归只能用于回归问题,逻辑回归用于分类问题(可由二分类推广至多分类)
  • 线性回归使用最小二乘法作为参数估计方法,逻辑回归使用极大似然法作为参数估计方法
  • 逻辑回归引入了sigmoid函数,把y值从线性回归的(−∞,+∞)限制到了(0,1)的范围。
  • 逻辑回归通过阈值判断的方式,引入了非线性因素,可以处理分类问题。
  • 线性回归要求变量服从正态分布,logistic回归对变量分布没有要求。

2、LR与最大熵模型
逻辑回归和最大熵模型本质上没有区别,最大熵在解决二分类问题时就是逻辑回归,在解决多分类问题时就是多项逻辑回归。

3、LR与 SVM 相同点:

  • 都是分类算法,本质上都是在找最佳分类超平面;
  • 都是监督学习算法;
  • 都是判别式模型,判别模型不关心数据是怎么生成的,它只关心数据之间的差别,然后用差别来简单对给定的一个数据进行分类;
  • 都可以增加不同的正则项。 不同点:
  • LR 是一个统计的方法,SVM 是一个几何的方法;
  • SVM 的处理方法是只考虑 Support Vectors,也就是和分类最相关的少数点去学习分类器。而逻辑回归通过非线性映射减小了离分类平面较远的点的权重,相对提升了与分类最相关的数据点的权重;
  • 损失函数不同:LR 的损失函数是交叉熵,SVM 的损失函数是 HingeLoss,这两个损失函数的目的都是增加对分类影响较大的数据点的权重,减少与分类关系较小的数据点的权重。对 HingeLoss 来说,其零区域对应的正是非支持向量的普通样本,从而所有的普通样本都不参与最终超平面的决定,这是支持向量机最大的优势所在,对训练样本数目的依赖大减少,而且提高了训练效率;
  • LR 是参数模型,SVM 是非参数模型,参数模型的前提是假设数据服从某一分布,该分布由一些参数确定(比如正太分布由均值和方差确定),在此基础上构建的模型称为参数模型;非参数模型对于总体的分布不做任何假设,只是知道总体是一个随机变量,其分布是存在的(分布中也可能存在参数),但是无法知道其分布的形式,更不知道分布的相关参数,只有在给定一些样本的条件下,能够依据非参数统计的方法进行推断。所以 LR 受数据分布影响,尤其是样本不均衡时影响很大,需要先做平衡,而 SVM 不直接依赖于分布;
  • LR 可以产生概率,SVM 不能;
  • LR 不依赖样本之间的距离,SVM 是基于距离的;
  • LR 相对来说模型更简单好理解,特别是大规模线性分类时并行计算比较方便。而 SVM 的理解和优化相对来说复杂一些,SVM 转化为对偶问题后,分类只需要计算与少数几个支持向量的距离,这个在进行复杂核函数计算时优势很明显,能够大大简化模型和计算。 4、LR与朴素贝叶斯
    朴素贝叶斯和逻辑回归都属于分类模型,当朴素贝叶斯的条件概率 服从高斯分布时,它计算出来的 P(Y=1|X) 形式跟逻辑回归是一样的。

两个模型不同的地方在于:

  • 逻辑回归是判别式模型 p(y|x),朴素贝叶斯是生成式模型 p(x,y):判别式模型估计的是条件概率分布,给定观测变量 x 和目标变量 y 的条件模型,由数据直接学习决策函数 y=f(x) 或者条件概率分布 P(y|x) 作为预测的模型。判别方法关心的是对于给定的输入 x,应该预测什么样的输出 y;而生成式模型估计的是联合概率分布,基本思想是首先建立样本的联合概率概率密度模型 P(x,y),然后再得到后验概率 P(y|x),再利用它进行分类,生成式更关心的是对于给定输入 x 和输出 y 的生成关系;
  • 朴素贝叶斯的前提是条件独立,每个特征权重独立,所以如果数据不符合这个情况,朴素贝叶斯的分类表现就没逻辑会好了。

逻辑回归的求解方法
1、由于该极大似然函数无法直接求解,我们一般通过对该函数进行梯度下降来不断逼急最优解。在这个地方其实会有个加分的项,考察你对其他优化方法的了解。因为就梯度下降本身来看的话就有随机梯度下降,批梯度下降,small batch 梯度下降三种方式,面试官可能会问这三种方式的优劣以及如何选择最合适的梯度下降方式。
(1)简单来说 批梯度下降会获得全局最优解,缺点是在更新每个参数的时候需要遍历所有的数据,计算量会很大,并且会有很多的冗余计算,导致的结果是当数据量大的时候,每个参数的更新都会很慢。
(2)随机梯度下降是以高方差频繁更新,优点是使得sgd会跳到新的和潜在更好的局部最优解,缺点是使得收敛到局部最优解的过程更加的复杂。
(3)小批量梯度下降结合了sgd和batch gd的优点,每次更新的时候使用n个样本。减少了参数更新的次数,可以达到更加稳定收敛结果,一般在深度学习当中我们采用这种方法。

2、其实这里还有一个隐藏的更加深的加分项,看你了不了解诸如Adam,动量法等优化方法。因为上述方法其实还有两个致命的问题。
(1)第一个是如何对模型选择合适的学习率。自始至终保持同样的学习率其实不太合适。因为一开始参数刚刚开始学习的时候,此时的参数和最优解隔的比较远,需要保持一个较大的学习率尽快逼近最优解。但是学习到后面的时候,参数和最优解已经隔的比较近了,你还保持最初的学习率,容易越过最优点,在最优点附近来回振荡,通俗一点说,就很容易学过头了,跑偏了。
(2)第二个是如何对参数选择合适的学习率。在实践中,对每个参数都保持的同样的学习率也是很不合理的。有些参数更新频繁,那么学习率可以适当小一点。有些参数更新缓慢,那么学习率就应该大一点。

分类任务如何用逻辑回归实现_【机器学习面试总结】—— LR(逻辑回归)相关推荐

  1. logistic回归 简介_金融专业进!逻辑回归模型简述

    逻辑回归模型 逻辑回归属于机器学习中的较为经典的模型,在很多金融专业的实证部分都会用到逻辑回归.接下来分成以下几个部分对逻辑回归模型进行介绍. 1. 模型简介 逻辑回归中的"逻辑" ...

  2. 逻辑回归模型_联邦学习体系下——逻辑回归模型

    联邦学习的体系我们在前期介绍过,这里我们简单回顾一下纵向联邦学习的定义:在两个数据集的用户重叠较多而用户特征重叠较少的情况下,将数据集按照纵向 (即特征维度)切分,并取出双方用户相同而用户特征不完全相 ...

  3. 逻辑回归 数据_数据科学中的逻辑回归

    逻辑回归 数据 逻辑回归 (Logistic Regression) Logistic regression is an applied mathematics analysis methodolog ...

  4. python回归算法_机器学习算法之回归详解

    导语 回归:从一组数据出发,确定某些变量之间的定量关系式:即建立数学模型并估计未知参数. 回归的目的是预测数值型的目标值,它的目标是接受连续数据,寻找最适合数据的方程,并能够对特定值进行预测.这个方程 ...

  5. python 最小二乘回归 高斯核_机器学习技法6-(支持向量回归)

    一.核岭回归 线性分类模型加入了L2正则化以后,最佳解是w关于z的线性组合,因此带有L2正则化的线性分类模型能引入核函数,也就是把线性模型变成核函数的形式. 在线性回归模型中,损失函数为: 当给线性回 ...

  6. 逻辑回归阈值_机器学习入门(2)-逻辑回归

    1.什么是逻辑回归 逻辑回归又称logistic回归分析,是一种广义的线性回归分析模型,常用于数据挖掘,疾病自动诊断,经济预测等领域.逻辑回归分本质不是回归算法,而是分类算法.逻辑回归本质上是运用二分 ...

  7. arctanx麦克劳林公式推导过程_机器学习笔记(七)——初识逻辑回归、不同方法推导梯度公式

    一.算法概述 逻辑回归(Logistic)虽带有回归二字,但它却是一个经典的二分类算法,它适合处理一些二分类任务,例如疾病检测.垃圾邮件检测.用户点击率以及上文所涉及的正负情感分析等等. 首先了解一下 ...

  8. python 决策树回归参数_使用 Python 和 scikit-learn 学习回归算法

    本教程已纳入面向开发者的机器学习这一学习路径. 简介 在本教程中,我们将介绍解决基于回归的机器学习问题的基础知识,并对当前最流行的一些算法进行比较研究. 设置 注册或登录. 从 Try IBM Wat ...

  9. svm 支持向量机 回归 预测_机器学习:简单理解支持向量机SVM

    在介绍过贝叶斯之后,今天尝试着给大家介绍支持向量机SVM. 在机器学习中,SVM试图找到一个最佳的超平面,该平面可以最佳地分割来自不同类别的观察结果.一个在N-1维的超平面可以分割Ñ维的特征空间.例如 ...

  10. python回归模型_缺少Python statsmodels中OLS回归模型的截取

    我正在进行滚动,例如在 this link( https://drive.google.com/drive/folders/0B2Iv8dfU4fTUMVFyYTEtWXlzYkk)中找到的数据集的1 ...

最新文章

  1. struts2对action的搜索规则
  2. C#和nodejs的互操作
  3. 从HTML5移动应用现状谈发展趋势
  4. ftp+nginx+lua_Nginx+GraphicsMagick来实现目录浏览、实时缩略图
  5. AI理论知识整理(7)-单高斯模型
  6. C++Heap Sort堆排序的实现算法(附完整源码)
  7. 利用docker中的nginx镜像部署angular项目
  8. Jenkins使用经验谈
  9. IPy模块测试demo,打印C段ip列表
  10. php+mysql任务网源码
  11. Windows无法访问指定设备,路径或文件.您可能没有合适的权限访问这个项目
  12. CocoaPods 使用小结
  13. 离散信号内插和抽取Matlab,抽取与内插的频谱分析
  14. 如何编写无法维护的代码,让自己稳拿铁饭碗
  15. 新生研讨课报告 计算机,机械工程新生研讨课报告.docx
  16. 万字长文:读懂微服务编排利器Zeebe
  17. 关于esxi主机上vm无法ping通edge网关设备ip的处理
  18. 想做倒卖生意,现在有两万启动资金,倒卖什么比较好?
  19. 苹果4怎么越狱_来看iPhone迁移怎么用 除iOS12.4苹果还为旧款设备推送了更新
  20. docker安装接口管理工具eolinker详细步骤

热门文章

  1. RBP的个人信息管理与个人资料
  2. c语言输出五角星程序,c语言入门之绘制五角星.doc
  3. 5G NR - RLC协议阅读笔记 - 从LTE到NR的变化
  4. 二层技术——点对点协议ppp以及NBMA网络MGRE的tunnel隧道技术以及二层综合实验
  5. 笔记-中项/高项学习期间的错题笔记1
  6. 将自定义程序写入U盘引导区,并在真机执行
  7. vue2 qrcodejs2链接生成二维码
  8. sd卡烧写linux内核,uboot从SD卡烧写内核和文件系统
  9. systemd、upstart和system V
  10. Ensight 基本操作