【机器学习】逻辑回归小结

之前对于LR的介绍已经不少了,有从LR的极大似然概率模型开始推导的,从极大似然开始推导可以得到我们常用的损失函数形式,接下来就可以利用梯度下降方法。也从最大熵模型推导了满足二项分布的LR模型Hypothesis函数来源,以及满足多项式分布的Softmax回归模型。

接下来对LR模型做一个总结。(参照面经等,以后可能会有补充……)


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

这里面其实包含了5个点

  1. 逻辑回归的假设,
  2. 逻辑回归的损失函数,
  3. 逻辑回归的求解方法,
  4. 逻辑回归的目的,
  5. 逻辑回归如何分类。

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

逻辑回归的基本假设

任何的模型都是有自己的假设,在这个假设下模型才是适用的。逻辑回归的第一个基本假设是假设数据服从伯努利分布伯努利分布有一个简单的例子是抛硬币,抛中为正面的概率是p,抛中为负面的概率是1-p.在逻辑回归这个模型里面是假设 h_\theta(x) 为样本为正的概率,1-h_\theta(x)为样本为负的概率。那么整个模型可以描述为:

逻辑回归的第二个假设是假设样本为正的概率(实际上这个不算是假设,只是因为在这里我们没有给出证明,在前面的文章中有讲到,可以通过最大熵模型求解得到。)是:

所以逻辑回归Hypothesis函数的最终形式 :

逻辑回归的损失函数

逻辑回归的损失函数是它的极大似然函数:

逻辑回归的求解方法

由于该极大似然函数无法直接求解,我们一般通过对该函数进行梯度下降来不断逼急最优解。在这个地方其实会有个加分项,考察你对其他优化方法的了解。因为就梯度下降本身来看的话就有随机梯度下降,批梯度下降,Mini-batch 梯度下降三种方式,面试官可能会问这三种方式的优劣以及如何选择最合适的梯度下降方式。

  • 简单来说 批梯度下降会获得全局最优解,缺点是在更新每个参数的时候需要遍历所有的数据,计算量会很大,并且会有很多的冗余计算,导致的结果是当数据量大的时候,每个参数的更新都会很慢。
  • 随机梯度下降是以高方差频繁更新,优点是使得sgd会跳到新的和潜在更好的局部最优解,缺点是使得收敛到局部最优解的过程更加的复杂。
  • 小批量梯度下降结合了sgd和batch gd的优点,每次更新的时候使用n个样本。减少了参数更新的次数,可以达到更加稳定收敛结果,一般在深度学习当中我们采用这种方法。

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

  • 第一个是如何对模型选择合适的学习率。自始至终保持同样的学习率其实不太合适。因为一开始参数刚刚开始学习的时候,此时的参数和最优解隔的比较远,需要保持一个较大的学习率尽快逼近最优解。但是学习到后面的时候,参数和最优解已经隔的比较近了,你还保持最初的学习率,容易越过最优点,在最优点附近来回振荡,通俗一点说,就很容易学过头了,跑偏了。
  • 第二个是如何对参数选择合适的学习率。在实践中,对每个参数都保持的同样的学习率也是很不合理的。有些参数更新频繁,那么学习率可以适当小一点。有些参数更新缓慢,那么学习率就应该大一点。这里我们不展开,有空我会专门出一个专题介绍。

逻辑回归的目的

  • 该函数的目的便是将数据二分类,提高准确率。

逻辑回归如何分类

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

对逻辑回归的进一步提问

逻辑回归虽然从形式上非常的简单,但是其内涵是非常的丰富。有很多问题是可以进行思考的

逻辑回归的损失函数为什么要使用极大似然函数(推导后即交叉熵损失)作为损失函数?

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

这个式子的更新速度只和x^{i}_j,y^{i}相关。和sigmoid函数本身的梯度是无关的。这样更新的速度是可以自始至终都比较的稳定。

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

逻辑回归在训练的过程当中,如果有很多的特征高度相关或者说有一个特征重复了100遍,会造成怎样的影响?

先说结论,如果在损失函数最终收敛的情况下,其实就算有很多特征高度相关也不会影响分类器的效果。

但是对特征本身来说的话,假设只有一个特征,在不考虑采样的情况下,你现在将它重复100遍。训练以后完以后,数据还是这么多,但是这个特征本身重复了100遍,实质上将原来的特征分成了100份,每一个特征都是原来特征权重值的百分之一。

如果在随机采样的情况下,其实训练收敛完以后,还是可以认为这100个特征和原来那一个特征扮演的效果一样,只是可能中间很多特征的值正负相消了。

为什么我们还是会在训练的过程当中将高度相关的特征去掉?

  • 去掉高度相关的特征会让模型的可解释性更好
  • 可以大大提高训练的速度。如果模型当中有很多特征高度相关的话,就算损失函数本身收敛了,但实际上参数是没有收敛的,这样会拉低训练的速度。其次是特征多了,本身就会增大训练的时间。
  • 在模型中如果存在过多的高相关性特征,容易造成矩阵病态,使得收敛极为缓慢。(矩阵病态Normal Equation)
在优化过程中如何避免局部最优解
  1. 以多组不同的参数值进行初始化,训练之后,取其中误差最小的解。
  2. 使用随机梯度下降方法,高方差的梯度下降方法有利于跳出局部最优解(即使陷入局部最优解,但随机样本计算出的梯度也有可能不为0)。

特征系数的绝对值可以认为是特征的重要性吗

逻辑回归的特征系数的绝对值越大,对分类效果的影响越显著,然而并不能简单认为特征系数更大的特征更重要。原因有以下亮点:

  1. 改变变量的尺度就会改变系数绝对值。
  2. 如果特征是线性相关的,则系数可以从一个特征转移到另一个特征。此外,数据集特征越多,特征间越可能线性相关,用系数解释特征的重要性就越不可靠。

逻辑回归实现多分类(之前有讲过,不做累述了)

  • One Vs One
  • One Vs All
  • Softmax

为什么用的是交叉熵损失函数(对数损失函数)

  • 一方面这是由于样本分布满足伯努利分布,可以直接从最大熵模型导出Hypothesis函数(二分类sigmoid,多分类softmax)后用极大似然即可导出目标函数为交叉熵损失函数。
  • 另一方面不考虑模型背后的概率意义,选用交叉熵损失函数相比于平方损失函数,可以使得模型在求解最优解的过程中相对平稳,而不至于造成梯度消失等情况。具体参见之前的一篇文章二次损失函数的不足及交叉熵损失softmax详解

逻辑回归数据归一化

  • 数据归一化之后可以使得梯度下降更为快速,同时避免取值较小特征的参数影响更大的问题,可以提升模型的精度。
  • 实际上在各种模型中,只要是应用梯度下降等优化方法求解或者需要度量距离又或者关心变量的取值的模型都需要进行数据归一化,像Adaboost、SVM、LR、Knn、KMeans之类。而像决策树、RF这样的模型(概率模型)就不需要进行数据归一化,因为它们不关心变量的值,而是关心变量的分布和变量之间的条件概率。

逻辑回归与线性回归的联系与区别

  1. 从模型本身来看。两者都属于广义线性模型,具体的说都是从指数族分布导出的线性模型。
  2. 从处理问题来看。回归模型就是预测一个连续变量(如降水量,价格等)。在分类问题中,预测属于某类的概率,可以看成回归问题。这可以说是使用回归算法的分类方法。由于LR将输出固定在[0,1]之间,故LR通常被用来解决分类问题。
  3. 从分布假设来看。线性回归假设样本分布服从高斯分布,而参数分布可以根据正则项来改变(不带正则项为均匀分布,L1正则项为拉普拉斯分布,L2正则项为高斯分布)。逻辑回归假设变量服从伯努利分布。线性回归与逻辑回归的分布假设区别可以从似然函数的形式中体现出来。
  4. 从输出来看。线性回归的输出在整个实数域,所以线性回归对于变量(输出,训练时)是在整个实数域敏感的。而逻辑回归将输出通过sigmoid函数限定在[0,1]区间内,这样做有两个好处:
    1. 在分类问题中,对于输出所属类别有一个更直观的概念(近似于概率表示)。
    2. 较小的敏感域使得LR对于异常点(Outlier)有更好的鲁棒性,十分确定的正样本与负样本不应该过分影响决策平面的划分。假如使用线性回归对{0,1}二分类问题做预测,则一个真值为1的样本,其预测值为50,那么将会对其产生很大的惩罚,这也和实际情况不符合,更大的预测值说明为1的可能性越大,而不应该惩罚的越严重。
  5. 从参数估计方法来看。两种模型都可以使用极大似然估计的方法去估计参数。但由于假设分布的不同,在根本上对模型有一些的影响。例如线性回归假设样本的分布为高斯分布,则用极大似然估计导出的损失函数为最小均方误差损失;逻辑回归假设样本分布服从伯努利分布,则导出的损失函数为交叉熵损失函数。交叉熵损失函数可以使得模型在训练时较为稳定,最小均方误差损失易造成梯度消失(这是后话了)。

逻辑回归特征的离散化与交叉

篇幅问题,单独拎出来整理了一篇

逻辑回归的优缺点总结

 在这里我们总结了逻辑回归应用到工业界当中一些优点:

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

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

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

参考文章

逻辑回归的常见面试点总结

猜你喜欢

转载自blog.csdn.net/qq_32742009/article/details/81782847