本课内容:
1、线性回归
2、梯度下降
3、正规方程组
 
监督学习:告诉算法每个样本的正确答案,学习后的算法对新的输入也能输入正确的答案
 
1、线性回归
问题引入:假设有一房屋销售的数据如下:

引入通用符号:
m =训练样本数
x =输入变量(特征)
y =输出变量(目标变量)
(x,y)—一个样本
ith—第i个训练样本=(x(i),y(i))

本例中:m:数据个数,x:房屋大小,y:价格

 
监督学习过程:
1) 将训练样本提供给学习算法
2)
算法生成一个输出函数(一般用h表示,成为假设)
3)
这个函数接收输入,输出结果。(本例中为,接收房屋面积,输出房价)将x映射到y。
 
如下图所示:

对假设进行线性表示:

通常来说,回归问题有多个输入特征。如上例中,我们还已知房屋的卧室数,即有个第二个特征。即x1表示大小,x2表示卧室数,则可将假设写成:

为了将公式写整洁,定义x0=1,则h可写成:

n=特征数目,θ:参数

选择θ的目的,是使h(x)与y的平方差尽量小。又由于有m个训练样本,需要计算每个样本的平方差,且为了后面求导的方便,乘以1/2,即:我们要做的就是求:min(J(θ))
 
求min(J(θ))的方法有:梯度下降法和正规方程组法
 
2、梯度下降(Gradient Descent)
 
梯度下降是一种搜索算法,基本思想:先给出参数向量一个初始值,比如0向量;不断改变,使得J(θ)不断缩小。
改变的方法:梯度下降
水平坐标轴表示θ0和θ1,垂直坐标表示J(θ)。
假设该三维图为一个三维地表,选择的初始向量的点位于一座“山”上。梯度下降的方法是,你环视一周,寻找下降最快的路径,即为梯度的方向,每次下降一小步,再环视四周,继续下降,以此类推。结果到达一个局部最小值,如下图:
当然,假若初始点选择不同,则结果可能为另一个完全不同的局部最小值,如下图所示:


表明梯度下降的结果依赖于参数的初始值。

 
梯度下降算法的数学表示:


:=为赋值运算符,即表示程序中的的赋值语句。
每一次将θi减去θi对J(θ)求偏导的结果,即沿最陡峭的“山坡”下降
 
假设只有一个训练样本时,将偏导数展开:

代入上式有:


α:学习速度,即决定了你下山时每一步迈多大。设得过小,则收敛时间长,设得过大,可能会在迈步的时候越过最小值。

特别注意:θi必须同步更新,即若假设i=0和i=1;则更新时按如下步骤:

(1)批梯度下降算法:
上述为处理一个训练样本的公式,将其派生成包含m个训练样本的算法,循环下式直至收敛:


复杂度分析:

对于每个θi的每次迭代,即上式所示,时间为O(m)
 
每次迭代(走一步)需要计算n个特征的梯度值,复杂度为O(mn)
 
一般来说,这种二次函数的J(θ)的三维图形为一个碗状,有一个唯一的全局最小值。其等高线为一个套一个的椭圆形,运用梯度下降会快速收敛到圆心。

 尽管α的值是固定的,梯度下降算法也会收敛到局部最小值,其原因是每次减去乘以梯度,但是梯度会越来越小,所以步子会越来越小。
 
 下图为使用梯度下降拟合的上例房屋大小和价格的曲线

检测是否收敛的方法:
1)检测两次迭代θi的改变量,若不再变化,则判定收敛
2)更常用的方法:检验J(θ),若不再变化,判定收敛
 

批梯度下降算法的优点是能找到局部最优解,但是若训练样本m很大的话,其每次迭代都要计算所有样本的偏导数的和,时间过慢,于是采用下述另一种梯度下降方法。

 
(2)随机梯度下降算法(增量梯度下降算法):

如此一来,对每个训练样本都更新一次θi,直至收敛,其速度快于批梯度下降法,因为批梯度下降法每一次更新θi都需要遍历所有样本。即批梯度下降中,走一步为考虑m个样本;随机梯度下降中,走一步只考虑1个样本
每次迭代复杂度为O(n)。当m个样本用完时,继续循环到第1个样本。
 
上述使用了迭代的方法求最小值,实际上对于这类特定的最小二乘回归问题,或者普通最小二乘问题,存在其他方法给出最小值,接下来这种方法可以给出参数向量的解析表达式,如此一来就不需要迭代求解了。
 
3、正规方程组(Normal Equations)

假设我们有m个样本。特征向量的维度为n。因此,可知样本为{(x(1),y(1)), (x(2),y(2)),... ..., (x(m),y(m))},其中对于每一个样本中的x(i),都有x(i)={x1(i), xn(i),... ...,xn(i)}。令 H(θ)=θ0 + θ1x1 +θ2x2 +... + θnxn,则有

若希望H(θ)=Y,则有X · θ = Y

我们先来回忆一下两个概念:单位矩阵 和 矩阵的逆,看看它们有什么性质。

(1)单位矩阵E

AE=EA=A

(2)矩阵的逆A-1

要求:A必须为方阵

性质:AA-1=A-1A=E

再来看看式子 X · θ = Y ;若想求出θ,那么我们需要做一些转换:

step1:先把θ左边的矩阵变成一个方阵。通过乘以XT可以实现,则有

XTX · θ = XTY

step2:把θ左边的部分变成一个单位矩阵,这样就可以让它消失于无形了……

(XTX)-1(XTX) · θ = (XTX)-1XTY

step3:由于(XTX)-1(XTX)=E,因此式子变为

Eθ = (XTX)-1XTY

E可以去掉,因此得到

θ = (XTX)-1XTY

这就是我们所说的Normal Equation了。

Normal Equation VS
Gradient Descent
Normal
Equation 跟 Gradient Descent一样,可以用来求权重向量θ。但它与Gradient
Descent相比,既有优势也有劣势。
优势:
Normal
Equation可以不在意X特征的规模大小。比如,有特征向量X={x1, x2},
其中x1的range为1~2000,而x2的range为1~4,可以看到它们的范围相差了500倍。如果使用Gradient
Descent方法的话,会导致椭圆变得很窄很长,而出现梯度下降困难,甚至无法下降梯度(因为导数乘上步长后可能会冲出椭圆的外面)。但是,如果用Normal
Equation方法的话,就不用担心这个问题了。因为它是纯粹的矩阵算法。
劣势:
相比于Gradient Descent,Normal
Equation需要大量的矩阵运算,特别是求矩阵的逆。在矩阵很大的情况下,会大大增加计算复杂性以及对计算机内存容量的要求。
 
学习Regression问题避免不了梯度问题。之前对梯度概念一直模糊,找了好多博文来读,总算也一知半解。
我对梯度下降法的简单理解
 
(1)为什么在多元函数自变量的研究中引入方向? 
在自变量为一维的情况下,也就是自变量可以视为一个标量,此时,一个实数就可以代表它了,这个时候,如果要改变自变量的值,则其要么减小,要么增加,也就是“非左即右“。所以,说到“
自变量在某个方向上移动 ”这个概念的时候,它并不是十分明显;
而在自变量为n(n≥2)维的情况下,这个概念就有用了起来:假设自变量X为3维的,即每一个X是(x1,
x2,
x3)这样的一个点,其中x1,x2和x3分别是一个实数,即标量。那么,如果要改变X,即将一个点移动到另一个点,你怎么移动?可以选择的方法太多了,例如,我们可以令x1,x2不变,仅使x3改变,也可以令x1,x3不变,仅使x2改变,等等。这些做法也就使得我们有了”
方向
“的概念,因为在3维空间中,一个点移动到另一个点,并不是像一维情况下那样“非左即右”的,而是有“方向”的。在这样的情况下,找到一个合适的”方向“,使得从一个点移动到另一个点的时候,函数值的改变最符合我们预定的要求(例如,函数值要减小到什么程度),就变得十分有必要了。
 
(2)为什么沿梯度的反方向函数值下降最快?
将目标函数f(x)在点xk处泰勒展开:
 
Xk:代表第k个点的自变量(一个向量)。
d:单位方向(一个向量),即|d|=1。
α:步长(一个实数)。
:目标函数在Xk这一点的梯度(一个向量)。
o(α):α的高阶无穷小。
这个数学表达式是用泰勒公式展开得到的,样子有点难看,所以对比一下自变量为一维的情况下的泰勒展开式


就知道多维的情况下的泰勒展开式是怎么回事了。

 
在[1]式中高阶无穷小可以忽略,因此,要使[1]式取到最小值,
应使 取到最小——这是两个向量的点积(数量积),何种情况下其值最小呢?
 
  
 
来看两向量的夹角θ的余弦是如何定义的:
假设向量d与负梯度-gk的夹角为θ,我们便可求出点积的值为:

可见,θ为0时,上式取得最小值。也就是说,d取-gk时,目标函数值下降得最快,这就是称负梯度方向为“最速下降”方向的由来了。
 
一个多元函数的梯度方向是该函数值增加最陡的方向。具体到一元函数中时,梯度方向首先是沿着曲线的切线,然后取切线向上增长的方向为梯度方向。如下图所示。

具体到二元函数或多元函数时,梯度向量为函数值f对每个变量的导数,该向量的方向就是梯度的方向。如下图所示。


图中箭头方向为负梯度方向。

 
THE END!

     

Stanford大学机器学习公开课(二):监督学习应用与梯度下降的更多相关文章

  1. Stanford大学机器学习公开课(四):牛顿法、指数分布族、广义线性模型

    (一)牛顿法解最大似然估计 牛顿方法(Newton's Method)与梯度下降(Gradient Descent)方法的功能一样,都是对解空间进行搜索的方法.其基本思想如下: 对于一个函数f(x), ...

  2. Stanford大学机器学习公开课(三):局部加权回归、最小二乘的概率解释、逻辑回归、感知器算法

    (一)局部加权回归 通常情况下的线性拟合不能很好地预测所有的值,因为它容易导致欠拟合(under fitting).如下图的左图.而多项式拟合能拟合所有数据,但是在预测新样本的时候又会变得很糟糕,因为 ...

  3. Stanford大学机器学习公开课(六):朴素贝叶斯多项式模型、神经网络、SVM初步

    (一)朴素贝叶斯多项式事件模型 在上篇笔记中,那个最基本的NB模型被称为多元伯努利事件模型(Multivariate Bernoulli Event Model,以下简称 NB-MBEM).该模型有多 ...

  4. Stanford大学机器学习公开课(五):生成学习算法、高斯判别、朴素贝叶斯

    (一)生成学习算法 在线性回归和Logistic回归这种类型的学习算法中我们探讨的模型都是p(y|x;θ),即给定x的情况探讨y的条件概率分布.如二分类问题,不管是感知器算法还是逻辑回归算法,都是在解 ...

  5. LR 算法总结--斯坦福大学机器学习公开课学习笔记

    在有监督学习里面有几个逻辑上的重要组成部件[3],初略地分可以分为:模型,参数 和 目标函数.(此部分转自 XGBoost 与 Boosted Tree) 一.模型和参数   模型指给定输入xi如何去 ...

  6. Andrew Ng机器学习公开课笔记 -- 线性回归和梯度下降

    网易公开课,监督学习应用.梯度下降 notes,http://cs229.stanford.edu/notes/cs229-notes1.pdf 线性回归(Linear Regression) 先看个 ...

  7. 【Python】机器学习之单变量线性回归 利用批量梯度下降找到合适的参数值

    [Python]机器学习之单变量线性回归 利用批量梯度下降找到合适的参数值 本题目来自吴恩达机器学习视频. 题目: 你是一个餐厅的老板,你想在其他城市开分店,所以你得到了一些数据(数据在本文最下方), ...

  8. Andrew Ng机器学习公开课笔记 -- 学习理论

    网易公开课,第9,10课 notes,http://cs229.stanford.edu/notes/cs229-notes4.pdf 这章要讨论的问题是,如何去评价和选择学习算法   Bias/va ...

  9. Andrew Ng机器学习公开课笔记 -- 支持向量机

    网易公开课,第6,7,8课 notes,http://cs229.stanford.edu/notes/cs229-notes3.pdf SVM-支持向量机算法概述, 这篇讲的挺好,可以参考   先继 ...

随机推荐

  1. mongodb certification

    又偷懒 也有学到不少东西 这个东西算是小结啦 给2013年的碌碌无为挽回点面子 哈哈~

  2. Codeforces Round #336 Hamming Distance Sum

    题目: http://codeforces.com/contest/608/problem/B 字符串a和字符串b进行比较,以题目中的第一个样例为例,我刚开始的想法是拿01与00.01.11.11从左 ...

  3. 架设WEBIM

    使用openfire+jwchat构建. Openfire 采用Java开发,开源的实时协作(RTC)服务器基于XMPP(Jabber)协议.Openfire安装和使用都非常简单,并利用Web进行管理 ...

  4. php5.3 appache phpstudy win7win8win10下 运行速度慢解决办法

         在部署服务器以及本地测试的时候发现了一个奇怪的现象,运行PHP程序的时候非常慢,起先以为是网速的原因,后经本地测试发现速度依旧非常慢,打开一个页面差不多要用时3秒以上,这肯定是不正常的,因为 ...

  5. django 的模板语言

    1.模版的执行 模版的创建过程,对于模版,其实就是读取模版(其中嵌套着模版标签),然后将 Model 中获取的数据插入到模版中,最后将信息返回给用户. def current_datetime(req ...

  6. bootstrap 响应式布局

    先上点媒体查询css(某个著名的”段子“),跟bootstrap无关: <html> <head> <style> body { background-color: ...

  7. Objective C 快速入门学习四

    类 1.合成存取器方法 @property   成员变量 @synthesize 成员变量 可以让编译器自动合成 设置和获取函数的方法,不用手动生成set成员变量,Get成员变量 @interface ...

  8. Linux查看硬盘型号

    Linux查看硬盘型号 -- :: 分类: 服务器与存储 请先确定服务器是否有配 RAID. 如果有RAID,请通过对应的RAID管理(监控)工具查看,例如LSI的MegaCli: # /opt/Me ...

  9. 新型序列化类库MessagePack,比JSON更快、更小的格式

    MessagePack is an efficient binary serialization format. It lets you exchange data among multiple la ...

  10. 话说好像是这样,ios下面通常用iframe来打开你的scheme地址; Android下通常用location.href来。。。 不过实际情况好像比这个复杂得多。。

    http://js.40017.cn/touch/hb/p/openApp.js/** * Created by wsy10943 on 2015/5/18. */ window._web_publi ...