机器学习之Logistics Regression

版权声明:转载请注明出处~ https://blog.csdn.net/sinat_31425585/article/details/82936386

    1、线性分类器

    在说线性分类器之前,先思考一下我们平时是如何来做决策的。我们做任何决策之前,我们都会考虑很多因素,这里我们以决策树中经常举的相亲例子来进行说明。

    假设,现在有人说要给你介绍个女朋友,你会问他,女孩多大了?性格如何?长得好看吗?我们会考虑三个因素:年龄是否匹配、性格优劣和长相好坏(是否又勾勾又丢丢),这里我们用三个二进制数x_{1},x_{2},x_{3}表示这三个因素,三个因素对你决定去或者不去相亲的影响程度为w_{1},w_{2},w_{3},这时,你会得到一个想去相亲的程度:

                                                                                y=w_{1}x_{1}+w_{2}x_{2}+w_{3}x_{3}

    那么你到底去不去?我们会设定一个阈值threshold,如果我想去的程度大于threshold我就去,反之,我不去,因此决策模型就变成了

                                                                           y=w_{1}x_{1}+w_{2}x_{2}+w_{3}x_{3}-threshold

    为了表示的简洁性,我们可以将-threshold计为b,那么有:

                                                                                  y=w_{1}x_{1}+w_{2}x_{2}+w_{3}x_{3}+b

    将其表示成向量形式,令:

                                                                              W=\begin{bmatrix} w_{1}\\ w_{2}\\ w_{3} \end{bmatrix},X=\begin{bmatrix} x_{1}\\ x_{2}\\ x_{3} \end{bmatrix}

    有:

                                                                                          y=W^{T}X+b

    这也即是我们所说的线性分类器,如果y大于0,我们就去,反之我们就不去。

    2、 Logistics Regression

    如果权重W和b细小的变化只是轻微影响到输出y,那么我们可以逐步更改权重W和b,让模型按照我们想要的方式发展,这样就能得到一个理想的模型。

   但是,这里存在一个问题,权重W和b中任何一个参数微小变化都能使得模型输出结果彻底翻转,从0到1,因此引入sigmoid函数,来克服上述问题,使用sigmoid函数后,他会将y的值域由  [-\infty,+ \infty]  映射到  [0,1],  权重W和b中任何一个参数微小变化只会微小的影响到输出结果。

    sigmoid函数定义为:

                                                                                      \sigma (z)=\frac{1}{1+e^{-z}}

    3、计算图算梯度

    在Andrew Ng的深度学习课程中,我第一次接触到计算图,然后就被其简单明了的表示方法所吸引,计算图简单明了的描述了在进行计算时,我们需要进行的每一步计算过程,思路十分清晰,且不容易造成错误。

    在说Logistics Regression的计算图之前,我们先看一下一个简单的计算图例子,如图1所示。

                                                                         图1 计算图小例子(摘自参考资料[1])

    我们已知三个变量a,b,c,而需要求解J=3*(a+bc)分别对于三个变量a,b,c的偏导,我们首先可以将计算J的步骤表示成计算图的形式(怎么样一步一步的通过对变量a,b,c操作,最后得到计算结果J),然后再基于计算图,一步一步的求解J对三个变量a,b,c的偏导。

    举个例子,这里求J对a的偏导有:

    1) 求J对隐变量v的偏导有:

                                                                                            \frac{\partial J}{\partial v}=\frac{\partial (3v)}{\partial v}=3

    2) 求v对变量a的偏导有:

                                                                                         \frac{\partial v}{\partial a}=\frac{\partial (u+a)}{\partial a}=1

    所以,最终结果有:

                                                                                     \frac{\partial J}{\partial a}=\frac{\partial J}{\partial v}\frac{\partial v}{\partial a}=3*1=3

    这样,我们就能很清晰的得到需要求解偏导,同时,求解过程很符合我们的编程思路,有利于我们去实现这样一个求解偏导过程,其余两个变量偏导数求解就不做说明了。

    我们再来看一看Logistics Regression的计算图,如图2所示。

            

                                                          图2 Logistics Regression 的计算图(摘自参考资料[1])

    那么,我们再基于这个计算图来计算一个L分别对于对于w_{i},b的偏导:

    1) 求L对a的偏导数有:

                                                                       \frac{\partial L}{\partial a}=-(\frac{y}{a}-\frac{1-y}{1-a})=\frac{1-y}{a(1-a)}

    2) 求a对z的偏导数有:

                                                                                \frac{\partial a}{\partial z}=a(1-a)

    3) 求z对w_{i}的偏导数有:

                                                                                  \frac{\partial z}{\partial w_{i}}=x_{i}

    同样的,求z对b的偏导数有:

                                                                                 \frac{\partial z}{\partial b}=1

    这样,我们就可以得到L分别对于对于w_{i},b的偏导为:

                                                                \frac{\partial L}{\partial w_{i}}=\frac{1-y}{a(1-a)}*a(1-a)*x_{i}=(1-y)x_{i}

                                                                     \frac{\partial L}{\partial b}=\frac{1-y}{a(1-a)}*a(1-a)*1=1-y

    采用计算图的方法使得求解过程瞬间变得清晰明了了,同时,也十分有利于编程。

    4、Logistics Regression损失函数

    这里其实还有一个问题,这里的损失函数L是如何得到的,为什么要采用这种形式的损失函数?其实,很简单,如果采用最常见的平方差损失来作为Logistics Regression的损失函数,在后面优化时,会出现损失函数非凸的情况,使得找到的最优解只是局部最优(局部极小值),而不是全局最优解,因此,Logistics Regression采用了一种等效形式:

                                                               L(a,y)=-(yloga+(1-y)log(1-a))

    这里,我们来进一步的看一看这个Loss function,当y=1时,有:

                                                                     L(a,y)=-loga,a=\sigma (z)

    如果我们让L尽可能小,对应的就是让a尽可能大,而\sigma函数的值域为[0,1],那么其实优化L让其尽可能小的过程,其实就是在y=1时,让预测值尽可能让\hat{y}=1的过程。

    当y=0时,有:

                                                                    L(a,y)=-log(1-a),a=\sigma (z)

    如果我们让L尽可能小,对应的就是让1-a尽可能大,等价于让a尽可能小,而\sigma函数的值域为[0,1],那么其实优化L让其尽可能小的过程,其实就是在y=0时,让预测值尽可能让\hat{y}=0的过程。

    采用这种形式的损失函数还有一个好处,那就是这种损失函数是凸函数,局部极小值等价于全局极小值,求解得到的局部最优解即全局最优解。

    5、代码实现

~~~~~未完待续~~~~~

参考资料:

[1] Andrew Ng  deeplearning.ai课程

    

猜你喜欢

转载自blog.csdn.net/sinat_31425585/article/details/82936386