转NG学习笔记2



单变量线性回归

假设我们有下面的房子面积和房价的数据

面积价格
2104460
1416232
1534315
852178

这些已有的数据我们称之为训练集(Training Set)。我们通常使用字母m表示数据集中实例的个数。x表示输入变量(input variable),y表示输出变量(output/target variable)。

(x, y)表示数据集中的一组实例

(x (i) ,y (i) ) (x(i),y(i)) 表示数据集中的第i个实例。例如上表中,(x (2) ,y (2) ) (x(2),y(2))就是第二个实例(1416, 232)

之后我们的算法建立模型,通过训练集的数据,来得到解决方案或者函数h(hypothesis )。

scrn20160330210913

<img class="alignnone size-full wp-image-2468" src="http://7d9rd6.com1.z0.glb.clouddn.com/wp-content/uploads/2016/03/scrn20160330210913.png" alt="scrn20160330210913" width="414" height="344" /></a></p>

先看一下数据集的图

scrn20160330211110

<img class="alignnone size-full wp-image-2469" src="http://7d9rd6.com1.z0.glb.clouddn.com/wp-content/uploads/2016/03/scrn20160330211110.png" alt="scrn20160330211110" width="587" height="269" /></a></p>

线性回归中,我们用一条直线来拟合数据。因此可以令h为

h θ 0 ,θ 1  (x)=θ 0 +θ 1 x hθ0,θ1(x)=θ0+θ1x

其中下标 θ 0 ,θ 1  θ0,θ1 是h函数的参数(parameters),而其自变量是x。在不引起歧义的情况下,下标参数可以省略而写成h(x)。我们的目的是选择合适的参数 ,使预测最准确。

代价函数(cost function)

显然h(x)是关于x的一次函数,它的图形是一条直线。参数不同时,h(x)也会不同。

scrn20160330211346

<img class="alignnone size-full wp-image-2470" src="http://7d9rd6.com1.z0.glb.clouddn.com/wp-content/uploads/2016/03/scrn20160330211346.png" alt="scrn20160330211346" width="795" height="347" /></a></p>

训练集中的点到直线的垂直距离也就是预测值和实际值的差,叫做建模误差(modeling error)。

对第i个训练集实例来说,实际值是 y (i)  y(i),预测值是 h(x (i) ) h(x(i)) 。它们之间的差是

h(x (i) )y (i)  h(x(i))–y(i)

要评估对数据的拟合程度,很自然的想法是把每个实例的误差加起来。为了避免正负抵消,采用平方。还记得吗?我们用m表示训练集中实例个数。

 i=1 m (h(x (i) )y (i) ) 2  ∑i=1m(h(x(i))–y(i))2

再把它除以m(为了表示平均误差),乘以12  12(为了求导后消去)(其实这对于求最值没有影响)。我们得到了代价函数

J(θ 0 ,θ 1 )=12m  i=1 m (h(x (i) )y (i) ) 2  J(θ0,θ1)=12m∑i=1m(h(x(i))–y(i))2

这里的代价函数实际上叫做均方误差(Mean Squared Error, MSE),它可以反映假设h的准确度。

J(θ 0 ,θ 1 ) J(θ0,θ1) 越小,误差就越小。我们现在的任务就是选取θ 0 θ 1  θ0和θ1 ,来使J(θ 0 ,θ 1 ) J(θ0,θ1)最小。

代价函数的直观理解

先看一个简单情况:假设有m=3的训练集 (1,1), (2, 2), (3, 3) ,并且假设h(x)中的 θ 0 =0 θ0=0

这时我们假设

h θ 1  (x)=θ 1 x hθ1(x)=θ1x

代价函数

J(θ 1 )=123  i=1 3 (h θ 1  (x (i) )y i ) 2  J(θ1)=12∗3∑i=13(hθ1(x(i))–yi)2

θ 1 =1 θ1=1 时,误差是0

scrn20160326234356

<img class="alignnone size-full wp-image-2361" src="http://7d9rd6.com1.z0.glb.clouddn.com/wp-content/uploads/2016/03/scrn20160326234356.png" alt="scrn20160326234356" width="912" height="501" /></a></p>

当 θ 1  θ1偏离1的时候,直线或绕原点旋转,无论顺时针还是逆时针,都会导致误差增大

scrn20160326234702

<img class="alignnone size-full wp-image-2362" src="http://7d9rd6.com1.z0.glb.clouddn.com/wp-content/uploads/2016/03/scrn20160326234702.png" alt="scrn20160326234702" width="891" height="503" /></p>

由于取平方,所以误差增大的情况应该是对称的。很容易画出J(θ 1 ) J(θ1)的图形:

scrn20160326234846

<img class="alignnone size-full wp-image-2363" src="http://7d9rd6.com1.z0.glb.clouddn.com/wp-content/uploads/2016/03/scrn20160326234846.png" alt="scrn20160326234846" width="881" height="500" /></a></p>

多维的时候,图形也是类似的:(注意到J关于θ θ是二次的 它总是有局部最优 = 全局最优)

scrn20160327182112

<img class="alignnone size-full wp-image-2365" src="http://7d9rd6.com1.z0.glb.clouddn.com/wp-content/uploads/2016/03/scrn20160327182112.png" alt="scrn20160327182112" width="739" height="425" /></a></p>
梯度下降算法(Gradient Descent)

梯度下降算法是通过不断迭代求最小值的方法,它不仅用于线性回归,还可以用于其他算法。

上面说到我们有了一个代价函数

J(θ 0 ,θ 1 )=12m  i=0 m (h(x (i) )y (i) ) 2  J(θ0,θ1)=12m∑i=0m(h(x(i))–y(i))2

通过梯度下降算法求J最小值的步骤如下:

1. 初始化参数 θ 0 ,θ 1  θ0,θ1

2. 不断改变  θ 0 ,θ 1  θ0,θ1 来缩小 J(θ 0 ,θ 1 ) J(θ0,θ1) ,直到到达一个局部最优值。

scrn20160327182832

<img class="alignnone size-full wp-image-2367" src="http://7d9rd6.com1.z0.glb.clouddn.com/wp-content/uploads/2016/03/scrn20160327182832.png" alt="scrn20160327182832" width="751" height="379" /></a></p>

那么怎么改变参数呢?从算法名字就知道,是使用梯度来改变。根据微积分中梯度的知识,梯度的方向就是函数值增长最快的方向。我们每次朝着反方向走出一步,就可以期望逐渐走到局部最小值点。更新的公式如下:

θ j :=θ j αθ j  J(θ 0 ,θ 1 )(forj=0and1) θj:=θj–α∂∂θjJ(θ0,θ1)(forj=0and1)

注意梯度下降算法中,每更新一次的时候,各个参数要同时更新。例如本例有2个参数θ 0 ,θ 1  θ0,θ1 ,实际代码为

repeat until convergence {

θ 0 :=θ 0 αθ 0  J(θ 0 ,θ 1 ) θ0:=θ0–α∂∂θ0J(θ0,θ1)

θ 1 :=θ 1 αθ 1  J(θ 0 ,θ 1 ) θ1:=θ1−α∂∂θ1J(θ0,θ1)

}

注意花括号内的2条语句要同步改变,如果先改变了θ 0  θ0 ,会导致θ 1  θ1更新时使用了新的θ 0  θ0,这样就不是梯度下降算法了。

应当这样实现

repeat until convergence {

tmp0:=θ 0 αθ 0  J(θ 0 ,θ 1 ) tmp0:=θ0−α∂∂θ0J(θ0,θ1)

tmp1:=θ 1 αθ 1  J(θ 0 ,θ 1 ) tmp1:=θ1−α∂∂θ1J(θ0,θ1)

θ 0 :=tmp0 θ0:=tmp0

θ 1 :=tmp1 θ1:=tmp1

}

此处关键是要求 θ j  J(θ 0 ,θ 1 ) ∂∂θjJ(θ0,θ1)

J(θ 0 ,θ 1 )=12m  i=0 m (h(x (i) )y (i) ) 2  J(θ0,θ1)=12m∑i=0m(h(x(i))–y(i))2

因此

θ j  J(θ 0 ,θ 1 ) ∂∂θjJ(θ0,θ1)

=θ j  12m  i=0 m (h(x (i) )y (i) ) 2  =∂∂θj12m∑i=0m(h(x(i))–y(i))2

=212m  i=0 m ((h(x (i) )y (i) )θ j  (h(x (i) )y (i) )) =2⋅12m∑i=0m((h(x(i))–y(i))⋅∂∂θj(h(x(i))–y(i)))

h是下面的样子

h(x)=θ 0 +θ 1 x h(x)=θ0+θ1x

可以求出后面的偏导数

θ 0  (h(x (i) )y (i) )=1 ∂∂θ0(h(x(i))–y(i))=1

θ 1  (h(x (i) )y (i) )=x ∂∂θ1(h(x(i))–y(i))=x

最终结果:

θ 0  J(θ 0 ,θ 1 )=1m  i=0 m ((h(x (i) )y (i) )) ∂∂θ0J(θ0,θ1)=1m∑i=0m((h(x(i))–y(i)))

θ 0  J(θ 0 ,θ 1 )=1m  i=0 m ((h(x (i) )y (i) )x) ∂∂θ0J(θ0,θ1)=1m∑i=0m((h(x(i))–y(i))⋅x)

最终每次迭代时更新的公式:

θ 0 :=θ 0 α1m  i=0 m ((h(x (i) )y (i) )) θ0:=θ0−α1m∑i=0m((h(x(i))–y(i)))

θ 1 :=θ 1 α1m  i=0 m ((h(x (i) )y (i) )x) θ1:=θ1−α1m∑i=0m((h(x(i))–y(i))⋅x)

多变量线性回归

单变量模型中房价由面积决定。实际上,房价不仅仅由面积决定,还有其他的因素。考虑的因素多余1个时,就要用到多变量模型。

假设我们有如下数据:

面积卧室数目卫生间数目年限价格
21045145460
14163240232
15343230315
8522136178

我们通常用字母n表示变量(特征)个数。本例中n= 4 。

使用x的下标表示第几个特征

x (i) j  xj(i) 表示第i个实例中第j个特征。例如 x (3) 4  x4(3) 表示第3个实例第4个特征,也就是年限30 。

多变量模型下假设h如下:

h (θ 0 ,θ 1 ,,θ n ) =θ 0 +θ 1 x 1 +θ 2 x 2 ++θ n x n  h(θ0,θ1,…,θn)=θ0+θ1x1+θ2x2+…+θnxn

上式中只有θ 0  θ0没有乘x,为了让公式统一,我们假设x 0 =1 x0=1 ,这样就有

h (θ 0 ,θ 1 ,,θ n ) =θ 0 x 0 +θ 1 x 1 +θ 2 x 2 ++θ n x n  h(θ0,θ1,…,θn)=θ0x0+θ1x1+θ2x2+…+θnxn

h(x)= i=0 n (θ i x i ) h(x)=∑i=0n(θixi)

若使用向量表示

θ=⎛ ⎝ ⎜ ⎜ ⎜ θ 0 θ 1 θ n  ⎞ ⎠ ⎟ ⎟ ⎟ ,x=⎛ ⎝ ⎜ ⎜ ⎜ x 0 x 1 x n  ⎞ ⎠ ⎟ ⎟ ⎟  θ=(θ0θ1…θn),x=(x0x1…xn)

则有

h(x)=θ T x h(x)=θTx

多变量模型下代价函数

J(θ 0 ,θ 1 ,,θ n )=12m  i=0 m (h(x (i) )y (i) ) 2  J(θ0,θ1,…,θn)=12m∑i=0m(h(x(i))–y(i))2

梯度下降更新规则(j分别从0到n为一次迭代):

θ j :=θ j αθ j  J(θ 0 ,θ 1 ,,θ n ) θj:=θj–α∂∂θjJ(θ0,θ1,…,θn)

和单变量推导类似,很容易得到最终结果

θ j :=θ j α1m  i=0 m ((h(x (i) )y (i) )x j ) θj:=θj−α1m∑i=0m((h(x(i))–y(i))⋅xj)

特征缩放(Feature Scaling)

特征缩放是为了收敛地更快。多特征的时候,如果特征之间的范围不一致,比如x1的范围是0-1,x2的范围却是0-99999 。这样会导致收敛很慢。通过特征缩放让不同特征尺度大致相同

x n =x n μ n s n   xn=xn–μnsn

μ μ是所有样本的平均值,s n  sn是所有样本的范围差,就是样本中最大的数值减去样本中的最小值。

使用特征缩放后,对新输入的数据要做相同的处理,才能保证预测结果正确。

学习率(Learning Rate)

更新的公式中的α α叫做学习率。它关系到每次更新的步长,如果步长太小,则收敛过程很慢;若步长太大,可能跳过最优点。

多项式回归(POLYNOMIAL REGRESSION)

如果用线性不能很好地拟合数据,可以考虑多项式。例如

h(x)=θ 0 +θ 1 x 1 +θ 2 x 2 2 +θ 3 x 3  h(x)=θ0+θ1x1+θ2x22+θ3x3

有个技巧是令

x 2 =x 2 2  x2=x22

x 3 =x 3 3  x3=x33

这样便转化为线性回归的问题。

正规方程法(NORMAL EQUATION)

该方法不需要和梯度下降算法一样迭代,而是通过数学方法直接求出令J最小的参数值。

θ j  J(θ j )=0 ∂∂θjJ(θj)=0

可以解出

θ=(x T x) 1 x T y θ=(xTx)−1xTy

 

 

 

待续。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值