线性回归与梯度下降

来源:互联网 发布:微信全自动营销软件 编辑:程序博客网 时间:2024/04/30 00:42

线性回归(Linear Regression)

从这篇文章开始,主要介绍机器学习的一些列基本算法,本文介绍线性回归问题,以及利用最小均方和梯度下降解决线性回归问题。

(以下内容是根据斯坦福大学ng教授的机器学习公开课总结的内容)

监督学习:即训练数据中既包含了输入数据又包含了对应于这个是输入数据的正确的输出结果。
回归问题:当给出了输入数据后,预测正确的输出结果。

线性回归函数

首先考虑一个问题:我们需要预测自己房屋的价格,现在拥有的数据只是几十个房屋样本价格,如下图所示。怎样根据这些房屋的面积以及价格来预测我们自己房屋的价格呢?
房屋样本
为了更加直观的将已知样本房屋的价格表示出来,我们将上述数据标注在坐标系中,如下图:
此处输入图片的描述
由图我们可以看出,点的分布大致围绕在一条直线周围,因此,我们可以用一个线性函数表示房屋的面积与房屋的价格的对应关系,流程大致如下:
此处输入图片的描述
利用训练数据+学习算法得到一个函数h,然后将待预测的房屋面积输入,即可得到预测的房价。
首先介绍具体字母代表的含义:

  • m:训练数据的总数。
  • x:输入值
  • y:输出值
  • (x,y):训练样本
  • x(i),y(i)):训练样本中的第i对值

为了使得问题更加具有一般性,我们将上面的例子进行扩充成如下表格:
此处输入图片的描述

现在我们假设输出值和输入值之间对应的关系为线性函数:

  • hθ(x)=θ0+θ1x1+θ2x2

上面的式子为了便于表达,假设x0=1,因此,可以写成:

  • hθ(x)=θ0x0+θ1x1+θ2x2=ni=0θixi=θTX

现在,当我们有了测试集,怎样来预测参数θ?,我们的目的就是使得预测结果尽量接近与真实的结果,因此,在所有的训练集上,我们需要使得该函数的输出结果尽量可能接近真实值,也就是使得差量最小,因此可以表示为如下的形式:

  • J(θ)=1/2mi=0(hθ(x(i))y(i))2

这个表达形式可以表现出预测值和真实值的平方差量,其中前面的1/2主要是为了后面的求导计算方便,m表示的是所有的训练数据总数量。到这里,我们表示出了误差函数,也就是损失函数,我们的目标是最小化损失函数J(θ),用到的方法是梯度下降法

梯度下降(gradient descent)

首先我们考虑一个实际的情景,当我们站在山腰的时候,如果我们想最快到达山地,我们首选的方法当然是找坡度最大的地方,即梯度的方向。如下图所示:
此处输入图片的描述
但是,我们会发现一个问题,那就是当我们所处的位置不同的时候,就会走到不同的最低位置,即会出现局部最优,而不是寻找的全局最优值,如下图所示:
此处输入图片的描述
其实,现实我们遇见的现实问题大多只有一个最小值,因此,不会走入局部最优值。例如本实例图像如下所示:
此处输入图片的描述
现在,根据上图可以看出我们需要做的就是不断地更新θ(此处的为一个向量,包括θ1θ2)值,得到到达最小值时候的θ,更新的方法如下,即求偏导后沿着偏导数数的方向进行更新。
此处输入图片的描述
该表达式表示对θi(包括θ1θ2)更新,其中的α表示更新不发的大小(如果太大可能直接越过了最小值,如果太小,迭代速度太慢,代价太大)。将J带入后计算如下:
此处输入图片的描述
最后结果为:
此处输入图片的描述
这个规则称为最小均方(LMS,least mean squares)更新规则
对于以上的式子进行充分直到得到结果即可,其中重复的形式有两种,一种称作批梯度下降(batch gradient descent)随机梯度下降(stochastic gradient descent)

批梯度下降(batch gradient descent)

批梯度下降即每次更新一个参数的一步时候,都需要将所有的数据计算一遍,算法如下:
此处输入图片的描述
很明显,这个算法当训练数据集很大的时候,会导致算法变慢,时间复杂度太大。因此,一般用的比较少。

随机梯度下降(stochastic gradient descent)

随机梯度下降主要是对以上算法的优化,每一步参数的更新,只看训练数据集中的一个训练数据,算法如下:
此处输入图片的描述

利用以上的算法更新开头提出的问题的解法过程图像和最终结果图像如下:
此处输入图片的描述
此处输入图片的描述


前言:

   上次写过一篇关于贝叶斯概率论的数学,最近时间比较紧,coding的任务比较重,不过还是抽空看了一些机器学习的书和视频,其中很推荐两个:一个是stanford的machine learning公开课,在verycd可下载,可惜没有翻译。不过还是可以看。另外一个是prml-pattern recognition and machine learning, Bishop的一部反响不错的书,而且是2008年的,算是比较新的一本书了。

   前几天还准备写一个分布式计算的系列,只写了个开头,又换到写这个系列了。以后看哪边的心得更多,就写哪一个系列吧。最近干的事情比较杂,有跟机器学习相关的,有跟数学相关的,也有跟分布式相关的。

   这个系列主要想能够用数学去描述机器学习,想要学好机器学习,首先得去理解其中的数学意义,不一定要到能够轻松自如的推导中间的公式,不过至少得认识这些式子吧,不然看一些相关的论文可就看不懂了,这个系列主要将会着重于去机器学习的数学描述这个部分,将会覆盖但不一定局限于回归、聚类、分类等算法。

回归与梯度下降:

   回归在数学上来说是给定一个点集,能够用一条曲线去拟合之,如果这个曲线是一条直线,那就被称为线性回归,如果曲线是一条二次曲线,就被称为二次回归,回归还有很多的变种,如locally weighted回归,logistic回归,等等,这个将在后面去讲。

   用一个很简单的例子来说明回归,这个例子来自很多的地方,也在很多的open source的软件中看到,比如说weka。大概就是,做一个房屋价值的评估系统,一个房屋的价值来自很多地方,比如说面积、房间的数量(几室几厅)、地段、朝向等等,这些影响房屋价值的变量被称为特征(feature),feature在机器学习中是一个很重要的概念,有很多的论文专门探讨这个东西。在此处,为了简单,假设我们的房屋就是一个变量影响的,就是房屋的面积。

   假设有一个房屋销售的数据如下:

   面积(m^2)  销售价钱(万元)

   123            250

   150            320

   87              160

   102            220

   …               …

   这个表类似于帝都5环左右的房屋价钱,我们可以做出一个图,x轴是房屋的面积。y轴是房屋的售价,如下:

   image

   如果来了一个新的面积,假设在销售价钱的记录中没有的,我们怎么办呢?

   我们可以用一条曲线去尽量准的拟合这些数据,然后如果有新的输入过来,我们可以在将曲线上这个点对应的值返回。如果用一条直线去拟合,可能是下面的样子:

    image

   绿色的点就是我们想要预测的点。

   首先给出一些概念和常用的符号,在不同的机器学习书籍中可能有一定的差别。

   房屋销售记录表 - 训练集(training set)或者训练数据(training data), 是我们流程中的输入数据,一般称为x

   房屋销售价钱 - 输出数据,一般称为y

   拟合的函数(或者称为假设或者模型),一般写做 y = h(x)

   训练数据的条目数(#training set), 一条训练数据是由一对输入数据和输出数据组成的

   输入数据的维度(特征的个数,#features),n

   下面是一个典型的机器学习的过程,首先给出一个输入数据,我们的算法会通过一系列的过程得到一个估计的函数,这个函数有能力对没有见过的新数据给出一个新的估计,也被称为构建一个模型。就如同上面的线性回归函数。

 

   image

    我们用X1,X2..Xn 去描述feature里面的分量,比如x1=房间的面积,x2=房间的朝向,等等,我们可以做出一个估计函数:

image

    θ在这儿称为参数,在这儿的意思是调整feature中每个分量的影响力,就是到底是房屋的面积更重要还是房屋的地段更重要。为了如果我们令X0 = 1,就可以用向量的方式来表示了:

image

    我们程序也需要一个机制去评估我们θ是否比较好,所以说需要对我们做出的h函数进行评估,一般这个函数称为损失函数(loss function)或者错误函数(error function),描述h函数不好的程度,在下面,我们称这个函数为J函数

    在这儿我们可以做出下面的一个错误函数:

image 

    这个错误估计函数是去对x(i)的估计值与真实值y(i)差的平方和作为错误估计函数,前面乘上的1/2是为了在求导的时候,这个系数就不见了。

    如何调整θ以使得J(θ)取得最小值有很多方法,其中有最小二乘法(min square),是一种完全是数学描述的方法,在stanford机器学习开放课最后的部分会推导最小二乘法的公式的来源,这个来很多的机器学习和数学书上都可以找到,这里就不提最小二乘法,而谈谈梯度下降法。

    梯度下降法是按下面的流程进行的:

    1)首先对θ赋值,这个值可以是随机的,也可以让θ是一个全零的向量。

    2)改变θ的值,使得J(θ)按梯度下降的方向进行减少。

    为了更清楚,给出下面的图:

image    这是一个表示参数θ与误差函数J(θ)的关系图,红色的部分是表示J(θ)有着比较高的取值,我们需要的是,能够让J(θ)的值尽量的低。也就是深蓝色的部分。θ0,θ1表示θ向量的两个维度。

    在上面提到梯度下降法的第一步是给θ给一个初值,假设随机给的初值是在图上的十字点。

    然后我们将θ按照梯度下降的方向进行调整,就会使得J(θ)往更低的方向进行变化,如图所示,算法的结束将是在θ下降到无法继续下降为止。

image     当然,可能梯度下降的最终点并非是全局最小点,可能是一个局部最小点,可能是下面的情况:

image

   上面这张图就是描述的一个局部最小点,这是我们重新选择了一个初始点得到的,看来我们这个算法将会在很大的程度上被初始点的选择影响而陷入局部最小点  

   下面我将用一个例子描述一下梯度减少的过程,对于我们的函数J(θ)求偏导J:(求导的过程如果不明白,可以温习一下微积分)

  image

    下面是更新的过程,也就是θi会向着梯度最小的方向进行减少。θi表示更新之前的值,-后面的部分表示按梯度方向减少的量,α表示步长,也就是每次按照梯度减少的方向变化多少。

image     一个很重要的地方值得注意的是,梯度是有方向的,对于一个向量θ,每一维分量θi都可以求出一个梯度的方向,我们就可以找到一个整体的方向,在变化的时候,我们就朝着下降最多的方向进行变化就可以达到一个最小点,不管它是局部的还是全局的。

    用更简单的数学语言进行描述步骤2)是这样的:

  image    倒三角形表示梯度,按这种方式来表示,θi就不见了,看看用好向量和矩阵,真的会大大的简化数学的描述啊。

总结与预告:

    本文中的内容主要取自stanford的课程第二集,希望我把意思表达清楚了:)本系列的下一篇文章也将会取自stanford课程的第三集,下一次将会深入的讲讲回归、logistic回归、和Newton法,不过本系列并不希望做成stanford课程的笔记版,再往后面就不一定完全与stanford课程保持一致了。


0 0
原创粉丝点击