实验室作业-2018.4.27

时间:2022-06-10 02:52:38

线性回归

之 一元线性回归
一元的是只有一个x和一个y:y=mx+b;多元的指有多个x和一个y:y=m1x1+m2x2+b。

方法:找到一条直线,这条直线能以最小的误差(Loss)来拟合数据。
怎样表示误差

找每个点和直线的距离 实验室作业-2018.4.27最小的那条线,为简单起见,将绝对值转化为平方,那么误差可以表示为 实验室作业-2018.4.27,这里i表示第i个数据,N表示总的样本个数。一般我们还会把Loss求和平均,来当做最终的损失,即 实验室作业-2018.4.27
怎样最小化误差

1)最小二乘法
我们定义的损失为 实验室作业-2018.4.27,其中的x,y,i,N都是已知的,那么我们就可以把这个方程看做是m和b的方程。那么求Loss最小值的问题就转变成了求极值问题。
怎样求极值

令每个变量的方程组为零,求方程组的解。
实验室作业-2018.4.27

实验室作业-2018.4.27
求出m和b
梯度下降法

通过一步一步地迭代,慢慢地去靠近那条最优直线。
最小二乘法里面提到的两个偏导数分别为

实验室作业-2018.4.27
而当我们不用最小二乘法求时,我们使用沿着梯度方向一点一点下滑的方法慢慢接近最小值。需要定义步长,用来表示每次滑多长;再定义一个迭代值用来表示滑多少次。

实现:
定义好之后我们一边求梯度,一边向下滑。也就是去更新m和b:

实验室作业-2018.4.27实验室作业-2018.4.27

代价函数

对于线性回归而言,函数h的表达式如下:

实验室作业-2018.4.27

我们通常指定:实验室作业-2018.4.27

如果使用线性代数来表达的话

 实验室作业-2018.4.27,  实验室作业-2018.4.27

实验室作业-2018.4.27, 其中 实验室作业-2018.4.27实验室作业-2018.4.27矩阵的转置。

那么对于一系列训练数据,如何获得最优的实验室作业-2018.4.27成为解决问题的核心。直观上而言,我们希望获取一组实验室作业-2018.4.27值,使得h(x)越接近y越好。于是定义这个衡量标准为代价函数如下:

实验室作业-2018.4.27

我们看下两个参数的Cost Function图像通常如下:

实验室作业-2018.4.27

它是一个弓形的图像,这个弓形的最低点就是实验室作业-2018.4.27的最优解。

梯度下降算法

对于线性回归问题,我们需要解决的事情往往如下:

定义出 实验室作业-2018.4.27

希望能够找到一组实验室作业-2018.4.27,能够最小化实验室作业-2018.4.27,即实验室作业-2018.4.27

 

梯度下降算法步骤如下:

1. 随机选择一组实验室作业-2018.4.27

2. 不断的变化实验室作业-2018.4.27,让实验室作业-2018.4.27变小

实验室作业-2018.4.27

j=0,1,...n,实验室作业-2018.4.27是所有n+1个值同时进行变化。α 是代表学习速率。实验室作业-2018.4.27 是Cost Function对实验室作业-2018.4.27的偏导数。

希望能够找到一组实验室作业-2018.4.27,能够最小化实验室作业-2018.4.27,即实验室作业-2018.4.27

 

梯度下降算法步骤如下:

1. 随机选择一组实验室作业-2018.4.27

2. 不断的变化实验室作业-2018.4.27,让实验室作业-2018.4.27变小

实验室作业-2018.4.27

j=0,1,...n,实验室作业-2018.4.27是所有n+1个值同时进行变化。α 是代表学习速率。实验室作业-2018.4.27 是Cost Function对实验室作业-2018.4.27的偏导数。

希望能够找到一组实验室作业-2018.4.27,能够最小化实验室作业-2018.4.27,即实验室作业-2018.4.27

 

梯度下降算法步骤如下:

1. 随机选择一组实验室作业-2018.4.27

2. 不断的变化实验室作业-2018.4.27,让实验室作业-2018.4.27变小

实验室作业-2018.4.27

j=0,1,...n, 实验室作业-2018.4.27是所有n+1个值同时进行变化。α 是代表 学习速率。实验室作业-2018.4.27 是Cost Function对 实验室作业-2018.4.27的偏导数。 直到寻找到最小值

偏导求解如下:

实验室作业-2018.4.27

因此最终的梯度下降算法表达如下:

实验室作业-2018.4.27

从Cost Function的图上,我们可以看到选择最优解的过程

实验室作业-2018.4.27

           寻找到局部最优解1

实验室作业-2018.4.27
                                            寻找到局部最优解2

从上面两个图可以看出,寻找最优解的过程很想是在下山,沿着下山的路下来,并最终到达一个局部的底部保持不变。

正规方程

梯度下降算法给出了一种方法可以最小化Cost Function。正规方程(Normal Equation)是另外一种方法,它使用非常直接的方式而不需要进行迭代的算法。在这个方法中,我们通过对J取对应的实验室作业-2018.4.27的偏导数,然后将偏导数设置为0。通过推导,正规方程如下:

实验室作业-2018.4.27
梯度下降算法和正规方程对比如下:实验室作业-2018.4.27

因此两种方法能否工作取决于n(特征x的数量)的大小,如果n很大(> 10000),那么使用梯度下降算法是比较明智的选择。


逻辑回归

1、总述

逻辑回归是应用非常广泛的一个分类机器学习算法,它将数据拟合到一个logit函数(或者叫做logistic函数)中,从而能够完成对事件发生的概率进行预测。

2、由来

    要说逻辑回归,我们得追溯到线性回归,想必大家对线性回归都有一定的了解,即对于多维空间中存在的样本点,我们用特征的线性组合去拟合空间中点的分布和轨迹。如下图所示:

实验室作业-2018.4.27

    线性回归能对连续值结果进行预测,而现实生活中常见的另外一类问题是,分类问题。最简单的情况是是与否的二分类问题。比如说医生需要判断病人是否生病,银行要判断一个人的信用程度是否达到可以给他发信用卡的程度,邮件收件箱要自动对邮件分类为正常邮件和垃圾邮件等等。

    当然,我们最直接的想法是,既然能够用线性回归预测出连续值结果,那根据结果设定一个阈值是不是就可以解决这个问题了呢?事实是,对于很标准的情况,确实可以的,这里我们套用Andrew Ng老师的课件中的例子,下图中X为数据点肿瘤的大小,Y为观测结果是否是恶性肿瘤。通过构建线性回归模型,如hθ(x)所示,构建线性回归模型后,我们设定一个阈值0.5,预测hθ(x)≥0.5的这些点为恶性肿瘤,而hθ(x)<0.5为良性肿瘤。

实验室作业-2018.4.27

    但很多实际的情况下,我们需要学习的分类数据并没有这么精准,比如说上述例子中突然有一个不按套路出牌的数据点出现,如下图所示:

实验室作业-2018.4.27

    你看,现在你再设定0.5,这个判定阈值就失效了,而现实生活的分类问题的数据,会比例子中这个更为复杂,而这个时候我们借助于线性回归+阈值的方式,已经很难完成一个鲁棒性很好的分类器了。

    在这样的场景下,逻辑回归就诞生了。它的核心思想是,如果线性回归的结果输出是一个连续值,而值的范围是无法限定的,那我们有没有办法把这个结果值映射为可以帮助我们判断的结果呢。而如果输出结果是 (0,1) 的一个概率值,这个问题就很清楚了。我们在数学上找了一圈,还真就找着这样一个简单的函数了,就是很神奇的sigmoid函数(如下):

实验室作业-2018.4.27

    如果把sigmoid函数图像画出来,是如下的样子:

实验室作业-2018.4.27

Sigmoid Logistic Function

    从函数图上可以看出,函数y=g(z)在z=0的时候取值为1/2,而随着z逐渐变小,函数值趋于0,z逐渐变大的同时函数值逐渐趋于1,而这正是一个概率的范围。

    所以我们定义线性回归的预测函数为Y=WTX,那么逻辑回归的输出Y= g(WTX),其中y=g(z)函数正是上述sigmoid函数(或者简单叫做S形函数)。


3、判定边界

    我们现在再来看看,为什么逻辑回归能够解决分类问题。这里引入一个概念,叫做判定边界,可以理解为是用以对不同类别的数据分割的边界,边界的两旁应该是不同类别的数据。

    从二维直角坐标系中,举几个例子,大概是如下这个样子:

实验室作业-2018.4.27

    有时候是这个样子:

实验室作业-2018.4.27    

    甚至可能是这个样子:

实验室作业-2018.4.27

    上述三幅图中的红绿样本点为不同类别的样本,而我们划出的线,不管是直线、圆或者是曲线,都能比较好地将图中的两类样本分割开来。这就是我们的判定边界,下面我们来看看,逻辑回归是如何根据样本点获得这些判定边界的。

    我们依旧借用Andrew Ng教授的课程中部分例子来讲述这个问题。

    回到sigmoid函数,我们发现:  

        当g(z)0.5时, z0;

        对于hθ(x)=g(θTX)0.5, 则θTX0, 此时意味着预估y=1;

        反之,当预测y = 0时,θTX<0;

    所以我们认为θTX =0是一个决策边界,当它大于0或小于0时,逻辑回归模型分别预测不同的分类结果。

    先看第一个例子hθ(x)=g(θ01X12X2),其中θ0 ,θ1 ,θ2分别取-3, 1, 1。则当−3+X1+X20时, y = 1; 则X1+X2=3是一个决策边界,图形表示如下,刚好把图上的两类点区分开来:

实验室作业-2018.4.27

    例1只是一个线性的决策边界,当hθ(x)更复杂的时候,我们可以得到非线性的决策边界,例如:

实验室作业-2018.4.27

    这时当x12+x22≥1时,我们判定y=1,这时的决策边界是一个圆形,如下图所示:

实验室作业-2018.4.27

    所以我们发现,理论上说,只要我们的hθ(x)设计足够合理,准确的说是g(θTx)中θTx足够复杂,我们能在不同的情形下,拟合出不同的判定边界,从而把不同的样本点分隔开来。

4、代价函数与梯度下降

    我们通过对判定边界的说明,知道会有合适的参数θ使得θTx=0成为很好的分类判定边界,那么问题就来了,我们如何判定我们的参数θ是否合适,有多合适呢?更进一步,我们有没有办法去求得这样的合适参数θ呢?

    这就是我们要提到的代价函数与梯度下降了。

    所谓的代价函数Cost Function,其实是一种衡量我们在这组参数下预估的结果和实际结果差距的函数,比如说线性回归的代价函数定义为:

实验室作业-2018.4.27

当然我们可以和线性回归类比得到一个代价函数,实际就是上述公式中hθ(x)取为逻辑回归中的g(θTx),但是这会引发代价函数为“非凸”函数的问题,简单一点说就是这个函数有很多个局部最低点,如下图所示:

实验室作业-2018.4.27

而我们希望我们的代价函数是一个如下图所示,碗状结构的凸函数,这样我们算法求解到局部最低点,就一定是全局最小值点。

实验室作业-2018.4.27

      因此,上述的Cost Function对于逻辑回归是不可行的,我们需要其他形式的Cost Function来保证逻辑回归的成本函数是凸函数。

      我们跳过大量的数学推导,直接出结论了,我们找到了一个适合逻辑回归的代价函数:

实验室作业-2018.4.27

      Andrew Ng老师解释了一下这个代价函数的合理性,我们首先看当y=1的情况:

实验室作业-2018.4.27

       如果我们的类别y = 1, 而判定的hθ(x)=1,则Cost = 0,此时预测的值和真实的值完全相等,代价本该为0;而如果判断hθ(x)0,代价->∞,这很好地惩罚了最后的结果。

       而对于y=0的情况,如下图所示,也同样合理:

实验室作业-2018.4.27

       下面我们说说梯度下降,梯度下降算法是调整参数θ使得代价函数J(θ)取得最小值的最基本方法之一。从直观上理解,就是我们在碗状结构的凸函数上取一个初始值,然后挪动这个值一步步靠近最低点的过程,如下图所示:

实验室作业-2018.4.27    


      我们先简化一下逻辑回归的代价函数:

实验室作业-2018.4.27

       从数学上理解,我们为了找到最小值点,就应该朝着下降速度最快的方向(导函数/偏导方向)迈进,每次迈进一小步,再看看此时的下降最快方向是哪,再朝着这个方向迈进,直至最低点。

       用迭代公式表示出来的最小化J(θ)的梯度下降算法如下:

实验室作业-2018.4.27

实验室作业-2018.4.27