吴恩达机器学习______学习笔记记录#六、逻辑回归(Logistic Regression)

6.1 关于分类问题

      在分类问题中,要预测的变量y是离散的值,我们将学习一种叫做逻辑回归 (Logistic Regression) 的算法,这是目前最流行使用最广泛的一种学习算法。

       在分类问题中,我们尝试预测的是结果是否属于某一个类(例如正确或错误)。分类问题的例子有:判断一封电子邮件是否是垃圾邮件;判断一次金融交易是否是欺诈;之前我们也谈到了肿瘤分类问题的例子,区别一个肿瘤是恶性的还是良性的。

       从二元的分类问题开始讨论。

       我们将因变量(dependent variable)可能属于的两个类分别称为负类(negative class)和正类(positive class),则因变量y∈0,1,其中 0 表示负类,1 表示正类。

       如果我们要用线性回归算法来解决一个分类问题,对于分类, y取值为 0 或者1,但如果你使用的是线性回归,那么假设函数的输出值可能远大于 1,或者远小于0,即使所有训练样本的标签 y都等于 0 或 1。尽管我们知道标签应该取值0 或者1,但是如果算法得到的值远大于1或者远小于0的话,就会感觉很奇怪。所以我们在接下来的要研究的算法就叫做逻辑回归算法,这个算法的性质是:它的输出值永远在0到 1 之间

       顺便说一下,逻辑回归算法是分类算法,我们将它作为分类算法使用。有时候可能因为这个算法的名字中出现了“回归”使你感到困惑,但逻辑回归算法实际上是一种分类算法,它适用于标签 y取值离散的情况,如:1 0 0 1。

6.2 假设的函数表述

      在分类问题中,要用什么样的函数来表示我们的假设?此前我们说过,希望我们的分类器的输出值在0和1之间,因此,我们希望想出一个满足某个性质的假设函数,这个性质是它的预测值要在0和1之间。

       回顾在一开始提到的乳腺癌分类问题,我们可以用线性回归的方法求出适合数据的一条直线:

根据线性回归模型我们只能预测连续的值,然而对于分类问题,我们需要输出0或1,我们可以预测:

       当h_{\theta }(x)>=0.5h_{\theta }(x)>=0.5时预测 y=1。

       当h_{\theta }(x)<0.5时,预测 y=0。
       对于上图所示的数据,这样的一个线性模型似乎能很好地完成分类任务。假使我们又观测到一个非常大尺寸的恶性肿瘤,将其作为实例加入到我们的训练集中来,这将使得我们获得一条新的直线。

在这里插入图片描述

        这时,再使用0.5作为阀值来预测肿瘤是良性还是恶性便不合适了。可以看出,线性回归模型,因为其预测的值可以超越[0,1]的范围,并不适合解决这样的问题。

       我们引入一个新的模型,逻辑回归,该模型的输出变量范围始终在0和1之间。
逻辑回归模型的假设是:h_{\theta }(x) = g(\theta ^{T}X)

       其中:

        X 代表特征向量
       g 代表逻辑函数(logistic function)是一个常用的逻辑函数为Sigmoid函数(Sigmoid function),公式为:g(z) = \frac{1}{1+e^{-z}}.该函数的图像如下图所示:

      

合起来,我们得到逻辑回归模型的假设:

       对模型的理解:g(z) = \frac{1}{1+e^{-z}}

   h{_{\theta ^}}(x)的作用是,对于给定的输入变量,根据选择的参数计算输出变量=1的可能性estimated probablity)即h{_{\theta ^}}(x) = P(y=1|x;\theta )。实际上有以下的关系:

          P(y=1|x;\theta ) + P(y=0|x;\theta ) = 1
       例如,如果对于给定的x,通过已经确定的参数计算得出h{_{\theta ^}}(x)=0.7,则表示有70%的几率y为正类,相应地y为负类的几率为1-0.7=0.3。

6.3 决策边界(Decision boundary)

 现在讲下决策边界(decision boundary)的概念。这个概念能更好地帮助我们理解逻辑回归的假设函数在计算什么。

在这里插入图片描述

在逻辑回归中,我们预测:

        当h_{\theta }(x)>=0.5h_{\theta }(x)>=0.5时预测 y=1。

       当h_{\theta }(x)<0.5时,预测 y=0。

       根据上面绘制出的 sigmoid函数图像,我们知道当:

       当 z>=0,g(z)>=0.5;当z<0,g(z)<0.5。又因为:z = \theta ^{T}X,所以有:

\theta ^{T}X>=0时,预测y = 1;当\theta ^{T}X<0时,预测y = 0

        现在假设我们有一个模型:

在这里插入图片描述

      假设参数θ 是向量[-3 1 1]。 则\theta ^{T}X−3+x_{1}+x_{2}-3+x_{1} + x_{2},即x_{1} + x_{2}\geq 3时,模型将预测y = 1
       我们可以绘制直线x_{1} + x_{2}= 3,这条线便是我们模型的分界线,将预测为1的区域和预测为 0的区域分隔开。

在这里插入图片描述

所以在这一组数据中,x_{1} + x_{2}= 3 就是决策边界。

下面看一个更加复杂的例子:
在这里插入图片描述

        因为需要用曲线才能分隔y = 0的区域和y = 1的区域,我们需要二次方特征:h_{\theta }(x) = g(\theta _{0}+\theta _{1}x_{1}+\theta _{2}x_{2}+\theta _{3}x_{1}^{2}+\theta _{4}x_{2}^{2})并将\theta取值为[-1 0 0 1 1],则我们对应的决策边界就是:x_{1}^{2}+x_{2}^{2} = 1

我们得到的判定边界恰好是圆点在原点且半径为1的圆形。

       综上,我们可以用非常复杂的模型来适应非常复杂形状的判定边界。

注意:决策边界不是训练集的属性,而是假设本身以及参数的属性。我们用训练集拟合出\theta,从而对应具有决策边界

6.4 代价函数

下面介绍如何拟合逻辑回归的参数\theta,即定义用来拟合的代价函数(优化目标)。这便是监督学习问题中的逻辑回归模型的拟合问题。

在这里插入图片描述

对于线性回归模型,我们定义的代价函数是所有模型误差的平方和。理论上来说,我们也可以对逻辑回归模型沿用这个定义,但是问题在于,当我们将h_{\theta }(x) = \frac{1}{1+e^{-\theta ^{T}X}}带入到这样定义了的代价函数中时,我们得到的代价函数将是一个非凸函数non-convexfunction

在这里插入图片描述

 这意味着我们的代价函数有许多局部最小值,这将影响梯度下降算法寻找全局最小值。

       线性回归的代价函数重写为:J(\theta ) = \frac{1}{m}\sum_{i=1}^{m}\frac{1}{2}(h_{\theta }(x^{(i)})-(y^{(i)}))^{2}

 我们重新定义逻辑回归的代价函数为:J(\theta ) = \frac{1}{m}\sum_{i=1}^{m}Cost(h_{\theta }(x^{(i)}),(y^{(i)})),其中

在这里插入图片描述

 h_{\theta }(x)Cost(h_{\theta }(x),y)之间的关系如下图所示:
       在这里插入图片描述

        这样构建的Cost(h_{\theta }(x),y)函数的特点是:当实际的y=1 且h_{\theta }(x)也为 1 时误差为 0,当y=1h_{\theta }(x)不为1时误差随着h_{\theta }(x)变小而变大;当实际的y = 0h_{\theta }(x)也为 0 时代价为 0,当y = 0h_{\theta }(x)不为 0时误差随着 h_{\theta }(x)的变大而变大。

6.5 简化代价函数以及梯度函数的应用

      将上面构建的Cost(h_{\theta }(x),y)简化如下:

Cost(h_{\theta }(x),y) = -y \times log(h_{\theta }(x))-(1-y) \times log(1-h_{\theta }(x))。代入代价函数,有:

 在得到这样一个代价函数以后,我们便可以用梯度下降算法来求得能使代价函数最小的参数了。算法为:

求导后可得:

我们定义了单训练样本的代价函数,凸性分析的内容是超出这门课的范围的,但是可以证明我们所选的代价值函数会给我们一个凸优化问题。代价函数J(θ)会是一个凸函数,并且没有局部最优值。

推导过程:

J(\theta ) = -\frac{1}{m}\sum_{i=1}^{m}[y^{(i)}log(h_{\theta }(x^{(i)})) + (1 - y^{(i)})log(1-h_{\theta }(x^{(i)}))]

考虑:

h_{\theta }(x^{(i)}) = \frac{1}{1+e^{-\theta ^{T}x^{(i)}}}

则有:

y^{(i)}log(h_{\theta }(x^{(i)})) + (1 - y^{(i)})log(1-h_{\theta }(x^{(i)}))

y^{(i)}log(\frac{1}{1+e^{-\theta ^{T}x^{(i)}}}) + (1 - y^{(i)})log(1-\frac{1}{1+e^{-\theta ^{T}x^{(i)}}})

- y^{(i)}log(1+e^{-\theta ^{T}x^{(i)}}) - (1 - y^{(i)})log(1+e^{\theta ^{T}x^{(i)}})

所以使用梯形公式推导:

\frac{\partial }{\partial \theta _{j}}J(\theta )=\frac{\partial }{\partial \theta _{j}}[-\frac{1}{m}\sum_{i=1}^{m}[- y^{(i)}log(1+e^{-\theta ^{T}x^{(i)}}) - (1 - y^{(i)})log(1+e^{\theta ^{T}x^{(i)}})]]

-\frac{1}{m}\sum_{i=1}^{m}[- y^{(i)}\frac{-x^{(i)}e^{-\theta ^{T}x^{(i)}} }{1+e^{-\theta ^{T}x^{(i)}} }- (1 - y^{(i)})\frac{x^{(i)}e^{\theta ^{T}x^{(i)}} }{1+e^{\theta ^{T}x^{(i)}} }]

-\frac{1}{m}\sum_{i=1}^{m}[-y^{(i)}\frac{x^{(i)}}{1+e^{\theta ^{T}x^{(i)}} }- (1 - y^{(i)})\frac{x^{(i)}e^{\theta ^{T}x^{(i)}} }{1+e^{\theta ^{T}x^{(i)}} }]

-\frac{1}{m}\sum_{i=1}^{m}\frac{y^{(i)}x_{j}^{(i)} - x_{j}^{(i)}e^{\theta ^{T}x^{(i)}} + y^{(i)}x_{j}^{(i)}e^{\theta ^{T}x^{(i)}} }{1+e^{\theta ^{T}x^{(i)}}}

-\frac{1}{m}\sum_{i=1}^{m}\frac{y^{(i)}(1+e^{\theta ^{T}x^{(i)}} ) - e^{\theta ^{T}x^{(i)}}}{1+e^{\theta ^{T}x^{(i)}}}x_{j}^{(i)}

-\frac{1}{m}\sum_{i=1}^{m}(y^{(i)}-\frac{e^{\theta ^{T}x^{(i)}}}{1+e^{\theta ^{T}x^{(i)}}})x_{j}^{(i)}

-\frac{1}{m}\sum_{i=1}^{m}(y^{(i)}-\frac{1}{1+e^{-\theta ^{T}x^{(i)}}})x_{j}^{(i)}

-\frac{1}{m}\sum_{i=1}^{m}[y^{(i)}-h_{\theta }(x^{(i)})]x_{j}^{(i)}

\frac{1}{m}\sum_{i=1}^{m}[h_{\theta }(x^{(i)}) - y^{(i)}]x_{j}^{(i)}

 注:虽然得到的梯度下降算法表面上看上去与线性回归的梯度下降算法一样,但是这里的  h_{\theta }(x) = g(\theta ^{T}X)与线性回归中不同,所以实际上是不一样的。另外,在运行梯度下降算法之前,进行特征缩放依旧是非常必要的,下降收敛更快。

       一些梯度下降算法之外的选择:
       除了梯度下降算法以外,还有一些常被用来令代价函数最小的算法,这些算法更加复杂和优越,而且通常不需要人工选择学习率,通常比梯度下降算法要更加快速。这些算法有:共轭梯度Conjugate Gradient),局部优化法(Broyden fletcher goldfarb shann,BFGS)和有限内存局部优化法(LBFGS) 。

6.6 解决多类别问题的“一对多”分类算法

 如何使用逻辑回归 (logistic regression)来解决多类别分类问题,即"一对多" (one-vs-all) 的分类算法。

       二元分类问题,我们的数据看起来可能是像这样:

在这里插入图片描述

对于一个多类分类问题,我们的数据集或许看起来像这样:

在这里插入图片描述

 我用3种不同的符号来代表3个类别,问题就是给出3个类型的数据集,我们如何得到一个学习算法来进行分类呢?

       我们现在已经知道如何进行二元分类,可以使用逻辑回归,对于直线或许你也知道,可以将数据集一分为二为正类和负类。用一对多的分类思想,我们可以将其用在多类分类问题上。

       下面将介绍如何进行一对多的分类工作,有时这个方法也被称为"一对余"方法。

在这里插入图片描述

    现在我们有一个训练集,好比上图表示的有3个类别,我们用三角形表示 y=1,方框表示y=2,叉叉表示 y=3。我们下面要做的就是使用一个训练集,将其分成3个二元分类问题。

       我们先从用三角形代表的类别1开始,实际上我们可以创建一个,新的"伪"训练集,类型2和类型3定为负类,类型1设定为正类,我们创建一个新的训练集,如下图所示的那样,我们要拟合出一个合适的分类器。

       这里的三角形是正样本,而圆形代表负样本。可以这样想,设置三角形的值为1,圆形的值为0,下面我们来训练一个标准的逻辑回归分类器,这样我们就得到一个正边界。

     为了能实现这样的转变,我们将多个类中的一个类标记为正类(y=1),然后将其他所有类都标记为负类,这个模型记作h_{\theta }^{(1)}(x)。接着,类似地第我们选择另一个类标记为正向类(y=2),再将其它类都标记为负类,将这个模型记作 h_{\theta }^{(2)}(x),依此类推。

      最后我们得到一系列的模型简记为:h{_{\theta }^{(i)}}(x) = P(y=i|x;\theta )其中:i=(1,2,3....k)。

       在我们需要做预测时,我们将所有的分类机都运行一遍,然后对每一个输入变量,都选择最高可能性的输出变量。具体来说,训练这个逻辑回归分类器:h_{\theta }^{(i)}(x), 其中 ii 对应每一个可能的 y=i,最后,为了做出预测,我们给出输入一个新的 x 值,用这个做预测。我们要做的就是在我们三个分类器里面输入 x,然后我们选择一个让h_{\theta }^{(i)}(x)最大的i,即 :max_{i} h_{\theta }^{(i)}(x)

参考资料:

吴恩达机器学习课程肖泽的博客

猜你喜欢

转载自blog.csdn.net/paranior/article/details/104341075
今日推荐