机器学习系列(2)_从初等数学视角解读逻辑回归
最后更新于:2022-04-01 09:51:56
作者:[龙心尘](http://blog.csdn.net/longxinchen_ml?viewmode=contents) && [寒小阳](http://blog.csdn.net/han_xiaoyang?viewmode=contents)
时间:2015年10月。
出处:[http://blog.csdn.net/longxinchen_ml/article/details/49284391](http://blog.csdn.net/longxinchen_ml/article/details/49284391),
[http://blog.csdn.net/han_xiaoyang/article/details/49332321](http://blog.csdn.net/han_xiaoyang/article/details/49332321)。
声明:版权所有,转载请注明出处,谢谢。
### 一、 引言
前一篇文章[《机器学习系列(1)_逻辑回归初步》](http://blog.csdn.net/han_xiaoyang/article/details/49123419)中主要介绍了逻辑回归的由来,作用和简单的应用,这里追加这篇[《机器学习系列(2)用初等数学视角解读逻辑回归》](http://blog.csdn.net/han_xiaoyang/article/details/49332321)来看看从直观的数学视角,可以怎么去理解逻辑回归的思想思路。
> 为了降低理解难度,本文试图用最基础的初等数学来解读逻辑回归,少用公式,多用图形来直观解释推导公式的现实意义,希望使读者能够对逻辑回归有更直观的理解。
### 二、 逻辑回归问题的通俗几何描述
逻辑回归处理的是分类问题。我们可以用通俗的几何语言重新表述它:
空间中有两群点,一群是圆点“〇”,一群是叉点“X”。我们希望从空间中选出一个分离边界,将这两群点分开。
![逻辑回归几何](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e242ff02eac.png "")
> 注:分离边界的维数与空间的维数相关。如果是二维平面,分离边界就是一条线(一维)。如果是三维空间,分离边界就是一个空间中的面(二维)。如果是一维直线,分离边界就是直线上的某一点。不同维数的空间的理解下文将有专门的论述。
为了简化处理和方便表述,我们做以下4个约定:
1.我们先考虑在二维平面下的情况。
2.而且,我们假设这两类是线性可分的:即可以找到一条最佳的直线,将两类点分开。
3.用离散变量y表示点的类别,y只有两个可能的取值。y=1表示是叉点“X”,y=0表示是是圆点“〇”。
4.点的横纵坐标用![x(X1,X2)](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e242ff167b7.jpg "")
表示。
于是,现在的问题就变成了:怎么依靠现有这些点的坐标![(X1,X2)](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e242ff167b7.jpg "")
和标签(y),找出分界线的方程。
### 三、 如何用解析几何的知识找到逻辑回归问题的分界线?
1.我们用逆推法的思路:
假设我们已经找到了这一条线,再寻找这条线的性质是什么。根据这些性质,再来反推这条线的方程。
2.这条线有什么性质呢?
首先,它能把两类点分开来。——好吧,这是废话。( ̄▽ ̄)”
然后,两类点在这条线的法向量p上的投影的值的正负号不一样,一类点的投影全是正数,另一类点的投影值全是负数!
- 首先,这个性质是非常好,可以用来区分点的不同的类别。
- 而且,我们对法向量进行规范:只考虑延长线通过原点的那个法向量p。这样的话,只要求出法向量p,就可以唯一确认这条分界线,这个分类问题就解决了。
![法向量投影](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e242ff2e35e.png "")
![投影结果](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e242ff569c8.png "")
3.还有什么方法能将法向量p的性质处理地更好呢?
因为计算各个点到法向量p投影,需要先知道p的起点的位置,而起点的位置确定起来很麻烦,我们就干脆将法向量平移使其起点落在坐标系的原点,成为新向量p’。因此,所有点到p’的投影也就变化了一个常量。
![原点法向量投影](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e242ff65c54.png "")
![原点法向量投影结果](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e242ffb4e2a.png "")
假设这个常量为![θ0](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e242ffca088.jpg "")
,p’向量的横纵坐标为![(θ1,θ2)](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e242ffd94b3.jpg "")
。空间中任何一个点![x (X1,X2)](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e242ff167b7.jpg "")
到p’的投影就是![θ1X1+θ2X2](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e242ffec0ce.jpg "")
,再加上前面的常量值就是:![θ0+θ1X1+θ2X2](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e2430007f57.jpg "")
看到上面的式子有没有感到很熟悉?这不就是逻辑回归函数![hθ(x)=g(θ0+θ1X1+θ2X2)](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e243001862b.jpg "")
中括号里面的部分吗?
令![z=θ0+θ1X1+θ2X2](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e2430028c27.jpg "")
就可以根据z的正负号来判断点x的类别了。
### 四、 从概率角度理解z的含义。
由以上步骤,我们由点x的坐标得到了一个新的特征z,那么:
> z的现实意义是什么呢?
首先,我们知道,z可正可负可为零。而且,z的变化范围可以一直到正负无穷大。
z如果大于0,则点x属于y=1的类别。而且z的值越大,说明它距离分界线的距离越大,更可能属于y=1类。
那可否把z理解成点x属于y=1类的概率P(y=1|x) (下文简写成P)呢?显然不够理想,因为概率的范围是0到1的。
但是我们可以将概率P稍稍改造一下:令Q=P/(1-P),期望用Q作为z的现实意义。我们发现,当P的在区间[0,1]变化时,Q在[0,+∞)区间单调递增。函数图像如下(以下图像可以直接在度娘中搜“x/(1-x)”,超快):
![发生比函数图像](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e2430037d0e.png "")
但是Q的变化率在[0,+∞)还不够,我们是希望能在(-∞,+∞)区间变化的。而且在P=1/2的时候刚好是0。这样才有足够的解释力。
>注:因为P=1/2说明该点属于两个类别的可能性相当,也就是说这个点恰好在分界面上,那它在法向量的投影自然就是0了。
而在P=1/2时,Q=1,距离Q=0还有一段距离。那怎么通过一个函数变换然它等于0呢?有一个天然的函数log,刚好满足这个要求。
于是我们做变换R=log(Q)=log(P/(1-P)),期望用R作为z的现实意义。画出它的函数图像如图:
![logit函数](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e243004b863.png "")
这个函数在区间[0,1]中可正可负可为零,单调地在(-∞,+∞)变化,而且1/2刚好就是唯一的0值!基本完美满足我们的要求。
回到我们本章最初的问题,
> “我们由点x的坐标得到了一个新的特征z,那么z的具体意义是什么呢?”
由此,我们就可以将z理解成x属于y=1类的概率P经过某种变换后对应的值。也就是说,z= log(P/(1-P))。反过来就是P=![g(z)=1/(1+e-z)](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e243005ad4d.jpg "")
。图像如下:
![sigmoid函数](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e243006ceec.png "")
这两个函数log(P/(1-P)) 、![1/(1+e-z)](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e2430083463.jpg "")
看起来熟不熟悉?
> 这就是传说中的logit函数和sigmoid函数!
小小补充一下:
- 在概率理论中,Q=P/(1-P)的意义叫做赔率(odds)。世界杯赌过球的同学都懂哈。赔率也叫发生比,是事件发生和不发生的概率比。
- 而z= log(P/(1-P))的意义就是对数赔率或者对数发生比(log-odds)。
于是,我们不光得到了z的现实意义,还得到了z映射到概率P的拟合方程:
> ![P=hθ(x)=g(θ0+θ1X1+θ2X2)= g(z)=1/(1+e-z)](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e24300934b7.jpg "")
有了概率P,我们顺便就可以拿拟合方程P=![g(z)=1/(1+e-z)](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e243005ad4d.jpg "")
来判断点x所属的分类:
> 当P>=1/2的时候,就判断点x属于y=1的类别;当P<1/2,就判断点x属于y=0的类别。
![logit变换](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e24300ab545.png "")
### 五、 构造代价函数求出参数的值
到目前为止我们就有两个判断某点所属分类的办法,一个是判断z是否大于0,一个是判断g(z)是否大于1/2。
然而这并没有什么X用,
> 以上的分析都是基于“假设我们已经找到了这条线”的前提得到的,但是最关键的![(θ0,θ1,θ2)](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e24300e078e.jpg "")
三个参数仍未找到有效的办法求出来。
还有没有其他的性质可供我们利用来求出参数![(θ0,θ1,θ2)](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e24300e078e.jpg "")
的值?
- 我们漏了一个关键的性质:这些样本点已经被标注了y=0或者y=1的类别!
- 我们一方面可以基于z是否大于0或者g(z) 是否大于1/2来判断一个点的类别,另一方又可以依据这些点已经被标注的类别与我们预测的类别的插值来评估我们预测的好坏。
- 这种衡量我们在某组参数下预估的结果和实际结果差距的函数,就是传说中的代价函数Cost Function。
- 当代价函数最小的时候,相应的参数![(θ0,θ1,θ2)](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e24300e078e.jpg "")
就是我们希望的最优解。
由此可见,设计一个好的代价函数,将是我们处理好分类问题的关键。而且不同的代价函数,可能会有不同的结果。因此更需要我们将代价函数设计得解释性强,有现实针对性。
为了衡量“预估结果和实际结果的差距”,我们首先要确定“预估结果”和“实际结果”是什么。
- “实际结果”好确定,就是y=0还是y=1。
- “预估结果”有两个备选方案,经过上面的分析,我们可以采用z或者g(z)。但是显然g(z)更好,因为g(z)的意义是概率P,刚好在[0,1]范围之间,与实际结果{0,1}很相近,而z的意思是逻辑发生比,范围是整个实数域(-∞,+∞),不太好与y={0,1}进行比较。
接下来是衡量两个结果的“差距”。
- 我们首先想到的是y-hθ(x)。
- 但这是当y=1的时候比较好。如果y=0,则y- hθ(x)= - hθ(x)是负数,不太好比较,则采用其绝对值hθ(x)即可。综合表示如下:
![cost1](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e243010733b.png "")
- 但这个函数有个问题:求导不太方便,进而用梯度下降法就不太方便。
- 因为梯度下降法超出的初等数学的范围,这里就暂且略去不解释了。
- 于是对上面的代价函数进行了简单的处理,使之便于求导。结果如下:
![cost](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e24301188d8.jpg "")
代价函数确定了,接下来的问题就是机械计算的工作了。常见的方法是用梯度下降法。于是,我们的平面线形可分的问题就可以说是解决了。
### 六、 从几何变换的角度重新梳理我们刚才的推理过程。
回顾我们的推理过程,我们其实是在不断地将点![x(X1,X2)](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e242ff167b7.jpg "")
进行几何坐标变换的过程。
- 第一步是将分布在整个二维平面的点![x(X1,X2)](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e242ff167b7.jpg "")
通过线性投影映射到一维直线中,成为点x(z)
- 第二步是将分布在整个一维直线的点x(z)通过sigmoid函数映射到一维线段[0,1]中成为点x(g(z))。
- 第三步是将所有这些点的坐标通过代价函数统一计算成一个值,如果这是最小值,相应的参数就是我们所需要的理想值。
![几何变换](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e243013ab00.png "")
### 七、 对于简单的非线性可分的问题。
1.由以上分析可知。比较关键的是第一步,我们之所以能够这样映射是因为假设我们点集是线性可分的。但是如果分离边界是一个圆呢?考虑以下情况。
![非线性可分](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e243015796d.png "")
2.我们仍用逆推法的思路:
- 通过观察可知,分离边界如果是一个圆比较合理。
- 假设我们已经找到了这个圆,再寻找这个圆的性质是什么。根据这些性质,再来反推这个圆的方程。
3.我们可以依据这个性质:
- 圆内的点到圆心的距离小于半径,圆外的点到圆心的距离大于半径
- 假设圆的半径为r,空间中任何一个点![x (X1,X2)](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e242ff167b7.jpg "")
到原点的距离为![X12+X22](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e2430174324.jpg "")
。
- 令![z= X12+X22-r2](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e2430182c76.jpg "")
,就可以根据z的正负号来判断点x的类别了
- 然后令![P=hθ(x)=g( X12+X22-r2)= g(z)=1/(1+e-z)](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e24301935f7.jpg "")
,就可以继续依靠我们之前的逻辑回归的方法来处理和解释问题了。
4.从几何变换的角度重新梳理我们刚才的推理过程。
- 第一步是将分布在整个二维平面的点![x(X1,X2)](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e242ff167b7.jpg "")
通过某种方式映射到一维直线中,成为点x(z)
- 第二步是将分布在整个一维射线的点x(z)通过sigmoid函数映射到一维线段[0,1]中成为点x(g(z))。
- 第三步是将所有这些点的坐标通过代价函数统一计算成一个值v,如果这是最小值,相应的参数就是我们所需要的理想值。
![这里写图片描述](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e24301ab6df.png "")
### 八、 从特征处理的角度重新梳理我们刚才的分析过程
其实,做数据挖掘的过程,也可以理解成做特征处理的过程。我们典型的数据挖掘算法,也就是将一些成熟的特征处理过程给固定化的结果。
对于逻辑回归所处理的分类问题,我们已有的特征是这些点的坐标![(X1,X2)](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e242ff167b7.jpg "")
,我们的目标就是判断这些点所属的分类y=0还是y=1。那么最理想的想法就是希望对坐标![(X1,X2)](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e242ff167b7.jpg "")
进行某种函数运算,得到一个(或者一些)新的特征z,基于这个特征z是否大于0来判断该样本所属的分类。
对我们上一节非线性可分问题的推理过程进行进一步抽象,我们的思路其实是:
- 第一步,将点![x(X1,X2](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e242ff167b7.jpg "")
的坐标通过某种函数运算,得到一个新的类似逻辑发生比的特征,![z=f(X1,X2)= X12+X22-r2](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e24301d662b.jpg "")
- 第二步是将特征z通过sigmoid函数得到新的特征![q=g(z)= 1/(1+e-z)= 1/(1+e-f(X1,X2))](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e24301e82cf.jpg "")
。
- 第三步是将所有这些点的特征q通过代价函数统一计算成一个值![v=J(q1,q2,…)](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e2430205235.jpg "")
,如果这是最小值,相应的参数(r)就是我们所需要的理想值。
![特征处理](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e2430214320.png "")
### 九、 对于复杂的非线性可分的问题
由以上分析可知。比较关键的是第一步,如何设计转换函数![z=f(X1,X2)](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e243022be58.jpg "")
。我们现在开始考虑分离边界是一个极端不规则的曲线的情况。
![复杂非线性可分](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e243023d7d7.jpg "")
我们仍用逆推法的思路:
- 通过观察等先验的知识(或者完全不观察乱猜),我们可以假设分离边界是某种6次曲线(这个曲线方程可以提前假设得非常复杂,对应着各种不同的情况)。
- 第一步:将点![x(X1,X2)](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e242ff167b7.jpg "")
的坐标通过某种函数运算,得到一个新的特征![z=f(X1,X2)=θ0+θ1X1+θ2X2+θ3X12+θ4X1X2+θ5X22+…+θ26X1X25+θ27X26](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e2430256c02.jpg "")
。并假设z是某种程度的逻辑发生比,通过其是否大于0来判断样本所属分类。
- 第二步:将特征z通过sigmoid函数映射到新的特征![q=g(z)= 1/(1+e-z)](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e2430264bcc.jpg "")
- 第三步:将所有这些样本的特征q通过逻辑回归的代价函数统一计算成一个值![v=J(q1,q2,…)](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e2430205235.jpg "")
,如果这是最小值,相应的参数![(θ0,θ1,θ2,…, θ27)](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e243027a783.jpg "")
就是我们所需要的理想值。
### 十、 多维逻辑回归的问题
以上考虑的问题都是基于在二维平面内进行分类的情况。其实,对于高维度情况的分类也类似。
高维空间的样本,其区别也只是特征坐标更多,比如四维空间的点x的坐标为![(X1,X2,X3,X4)](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e2430293aeb.jpg "")
。但直接运用上文特征处理的视角来分析,不过是对坐标![x(X1,X2,X3,X4)](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e2430293aeb.jpg "")
进行参数更多的函数运算得到新的特征![z=f(X1,X2,X3,X4)](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e24302b1c5a.jpg "")
。并假设z是某种程度的逻辑发生比,通过其是否大于0来判断样本所属分类。
而且,如果是高维线性可分的情况,则可以有更近直观的理解。
- 如果是三维空间,分离边界就是一个空间中的一个二维平面。两类点在这个二维平面的法向量p上的投影的值的正负号不一样,一类点的投影全是正数,另一类点的投影值全是负数。
![三维逻辑回归](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e24302c1575.png "")
- 如果是高维空间,分离边界就是这个空间中的一个超平面。两类点在这个超平面的法向量p上的投影的值的正负号不一样,一类点的投影全是正数,另一类点的投影值全是负数。
- 特殊的,如果是一维直线空间,分离边界就是直线上的某一点p。一类点在点p的正方向上,另一类点在点p的负方向上。这些点在直线上的坐标可以天然理解成类似逻辑发生比的情况。可见一维直线空间的分类问题是其他所有高维空间投影到法向量后的结果,是所有逻辑回归问题的基础。
![一维逻辑回归](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e24302dec30.png "")
### 十一、 多分类逻辑回归的问题
以上考虑的问题都是二分类的问题,基本就是做判断题。但是对于多分类的问题,也就是做选择题,怎么用逻辑回归处理呢?
![多分类](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e24302eded6.png "")
其基本思路也是二分类,做判断题。
比如你要做一个三选一的问题,有ABC三个选项。首先找到A与BUC(”U”是并集符号)的分离边界。然后再找B与AUC的分离边界,C与AUB的分离边界。
![多分类-二分类](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e2430310760.png "")
这样就能分别得到属于A、B、C三类的概率,综合比较,就能得出概率最大的那一类了。
![最大化](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e24303213f0.png "")
### 十二、 总结列表
为了把本文的关系梳理清楚,我们画了以下这张图表。
![逻辑回归](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-03-11_56e243033280e.jpg "")