文章目录

  • 系列文章
  • 10. Logistic Regression
  • 10.1 Logistic Regression Problem
  • 10.2 Logistic Regression Error
  • 10.3 Gradient of Logistic Regression Error
  • 10.4 Gradient Descent
  • Summary



10. Logistic Regression

10.1 Logistic Regression Problem

上一节课,我们介绍了Linear Regression线性回归,以及用平方错误来寻找最佳的权重向量w,获得最好的线性预测。本节课将介绍Logistic Regression逻辑回归问题。

逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归R语言输出结果是什么

在心脏病是否复发二元分类问题中,其输出空间只含有两项{+1,-1}(复发和不发复发)。在有噪声的情况下,机器学习流程如下图所示。

逻辑回归R语言输出结果是什么 逻辑回归 r2_梯度下降_02

目标函数 逻辑回归R语言输出结果是什么 逻辑回归 r2_算法_03 可以使用目标分布 逻辑回归R语言输出结果是什么 逻辑回归 r2_算法_04

逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归_05


通常情况下,会以概率的方式告知患者复发的可能性,下图中,该患者心脏病复发的可能性为80%。

逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归_06

这种情况被称为软二元分类(soft binary classification),目标函数 逻辑回归R语言输出结果是什么 逻辑回归 r2_算法_03

逻辑回归R语言输出结果是什么 逻辑回归 r2_机器学习_08

针对该目标函数,理想数据集和实际数据集的对比如下:

逻辑回归R语言输出结果是什么 逻辑回归 r2_算法_09

理想数据集的情况是预测输出都是概率的形式,针对心脏病是否复发的例子来说,真实的数据只有复发和没复发两种情况,而不会在病例中记录病发的概率。

可以将实际训练数据看做含有噪音的理想训练数据。问题就转化为:如何使用真实的训练数据解决软二元分类问题,即假设函数如何设计。

首先回忆两种假设函数(二元分类和线性回归)中都具有的是哪部分?答案是求输入 逻辑回归R语言输出结果是什么 逻辑回归 r2_机器学习_10

逻辑回归R语言输出结果是什么 逻辑回归 r2_梯度下降_11

如何把该得分从在整个实数范围内转换成为一个0~1之间的值呢?此处就引出了本章的主题,logistic函数(logistic function)用 逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归R语言输出结果是什么_12。分数s越大风险越高,分数s越小风险越低。假设函数 逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归_13

逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归_14

逻辑回归函数:

逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归R语言输出结果是什么_15


由此易知,通过logistic函数 逻辑回归R语言输出结果是什么 逻辑回归 r2_机器学习_16 可以将值域从实数集 逻辑回归R语言输出结果是什么 逻辑回归 r2_算法_17

通过logistic函数,将软二元分类的假设函数近似为目标函数 逻辑回归R语言输出结果是什么 逻辑回归 r2_机器学习_18

逻辑回归R语言输出结果是什么 逻辑回归 r2_梯度下降_19


习题1:

逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归_20


10.2 Logistic Regression Error

首先看一下二元分类、线性回归与逻辑回归的对比:

逻辑回归R语言输出结果是什么 逻辑回归 r2_机器学习_21

分数 逻辑回归R语言输出结果是什么 逻辑回归 r2_机器学习_22 是在每个假设函数中都会出现的 逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归_23

先介绍一下 “似然(likelihood)” 的概念。对于目标函数 逻辑回归R语言输出结果是什么 逻辑回归 r2_机器学习_18,如果找到了 hypothesis 很接近 target function(err很小)。亦即在Hypothesis集合中找到一个hypothesis 逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归R语言输出结果是什么_25 与 target function 最接近,能产生同样的数据集D,包含样本真实输出y,则称这个 hypothesis 逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归R语言输出结果是什么_25最大似然函数 逻辑回归R语言输出结果是什么 逻辑回归 r2_梯度下降_27 。公式表示如下:

逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归_28

由逻辑回归的目标函数可推导出下式成立:

逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归_29


考虑一数据集 逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归R语言输出结果是什么_30,则通过目标函数产生此种数据集样本的概率可以用下式表示:

逻辑回归R语言输出结果是什么 逻辑回归 r2_机器学习_31

由目标函数 逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归_32

逻辑回归R语言输出结果是什么 逻辑回归 r2_算法_33

目标函数 逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归_32 是未知的,已知的只有假设函数 逻辑回归R语言输出结果是什么 逻辑回归 r2_梯度下降_35,应用最大似然函数公式 逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归R语言输出结果是什么_36 可以将假设函数 逻辑回归R语言输出结果是什么 逻辑回归 r2_梯度下降_35 代替目标函数 逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归_32

逻辑回归R语言输出结果是什么 逻辑回归 r2_算法_39

逻辑回归的假设函数 逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归_40 有性质:逻辑回归R语言输出结果是什么 逻辑回归 r2_梯度下降_41,因此可以将上式进一步转化为:

逻辑回归R语言输出结果是什么 逻辑回归 r2_梯度下降_42

因为 逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归_43 对所有的 逻辑回归R语言输出结果是什么 逻辑回归 r2_梯度下降_35 来说都相同,即 逻辑回归R语言输出结果是什么 逻辑回归 r2_梯度下降_35 的似然只与函数 逻辑回归R语言输出结果是什么 逻辑回归 r2_梯度下降_35 对每个样本的连乘有关,所以可以忽略这一项。将样本真实输出 逻辑回归R语言输出结果是什么 逻辑回归 r2_梯度下降_47

逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归_48

寻找的是似然最大的假设函数h,因此得到下式:

逻辑回归R语言输出结果是什么 逻辑回归 r2_机器学习_49

由逻辑回归的假设函数公式 逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归_40

逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归_51

连乘公式不容易求解最大问题,因此对上式取对数,以便将问题转换为连加的形式:

逻辑回归R语言输出结果是什么 逻辑回归 r2_机器学习_52

通过引入符号,将最大化问题转化为最小化问题,同时引入平均系数 逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归_53使得公式与之前的错误衡量类似:

逻辑回归R语言输出结果是什么 逻辑回归 r2_机器学习_54

逻辑回归R语言输出结果是什么 逻辑回归 r2_机器学习_55

逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归R语言输出结果是什么_56


至此推到结束,由上式可得逻辑回归的误差函数,称为交叉熵误差函数(cross-entropy error),公式为:

逻辑回归R语言输出结果是什么 逻辑回归 r2_算法_57


习题2:

逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归_58


10.3 Gradient of Logistic Regression Error

推导出logistic回归的 逻辑回归R语言输出结果是什么 逻辑回归 r2_算法_59 之后,接下来寻找使得 逻辑回归R语言输出结果是什么 逻辑回归 r2_算法_59 最小的权值向量逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归_61逻辑回归R语言输出结果是什么 逻辑回归 r2_算法_59

逻辑回归R语言输出结果是什么 逻辑回归 r2_算法_63

回顾在上一节线性回归中提到的 逻辑回归R语言输出结果是什么 逻辑回归 r2_算法_59

逻辑回归R语言输出结果是什么 逻辑回归 r2_机器学习_65

由函数公式和图像可知,该函数为连续(continuous)可微(differentiable)的凹函数,因此其最小值在梯度为零时取得,即 逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归_66

要求解 逻辑回归R语言输出结果是什么 逻辑回归 r2_算法_67 ,需要对权值向量 逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归_61

为了强调公式中符号的临时性,不使用字母表示,而用临时符号□和○表示:

逻辑回归R语言输出结果是什么 逻辑回归 r2_机器学习_69

求解过程(逻辑回归R语言输出结果是什么 逻辑回归 r2_梯度下降_70

逻辑回归R语言输出结果是什么 逻辑回归 r2_算法_71


计算结果:

逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归R语言输出结果是什么_72


由于 逻辑回归R语言输出结果是什么 逻辑回归 r2_算法_59 为凹函数,令 逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归_74,求出权值向量 逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归_61,该向量即可使得函数 逻辑回归R语言输出结果是什么 逻辑回归 r2_算法_59

上式中,可以把 逻辑回归R语言输出结果是什么 逻辑回归 r2_算法_67 看做 逻辑回归R语言输出结果是什么 逻辑回归 r2_机器学习_78逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归R语言输出结果是什么_79 的线性加权和,要使 逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归_74,有两种情况成立。分别是线性可分的情况和线性不可分的情况。

对于线性可分的情况,令所有权重 逻辑回归R语言输出结果是什么 逻辑回归 r2_算法_81,即可保证梯度 逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归_74逻辑回归R语言输出结果是什么 逻辑回归 r2_梯度下降_70 函数是sigmoid函数(S型函数),只要让自变量 逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归_84 趋于 逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归R语言输出结果是什么_85 即可,即 逻辑回归R语言输出结果是什么 逻辑回归 r2_机器学习_86 。该式对于所有的样本点成立的条件是:逻辑回归R语言输出结果是什么 逻辑回归 r2_梯度下降_47逻辑回归R语言输出结果是什么 逻辑回归 r2_梯度下降_88

真实的数据绝大多数情况是线性不可分的。这种情况没有解析解,因此需要通过迭代优化方法(iterative optimization approach)来求解。首先回顾一下PLA,然后引出逻辑回归梯度的计算方法。

逻辑回归R语言输出结果是什么 逻辑回归 r2_机器学习_89


逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归_61 每次更新两部分:一个是每次更新的方向 逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归_91逻辑回归R语言输出结果是什么 逻辑回归 r2_机器学习_92 表示,另一个是每次更

新的步长 逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归R语言输出结果是什么_93 。参数 逻辑回归R语言输出结果是什么 逻辑回归 r2_机器学习_94 和终止条件决定了迭代优化算法。

逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归_95


习题3:

逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归R语言输出结果是什么_96


10.4 Gradient Descent

Logistic回归求解最小的 逻辑回归R语言输出结果是什么 逻辑回归 r2_算法_59 使用类似PLA的迭代优化方法,通过一步一步改变权值向量 逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归_61,寻找使得 逻辑回归R语言输出结果是什么 逻辑回归 r2_算法_59 最小的变权值向量 逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归_61,迭代优化方法的更新公式如下所示:

逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归_101


上式中, 逻辑回归R语言输出结果是什么 逻辑回归 r2_机器学习_92 表示更新的方向, 逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归R语言输出结果是什么_93 表示更新的步长。Logistic回归的 逻辑回归R语言输出结果是什么 逻辑回归 r2_算法_59 为处处可微的凹函数,其曲线的“谷底”对应的 逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归_61 可使得 逻辑回归R语言输出结果是什么 逻辑回归 r2_算法_59 最小。

逻辑回归R语言输出结果是什么 逻辑回归 r2_算法_107


那么应该如何选择这两个参数使得更新公式尽可能快得到达该点呢?在 逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归R语言输出结果是什么_93 固定的情况下,如何选择 逻辑回归R语言输出结果是什么 逻辑回归 r2_机器学习_92 的方向保证更新速度最快?按照 逻辑回归R语言输出结果是什么 逻辑回归 r2_算法_59 最陡峭的方向修正。即在 逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归R语言输出结果是什么_93 固定,逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归_112 的情况下,以最快的速度(有指导方向)找出使得 逻辑回归R语言输出结果是什么 逻辑回归 r2_算法_59 最小的 逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归_61,公式如下:

逻辑回归R语言输出结果是什么 逻辑回归 r2_算法_115

以上是非线性带约束的公式,寻找最小 逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归_61 仍然非常困难,考虑将其转换成一个近似的公式,通过寻找近似公式中最小的 逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归_61,达到寻找原公式最小的 逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归_61

逻辑回归R语言输出结果是什么 逻辑回归 r2_梯度下降_119


利用微分思想和线性近似,假设每次下山只前进一小步,即 逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归R语言输出结果是什么_93 很小,根据泰勒公式一阶将上式展开可以得到:

逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归_121

逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归_122

进一步转化为:

逻辑回归R语言输出结果是什么 逻辑回归 r2_梯度下降_123

该公式中 逻辑回归R语言输出结果是什么 逻辑回归 r2_机器学习_124 是已知的,而 逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归R语言输出结果是什么_93 为给定的大于零的值,因此求解上式最小化的问题又可转换为:

逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归_126

迭代的目的是让 逻辑回归R语言输出结果是什么 逻辑回归 r2_机器学习_124 越来越小,即让 逻辑回归R语言输出结果是什么 逻辑回归 r2_梯度下降_128逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归R语言输出结果是什么_93 是标量,因为如果两个向量方向相反,则它们的内积最小(为负);也就是说,如果梯度更新的方向 逻辑回归R语言输出结果是什么 逻辑回归 r2_机器学习_92 与梯度 逻辑回归R语言输出结果是什么 逻辑回归 r2_算法_131 反向的话,就能保证每次迭代 逻辑回归R语言输出结果是什么 逻辑回归 r2_梯度下降_128 都成立。于是,可令梯度下降方向 逻辑回归R语言输出结果是什么 逻辑回归 r2_机器学习_92

逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归R语言输出结果是什么_134


逻辑回归R语言输出结果是什么 逻辑回归 r2_机器学习_92 是单位向量,每次都沿着梯度的反方向更新,这种优化方法称为梯度下降(gradient descent),这是一种常用且简单的方法。实际应用中常常使用随机梯度下降算法(SGD)。

更新方向参数 逻辑回归R语言输出结果是什么 逻辑回归 r2_机器学习_92 的更新方式决定后,再看看更新步长参数 逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归R语言输出结果是什么_93

逻辑回归R语言输出结果是什么 逻辑回归 r2_算法_138

逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归R语言输出结果是什么_93 太小时,下降速度很慢,因此寻找最优 逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归_61 的速度很慢,如左图所示;逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归R语言输出结果是什么_93 太大时,会造成下降不稳定,甚至会出现不降反增的情况,如中间图所示。因此,合适的 逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归R语言输出结果是什么_93 应为随着梯度的减小而减小,如右图所示,即参数 逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归R语言输出结果是什么_93 是可变的,且与梯度大小 逻辑回归R语言输出结果是什么 逻辑回归 r2_梯度下降_144 成正比。由此,可给出更新步长 逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归R语言输出结果是什么_93 的计算公式:

逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归R语言输出结果是什么_146


最终公式记为:

逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归R语言输出结果是什么_147


此时的 逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归R语言输出结果是什么_93 被称为固定的学习率(fixed learning rate) ,公式称为固定学习率的梯度下降

至此,我们可以总结梯度下降算法的计算流程。伪代码如下:

逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归_149

  • 权重初始化:初始化权重向量 逻辑回归R语言输出结果是什么 逻辑回归 r2_算法_150逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归_151
  • 计算梯度:逻辑回归R语言输出结果是什么 逻辑回归 r2_机器学习_152
  • 迭代更新:逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归R语言输出结果是什么_153
  • 计算终止:满足 逻辑回归R语言输出结果是什么 逻辑回归 r2_算法_154

习题4:

逻辑回归R语言输出结果是什么 逻辑回归 r2_算法_155


Summary

逻辑回归R语言输出结果是什么 逻辑回归 r2_梯度下降_156


本节课共四小节,介绍了如下内容:

第一小节从逻辑回归问题出发,将 逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归R语言输出结果是什么_157 作为目标函数,使用逻辑回归函数 逻辑回归R语言输出结果是什么 逻辑回归 r2_逻辑回归_158 形式的假设函数;

第二小节介绍了逻辑回归即误差函数,称为交叉熵误差;

第三、四小节介绍了通过梯度下降算法计算逻辑回归的误差。


参考:

https://github.com/RedstoneWill/HsuanTienLin_MachineLearning