逻辑回归(Logistic Regression)的过程

前言:逻辑回归可以看作是一个最简单的神经网络,理解逻辑回归对于理解神经网络的原理非常有帮助。

 

首先简要说明一下什么是回归。即我们有一些数据点,我们用一条线去对这些点进行拟合,这个拟合的过程就是回归。(即我们在坐标系中去找一条线,使得这条线尽最大可能地串联这些已知的数据点,如果无法串联则尽量靠近这些已知点。此外,还有一些未知点,但这些未知点和已知点符合某种不为人知的相同规律,我们的线不仅仅要尽量串联已知点,还要保证这条线,将来在预测未知点方面也有良好的效果。)

逻辑回归(Logistic Regression)就是在用回归的思想去处理分类的问题。逻辑回归在功能上是做二分类的问题(实际上二分类问题可以扩展到多分类的问题),并给出相应概率。具体而言,我们假设有一堆数据分布在坐标系中,我们现在要把这堆数据分为两类。我们认为相同类别的数据必然有着某种类似的特征,因此在坐标系中,同类的数据点一定都“蜷缩”在一起。因此,我们要将这两类数据“一切两断”,采用一条直线将其分割开来(如果是二维坐标就用直线切割,三维坐标则用面切割,以此类推)。

如同上图,蓝色和红色点分别代表两类数据,我们现在用一条直线将其分割开来。实际上,数据分布的情况不一定可以完全用直线切割开来,你可以使用更复杂的线去拟合,但是这里逻辑回归使用较为简单的模型。因此,我们的目的不是做到完全一个点都不判错,而是尽量使得误差最小。

逻辑回归(许多机器学习算法都是)过程大致分为两个阶段,训练阶段和预测阶段。训练阶段我们需要使用大量的带有标签的数据(也就是知道这些输入将输出的正确结果)输入到模型当中,然后模型会根据这些输入数据调整自己的参数W,当模型训练到一个较佳状态时即可以进行预测了。预测阶段即将训练好的模型拿来,输入没有标签的数据,进行预测输出结果。

 

现在,我们假设我们的每个数据有n个特征点,记作X={x0,x1,x2,…,xn}。逻辑回归就是去建立一个参数向量W={w0,w1,w2,...,wn}。使得
z=w0x0+w1x1+w2x2+…+wnxn
这样z就是计算的结果了。

但既然是二分类,我们首先想到我们需要我们的模型最后只输出两个值——0和1。而z的值是可能超过0~1之间的,因此我们需要把z的值映射到0~1之间。具有这种性质的函数我们首先想到海维赛德阶跃函数(Heaviside step function),或者直接称为单位阶跃函数。简单来说,就是如下公式:

然而,海维赛德阶跃函数的问题在于:该函数在跳跃点上从0瞬间跳跃到1,这个地方是不可导的,而我们之后梯度下降的过程中需要用到导数,因此我们舍弃该函数而使用sigmoid函数。

sigmoid函数在神经网络中叫做激活函数,其公式为

由图可以看出,只要横坐标的刻度足够大,其形状就非常像阶跃函数。这里我们就把输出值大于0.5的当作第一类,小于0.5的当作第二类。我们将输出概率记作h(x),h(x)=0.5即决策边界。

若Z=XW(这里W写在X的前面还是后面取决于两者的shape),则此时有公式

因此我们现在就要找到最佳的W,而我们的目标就是使得cost(损失函数,也就是计算预测值和真实值的误差大小)最小。cost公式为

其中,log的底数一般为e(也存在其它情况,但本文未说明则一律默认为e),y*为标签结果。

 

接下来就是梯度下降求解最佳的W的值了:

我们将情况具象化,假设我们的X有十组数据,每组数据有三个特征点。

(注意这里e^(-XW),这里是X和W相乘之后对e进行对位处理)

此时cost公式为

(以上Y*为标签,黑色圆点符号为点乘,log(H)同样都是对位处理)

接下来要求解dcost/dW

首先我们求

注意这个地方我们不能直接用链式法则:dcost/dW=(dcost/dH)*(dH/dZ)*(dZ/dW)

由于这里有表达式里面有矩阵,因此这种计算方法实际上错误的,具体可以参考:https://www.cnblogs.com/pinard/p/10825264.html

因此下面的计算也就变成了

由此可以看出最后dcost/dW的值是由X、W、Y*决定的。

最后是梯度下降的公式:

W的初始值一般是随机生成的,alpha为学习率,而dcost/dW中的X、W、Y*在训练过程中都是已知的。

由这个公式就可以看出W是如何找到最佳值的。如下图

事实上,W是一个向量,而非单个的值,所以这W-cost图实际上是不标准的,但是这里为了画图方便和理解方便,我们就使用一个二维坐标系表示W去寻找最佳值的一个过程,至于W为向量的情况,都是可以根据本图进行类推的。

假设现在有一个W-cost的图,我们要做的就是找到使得cost最小的时候的W的值为多少,如同在一座山上,去找海拔最低的山谷。而事实上,我们是无法见到整座山的全貌的,但是我们知道我们所站立的地方的“坡度”,也就是dcost/dW,在图中表现为某个点的斜率。也就是说我要往我所站立的地方的下坡路走,因为下坡的地方一定比我现在的海拔低,那么我走动的距离也就是alpha*dcost/dW,这里alpha也就是学习率,其控制着你每次所走的距离,学习率越大,你每次也就走得越远(学习率是训练开始之前就设置好的,虽然也存在动态的学习率,但这里我们不讨论这个问题,都使用固定的学习率)。而alpha是大于0的,W-=alpha*dcost/dW这样就意味着如果dcost/dW大于0则我W就变小,反之则变大。对应图中假如我在d点,此时我切线斜率大于0我就会往回走到e点,而如果我在f点,此时切线斜率小于0我就往前走到e点。我们会通过这种方式走到谷底斜率为0的地方(事实上,我们不太可能找到完美的谷底,一般是在非常接近于谷底的地方左右震荡)。此外,学习率对于我们找到谷底也是非常有影响的。假如我在a点,如果学习率过大,我可能走的步长就越大,我也许就直接从a点跃到g点了,错过了中间的e点,又从g点跃回到a点附近,每次都会错过e点。而如果学习率过小,也就是说我步长很小,也许你就不会错过中间的谷地,但你又可能陷入局部最优而错过了全局最优,比如我从a点出发,当我经过b点的时候我发现我左右都比我高,就会误以为我已经到达了谷底,却不知道谷底之外还有更深的谷底。因此,对于训练来说,学习率而初始位置都会对最后的结果有影响。

 

 

转载请标明出处,原文地址:https://blog.csdn.net/come_from_pluto

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值