本课内容:
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. mac 下 xampp 多域名 多站点 多虚拟主机 配置

    前言:最近用mac工作了,需要搭建个调试前段程序的站点,选了xampp,需求是能同时运行多个站点,多个域名,目录自定义,网上找了好多资料,都感觉有些不符合心意,且复制文确实很多,甚至有些没实践过的在乱 ...

  2. linux之samba与linux权限

    当linux的文件夹或文件为用户或root时,则在window上共享出来的samba是不能进行修改的,当samba设置为 [share]path = /home#available = yes#bro ...

  3. gcc 和g++区别

    gcc和g++都是GNU的一个编译器;这两者的区别:1.从源文件上看,对于文件后缀(扩展名)为.c的test.c文件,gcc会把它看成是C程序,而g++则会把它看成是C++程序;而对于文件后缀(扩展名 ...

  4. BZOJ2171——K凹凸序列

    好吧,我承认是sb题QAQ BZOJ2171弱化版QAQ 这题考试的时候写的我快吐血了QAQ 0.题目大意:给一个序列,你可以随便修改,修改是将一个数+1或-1,一次修改的代价是1,问把这个数修改成x ...

  5. java中的jComBox的基本用法

    jComBox获取选中的字符串 getSelectedItem().toString()返回一个字符串 getSelectedItem()返回一个对象. getSelectedIndex()得到选择值 ...

  6. HDU 4707 DFS

    Problem Description One day, Lin Ji wake up in the morning and found that his pethamster escaped. He ...

  7. 30 GroupSock(Port)——live555源码阅读(四)网络

    30 GroupSock(Port)——live555源码阅读(四)网络 30 GroupSock(Port)——live555源码阅读(四)网络 简介 Port类的定义 Port的构造与全局的 &l ...

  8. 简单的哈希表实现 C语言

    简单的哈希表实现 简单的哈希表实现 原理 哈希表和节点数据结构的定义 初始化和释放哈希表 哈希散列算法 辅助函数strDup 哈希表的插入和修改 哈希表中查找 哈希表元素的移除 哈希表打印 测试一下 ...

  9. Linux内核 TCP/IP、Socket参数调优

    Linux内核 TCP/IP.Socket参数调优 2014-06-06  Harrison....   阅 9611  转 165 转藏到我的图书馆   微信分享:   Doc1: /proc/sy ...

  10. Tomcat 7最大并发连接数的正确修改方法

    这是个很简单的问题,但是搜了一圈,发现大家都写错了.所以这里总结一下: 几乎所有的中文网页都介绍,要修改Tomcat的默认最大并发连接数,应该进行如下设置(实际上这些步骤是错误的): -------- ...