机器学习(二)梯度下降和正规方程

多维特征

 

目前为止,所讨论的都是单变量/特征的回归模型,也就是在对房价模型进行预测的过程中,只存在一个特征:面积 

下面,将构建一个含有多个变量的模型,来进行多特征回归分析,模型的特征为(x1,x2,...,xn) 

n代表特征的数量 
x(i)代表第i个训练实例,是特征矩阵中的第i行,是一个向量(vector)。 
x(i)j代表矩阵中第i行的第j个特征,也就是第i个训练实例的第j个特征。 
支持多变量的假设h表示为:hθ(x)=θ0+θ1(x1)+θ2(x2)+...+θn(xn) 
在这个公式中,有n+1个参数和n个变量,为了使公式更加简化,引入x0=1 
此时模型的参数是一个n+1维的向量,任何一个训练实例也就是n+1向量,特征矩阵X的维度是m∗(n+1)

多变量梯度下降

与单变量线性回归类似,在多变量线性回归中,我们也构建一个代价函数,则这个代价函数是所有建模误差的平方和,即:J(θ0,θ1,...,θn)=12m∑mi=1(hθ(x(i)−y(i)))2
其中:hθ(x)=θTX=θ0x0+θ1x1+...+θnxn 

引言

 机器学习栏目记录我在学习Machine Learning过程的一些心得笔记,涵盖线性回归、逻辑回归、Softmax回归、神经网络和SVM等等,主要学习资料来自网上的免费课程和一些经典书籍,免费课程例如Standford Andrew Ng老师在Coursera的教程以及UFLDL Tutorial,经典书籍例如《统计学习方法》等,同时也参考了大量网上的相关资料(在后面列出)。 
   
 

前言

 机器学习中的大部分问题都是优化问题,而绝大部分优化问题都可以使用梯度下降法处理,那么搞懂什么是梯度,什么是梯度下降法就非常重要!这是基础中的基础,也是必须掌握的概念! 
 提到梯度,就必须从导数(derivative)、偏导数(partial derivative)和方向导数(directional derivative)讲起,弄清楚这些概念,才能够正确理解为什么在优化问题中使用梯度下降法来优化目标函数,并熟练掌握梯度下降法(Gradient Descent)。

 本文主要记录我在学习机器学习过程中对梯度概念复习的笔记,主要参考《高等数学》《简明微积分》以及维基百科上的资料为主,文章小节安排如下: 
 1)导数 
 2)导数和偏导数 
 3)导数与方向导数 
 4)导数与梯度 
 5)梯度下降法 
 6)参考资料 
 7)结语 
 

导数

 一张图读懂导数与微分: 
 经典的导数与微分示意图 
 这是高数中的一张经典图,如果忘记了导数微分的概念,基本看着这张图就能全部想起来。 
 导数定义如下: 
 导数定义 
 反映的是函数y=f(x)在某一点处沿x轴正方向的变化率。再强调一遍,函数f(x)在x轴上某一点处沿着x轴正方向的变化率/变化趋势。直观地看,也就是在x轴上某一点处,如果f’(x)>0,说明f(x)的函数值在x点沿x轴正方向是趋于增加的;如果f’(x)<0,说明f(x)的函数值在x点沿x轴正方向是趋于减少的。

 这里补充上图中的Δy、dy等符号的意义及关系如下: 
 Δx:x的变化量; 
 dx:x的变化量Δx趋于0时,则记作微元dx; 
 Δy:Δy=f(x0+Δx)-f(x0),是函数的增量; 
 dy:dy=f’(x0)dx,是切线的增量; 
 当Δx→0时,dy与Δy都是无穷小,dy是Δy的主部,即Δy=dy+o(Δx). 
 

导数和偏导数

 偏导数的定义如下: 
 偏导数定义 
 可以看到,导数与偏导数本质是一致的,都是当自变量的变化量趋于0时,函数值的变化量与自变量变化量比值的极限。直观地说,偏导数也就是函数在某一点上沿坐标轴正方向的的变化率。 
 区别在于: 
 导数,指的是一元函数中,函数y=f(x)在某一点处沿x轴正方向的变化率; 
 偏导数,指的是多元函数中,函数y=f(x1,x2,…,xn)在某一点处沿某一坐标轴(x1,x2,…,xn)正方向的变化率。 
 

导数与方向导数:

 方向导数的定义如下: 
 方向导数定义
 在前面导数和偏导数的定义中,均是沿坐标轴正方向讨论函数的变化率。那么当我们讨论函数沿任意方向的变化率时,也就引出了方向导数的定义,即:某一点在某一趋近方向上的导数值。 
 通俗的解释是: 
 我们不仅要知道函数在坐标轴正方向上的变化率(即偏导数),而且还要设法求得函数在其他特定方向上的变化率。而方向导数就是函数在其他特定方向上的变化率。 
 

导数与梯度

 梯度的定义如下: 
 梯度定义 
 梯度的提出只为回答一个问题: 
 函数在变量空间的某一点处,沿着哪一个方向有最大的变化率? 
 梯度定义如下: 
 函数在某一点的梯度是这样一个向量,它的方向与取得最大方向导数的方向一致,而它的模为方向导数的最大值。 
 这里注意三点: 
 1)梯度是一个向量,即有方向有大小; 
 2)梯度的方向是最大方向导数的方向; 
 3)梯度的值是最大方向导数的值。 
 

导数与向量

 提问:导数与偏导数与方向导数是向量么? 
 向量的定义是有方向(direction)有大小(magnitude)的量。 
 从前面的定义可以这样看出,偏导数和方向导数表达的是函数在某一点沿某一方向的变化率,也是具有方向和大小的。因此从这个角度来理解,我们也可以把偏导数和方向导数看作是一个向量,向量的方向就是变化率的方向,向量的模,就是变化率的大小。 
 那么沿着这样一种思路,就可以如下理解梯度: 
 梯度即函数在某一点最大的方向导数,函数沿梯度方向函数有最大的变化率。 
  
 

梯度下降法

 既然在变量空间的某一点处,函数沿梯度方向具有最大的变化率,那么在优化目标函数的时候,自然是沿着负梯度方向去减小函数值,以此达到我们的优化目标。 
 如何沿着负梯度方向减小函数值呢?既然梯度是偏导数的集合,如下: 
 梯度定义 
 同时梯度和偏导数都是向量,那么参考向量运算法则,我们在每个变量轴上减小对应变量值即可,梯度下降法可以描述如下: 
 梯度下降法 
  
 以上就是梯度下降法的由来,大部分的机器学习任务,都可以利用Gradient Descent来进行优化。 
  
 

参考资料

参考书: 
《高等数学》 
《简明微积分》 
参考链接: 
梯度 
https://zh.wikipedia.org/zh-cn/%E5%81%8F%E5%AF%BC%E6%95%B0 
方向导数和梯度 
http://blog.csdn.net/wolenski/article/details/8030654

附: 
维基百科的可用Hosts文件 
http://www.williamlong.info/archives/4456.html 
  
 

结语

 以上就是我在回顾导数、偏导数、梯度等概念时的一些笔记,希望可以为大家提供一些帮助,也欢迎交流讨论,谢谢!

 本文的文字、公式和图形都是笔者根据所学所看的资料经过思考后认真整理和撰写编制的,如有朋友转载,希望可以注明出处:  
 [机器学习] ML重要概念:梯度(Gradient)与梯度下降法(Gradient Descent) 
 http://blog.csdn.net/walilk/article/details/50978864

 

4.3 梯度下降法实践 1-特征缩放

 

对于多维特征问题,只有保证特征具有相似的尺度,梯度下降算法才能更快的收敛。 
以房价为例,假设使用两个特征,房屋的尺寸和房间的数量,尺寸的值为0-2000平方英尺,而房间数量的值则是0-5,以两个参数分别为横纵坐标,绘制代价函数的等高线图: 

由图中可以知道,此时等高线图很扁,梯度下降算法需要使用多次迭代才能收敛,解决的方法就是尝试将所有特征的尺度都尽量缩放到-1到1之间,如右图:xn=xn−μnsn是标准差。

梯度下降法实战 2-学习率

梯度下降算法收敛所需要的迭代次数根据模型的不同而不同,是不能预知的,所以可以通过绘制迭代次数和代价函数的图表来观测算法在何时趋于收敛。 

梯度下降算法的每次迭代都受到学习率的影响,如果学习率α过大,每次迭代可能不会减小代价函数,可能会越过局部最小值导致无法收敛。 梯度下降算法中的学习率(learning rate)很难确定,下面介绍一些寻找的实用技巧。首先看下如何确定你的梯度下降算法正在正常工作:一般是要画出代价函数 和迭代次数之间的图像,如下图所示。如果随着迭代次数的增加不断下降,那么说明梯度下降算法工作的很好,当到达一定迭代次数后基本持平时,说明已经收敛了,可以选取此时的作为参数。一般选取一个数小于,如果下降的幅度小于,则认为收敛了。

4.5 特征和多项式回归


x1=frontage(临街宽度),x2=depth(纵向深度),x=frontage*depth=area(面积),则:hθ(x)=θ0+θ1x 
线性回归并不适用于所有数据,有时我们需要曲线来适应我们的数据,比如一个二次方模型:hθ(x)=θ0+θ1x1+θ2x22+θ3x33 

hθ(x)=θ0+θ1(size)+θ2(size)2 
hθ(x)=θ0+θ1(size)+θ2(size)−−−−−√

4.6 正规方程

 

用矩阵运算可以直接求解出参数。先介绍下什么是normal equation,假设一个数据集X有m个样本,n个特征。则假设函数为: ,数据集X的特征向量表示为:

表示第i个训练样本,表示第i个训练样本的第j个特征。之所以在X中加了第一列全为1,是为了让,若希望假设函数能够拟合Y,则。又因为  ,所以可以通过矩阵运算求出参数

熟悉线性代数的同学应该知道怎么求出参数,但是前提是矩阵X存在逆矩阵首先矩阵相乘不符合交换律,因为我们知道m*n的矩阵 乘上n*k的矩阵,结果是m*k的矩阵。所以矩阵交换相乘是会导致结果不一样的。矩阵的转置乘以本身是一个对称阵,在求解二次方程时很有用。对于那么AB=BA=E,那么B就是A的逆并且唯一 。所以是方矩阵,只有方阵才有可能存在逆矩阵(不熟悉定理的同学建议去补补线性代数),因此可以通过左乘 使等式变成 ,因此,有同学可能会有疑问不一定存在啊,确实是,但是极少不存在,后面会介绍不存在的处理方法,先别着急。现在你只需要明白为什么就可以了,并且记住。

 

梯度下降正规方程
需要选择学习率α不需要
需要多次迭代一次运算得出
当特征数量n大时也能较好适用需要计算(XTX)−1,通常说当n小于10000时,还是可以接受的
适用于各种类型的模型只适用于线性模型,不适合逻辑回归模型等其他模型

 

只要特征变量的数目并不大,标准方程是一个很好的计算参数 θ 的替代方法。具体地说,只要特征变量数量小于10000,我通常使用标准方程法,而不使用梯度下降法。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值