机器学习 —— 李宏毅机器学习笔记(六)—— 逻辑回归

逻辑回归

上一篇博客,分析了生成模型 + 贝叶斯概率公式对分类问题进行求解的过程,实际上就是在寻找参数wb的过程,这次介绍的逻辑回归算法直接对参数wb进行求解,不考虑数据的生成模型。首先,对于逻辑回归,我们的定义是:

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

这里面其实包含了5个点,1:逻辑回归的假设 2:逻辑回归的损失函数 3:逻辑回归的求解方法 4:逻辑回归的目的 5:逻辑回归如何分类。 首先给出逻辑回归的计算公式,然后针对上诉五点内容逐一介绍。

逻辑回归的公式:f_{w,b}(x) = \sigma (\sum _{i}w_{i}x_{i} + b),其中\sigma(z) = \frac{1}{1 + e^{-z}},是sigmoid函数。可以看出,逻辑回归的输出值为(0,1)之间。

一、逻辑回归的假设

任何模型都有自己的假设,只有在这个假设下模型才是适用的,比如假设输入和输出之间具有线性关系,满足这样的假设,线性回归模型才是适用的。逻辑回归需要满足的基本假设是:数据服从伯努利分布(即数据的标签为0或者1);那么逻辑回归的输出f_{w,b}(x)可以理解为预测该样本属于标签1的概率。

二、逻辑回归的损失函数

逻辑回归的定义中提到,“通过极大化似然函数的方法”,所以逻辑回归的损失函数是和似然函数相关的。

似然函数

在数理统计学中,似然函数是一种关于统计模型中的参数的函数,表示模型参数中的似然性。“似然性”和“概率”有明确的区分:概率,用于在已知一些参数的情况下,预测接下来在观测上所得到某个结果的可能性;似然性,则是用于在已知某些观测结果时,对有关事物性质的参数进行估值。

举个简单的例子:比如我们投掷一枚经过特殊设计的徽章,徽章正面朝上的可能性为0.8,反面朝上的可能性为0.2。

那么在这样的设定下(参数已知,正面朝上和反面朝上的可能性就是参数),我们预测下一次扔徽章是正面朝上还是反面朝上,我们预测的是概率;

但是如果我们不知道每次徽章正面朝上和反面朝上的可能性,我们只有10次的观测结果(8次正面朝上,2次反面朝上),我们想要对徽章正面朝上和反面朝上的可能性(参数)进行一个估值,一组参数设定下导致该观测结果出现的概率称为是似然性,我们希望我们估值的参数具有的似然性越大越好,表示在该参数设定下,对于实际情况的拟合比较好。

仍然是上述例子,假设我们估计徽章正面朝上的概率是a,反面朝上的概率是1-a。

似然函数 L(a|10次中8次正面,2次反面)= P(10次中8次正面,2次反面|a)= a^8 * (1-a)^2

假设小明估计a = 0.5,那么其得到的似然性为 0.5^8 * 0.5^2 = 0.0009765625

小红估计a = 0.8,那么其得到的似然性为 0.8^8 * 0.2^2 = 0.0067108864

小红得到的似然性更大,也说明小红估计的参数对于现实情况的拟合更为准确。

回到之前的逻辑回归问题中,对于一批符合伯努利分布的数据,其似然函数为:

L(p) = \prod_{i=1}^{n}p^{x_{i}}*(1-p)^{1 - x_{i}},其中x = 0,1px = 1的概率。

对应到逻辑回归模型,模型输出f_{w,b}(x)表示预测为1的概率;相应地,逻辑回归的似然函数可以写为:

L(w,b) = \prod_{i=1}^{n} [f_{w,b}(x_{i})]^{y_{i}} * [1 - f_{w,b}(x_{i})]^{1 - y_{i}},最大化似然函数,就是求解一组参数wb,使得在这组参数下,最有可能出现观测结果,即在训练集上面拟合效果最好。

对逻辑回归的似然函数取对数,可以得到:logL(w,b) = \sum _{i=1}^{n}[{y_{i}} * log(f_{w,b}(x_{i})) + (1 - {y_{i}}) * log(1 - f_{w,b}(x_{i}))],最大化似然函数,实际上就是最小化-log L(w,b),通常我们会再对-log L(w,b)求一个平均,即在前面乘上\frac{1}{n}。所以逻辑回归中,最终的损失函数为: L(w,b) = -\frac{1}{n}\sum _{i=1}^{n}[{y_{i}} * log(f_{w,b}(x_{i})) + (1 - {y_{i}}) * log(1 - f_{w,b}(x_{i}))]

所以,结论是:逻辑回归中的损失函数是对似然函数求对数,然后求均值,然后取反。

1、为什么逻辑回归中,要使用基于最大似然函数的损失函数?不能和线性回归中一样,使用均方误差吗?(后面解释)

三、逻辑回归的求解方法

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

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

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

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

四、逻辑回归的目的

逻辑回归的目的就是将符合伯努利分布的数据进行二分类,提高准确性。

五、逻辑回归如何进行分类

逻辑回归作为一个回归范式(也就是输出值是连续的,只不过范围限制在(0,1)),如何应用到分类上?输出值确实是一个连续的变量。逻辑回归的做法是划定一个阈值,输出值值大于这个阈值的是一类,小于这个阈值的是另外一类。阈值具体如何调整根据实际情况选择。一般会选择0.5做为阈值来划分。



遗留问题

1、为什么逻辑回归中,要使用基于最大似然函数的损失函数?不能和线性回归中一样,使用均方误差吗?(后面解释)

在逻辑回归中,我们考虑某个参数w_{i}的更新过程:

 由最终参数w_{i}的更新公式,可以看出,如果标签\hat{y}^{n}和模型预测输出f_{w,b}(x^{n})差别较大,比如一个为0一个为1,那么会对参数有一个比较大的更新;如果两者差别小,比如均为1或者均为0,那么就不会对参数进行更新,这是比较合理的。

但是,如果我们在损失函数部分,使用和线性函数一样的均方误差作为损失函数,那么参数w_{i}的更新过程如下:

可以看出,如果这样做的话,无论是接近目标还是远离目标,参数的更新都很小,这是不合理的。

反映到损失函数的图上: 

所以,在逻辑回归中,我们使用的损失函数是基于最大似然函数得到的。 

分类问题中交叉熵和似然函数的关系

交叉熵刻画的是实际输出(模型预测)与期望输出(真实标签)之间的概率分布的距离,也就是交叉熵的值越小,两个概率分布就越接近,即拟合的更好。

CrossEntropy=H(p)+D_{KL}(p || q)

p分布(真实数据分布)是已知,则熵H(p)是常量;于是交叉熵和KL散度则是等价的。

对于离散化分布的pqH(p,q) = - \sum _{x}p(x)*logq(x)

需要注意的是:在分类问题中,交叉熵的本质就是对数似然函数的最大化。

举例如下:

  • 二分类问题中,数据样本为(x,1),我们由模型预测输出的样本x1的概率是y1,那么为0的概率则为 1 - y1

        数据样本的标签1表示为one-hot编码形式为(0,1)

        此时交叉熵 H(p,q) = -(0 * log(1-y1) + 1 * logy1) = -logy1.

        和上面推导得到的极大化对数似然函数的形式是一致的。

  • 在多分类问题中,数据样本为(x,3),我们由模型预测输出的样本x0的概率是y0x1的概率是y1x2的概率是y2x3的概率是y3

        数据样本的标签3表示为one-hot编码形式为(0,0,0,1)

        此时交叉熵 H(p,q) = -(0 * logy0+ 0 * logy1 + 0 * logy2 + 1 * logy3) = -logy3.

        同样和上面推导得到的极大化对数似然函数的形式是一致的。

逻辑回归的优缺点

面试的时候,别人也经常会问到,在使用逻辑回归的时候有哪些感受,觉得它有哪些优缺点。

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

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

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

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

参考资料

1、逻辑回归的常见面试点总结:https://www.cnblogs.com/ModifyRong/p/7739955.html

2、逻辑回归中的损失函数理解:https://www.jianshu.com/p/b6bb6c035d8c

3、最大似然损失和交叉熵损失函数的联系:https://blog.csdn.net/diligent_321/article/details/53115369

4、李宏毅机器学习课程

猜你喜欢

转载自blog.csdn.net/ProQianXiao/article/details/105019619
今日推荐