Machine Learning笔记——多变量线性回归

举报
Soler索莱尔HO 发表于 2018/12/06 15:10:19 2018/12/06
【摘要】 1.多变量线回归问题 2.特征缩放 3.正规方程 4.使用octave实现正余弦函数

在之前的单变量线性回归问题中,我们是通过房屋的大小来作为预测房屋价格。但是我们知道了很多其他的变量,例如卧室的数量,楼层的数量,房子的年龄等。

42.png

那么之前的假设函数就会不再之前的函数表达式,取而代之的是:

43.png

下面是重新该写后的假设函数的形式:

44.png

为了简化方便,涉及初始的x_0=1

45.png

以上就是多元线性回归。多元——使用多个特征值或者是变量来预测Y的值。


使用梯度下降法来处理多元线性回归问题

46.png

执行偏导数之后如下:

47.png


梯度下降法的应用实例——特征缩放的方法


特征缩放前后,相对应的代价函数的图形也会随之不同。

48.png

一般地,当我们执行特征缩放的时候,通常的目的是:将特征的取值约束到-1+1的范围内。特征x_0总是等于1,也总是在此范围之内,但对于其他的特征而言,可以通过其他的分数使得它处于同一范围内,特征的值要控制在非常小的范围内。但是不能太小,也不能太大。

49.png

不用过于担心特征是否在完全相同的范围或者是区间内,但是只要它们之间足够接近的话,梯度下降法就会正常地运行。


除了将特征除以最大值以外,在特征缩放中,会使用特征均一化的操作。

50.png

对于α而言,不同的数值造成的图形结构也是不一样的。例如

当α很小的时候,我们可以看到曲线达到一定的迭代次数之后就收敛,或者说找到一个合适的阈值ε也是很困难的,为了检查梯度下降算法是否收敛,可以从图中直接看得出收敛。而不是依靠自动收敛测试。

51.png

一般来说,我们可以从图形中直接可以看得出算法有没有正常地运行。例如:α过大,就会出现以下的图形:

52.png

总结:

如果α太小的话,就会遇到收敛速度很慢的问题,如果α太大的话,代价函数T(θ)可能不会在每次迭代都下降。甚至可能会不收敛。也会有一些情况,就是如果学习率α过大,也有可能会出现收敛缓慢,但是代价函数T(θ)并不会在每次迭代之后都下降。但是通常情况下,通常绘制T(θ)随迭代步数变化的曲线。


继续拿预测房价为例,除了之前的特征之外,还有其他新的特征值

53.png

多项式回归的问题

例如:我们有如下图所示预测房子的价格的数据集,可能会有多个不同的模型用于拟合。选择之一就是二次模型,因为直线似乎并不能很好地去拟合这些数据。然而二次函数最终会下降,为了能够拟合数据集的变化,会继续使用三次方的函数,这样子就不会下降。

54.png

对于这样子的多元线性回归,做一下简单的修改来实现:

55.png

但是除了三次函数的拟合之外,采用二次函数,我们不希望说因为房子的面积的增加而导致房子的价格还下降。所以就可以使用

56.png


由于根式的图像是上升的,最后趋于平缓状态,也是可以拟合所给的数据集。


正规方程

对于某些线性回归问题,会给我们更好的方式去得到未知参数θ的最优解。

在之前优质使用的方法——梯度下降法中,为了得到最小化代价函数T(θ),会使用迭代算法。通过梯度下降的多次迭代来收敛到全局最小值。

57.png


例如:假设我们有四个训练样本,这四个训练样本就是所有的数据。我们所要做的是在数据集中,加入一列来对应额外的特征变量                                               spacer.gif,取值永远都是1

接下来就是构建一个矩阵Xm*n+1)维矩阵),矩阵X包括了训练样本中的所有数据,也构建一个向量ym维向量)。其中m是训练样本数量,nn+1是特征变量数

58.png

在一般情况下,假设我们有m个训练样本。其中的X称为设计矩阵(designed Matrix)

59.png

为了能够明白下列式子,作了具体的说明:

60.PNG

在Octave或者是MATLAB中,具体的实现方式如下:

Pinv(X’*X)*X’*y

使用了正规方程那我们直接不用特征缩放的方法。

 

至于什么时候正规方程和特征缩放呢?可以根据以下优缺点来判断:

 

假设我们有m个训练样本,n个特征变量

61.png

使用octave绘制正余弦曲线图:

62.png

使用octave的示例代码如下:

t=[0:0.01:0.98];
y1=cos(2*pi*4*t);
plot(t,y1)
y2=sin(2*pi*4*t);
plot(t,y2)


再次绘制了正切函数之后的图像如图所示:

63.png

例如:使用magic函数

A=magic(5)
imagesc(A)

64.png

使用octave程序写控制语句

例如

for i=1 :10 ;
v(i)=2^i ;
end ;
 
indices=1 :10
所以
for i=indices;

 

Reference:

        吴恩达 机器学习课程

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。