[机器学习笔记] Note3--多变量线性回归

继续是机器学习课程的笔记,这节课介绍的是多变量的线性回归。

多变量线性回归

多维特征

上节课介绍的是单变量的线性回归,这节课则是进一步介绍多变量的线性回归方法。
现在假设在房屋问题中增加更多的特征,例如房间数,楼层等,构成一个含有多个变量的模型,模型中的特征为(x1,x2,,xn).
如下图所示:
这里写图片描述
在增加这么多特征后,需要引入一系列新的注释:

  • n 代表特征的数量
  • x(i)代表第i个训练实例,是特征矩阵中的第i行,是一个向量
  • x(i)j代表特征矩阵中第i行的第j个特征,也是第i个训练实例的第j个特征

所以在如上图中,特征数量n=4,然后x(2)=14163240,这表示的就是图中第二行的数据,也是第二个训练实例的特征,而x(2)3=2,表示的就是第二行第3列的数据。

现在支持多变量的假设h表示为:

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

这个公式中有n+1个参数和n个变量,为了让公式可以简化一些,引入 x0 =1,则公式变为:
hθ(x)=θ0x0+θ1x1+θ2x2++θnxn

此时模型中的参数是一个n+1维的向量,任何一个训练实例也是n+1维的向量,特征矩阵X的维度是 m*(n+1)
此时特征矩阵 x=x0x1x2xn,参数 θ=θ0θ1θ2θn,所以假设 h就可以如下表示:
hθ(x)=θTx

上述公式中的 T表示矩阵转置。

多变量梯度下降

与单变量一样,我们也需要为多变量构建一个代价函数,同样也是一个所有建模误差的平方和,即:

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

目标也是找到让代价函数最小的一系列参数,使用的也是梯度下降法,多变量线性回归的批量梯度下降算法如下所示:

Repeat{

θj:=θjαθjJ(θ0,θ1,,θn)

}

也就是

Repeat{

θj:=θjαθj12mi=1m(hθ(x(i))y(i))2

}

通过求导数后,可以得到

Repeat{

θj:=θjα1mi=1m(hθ(x(i))y(i))x(i)j(θj,forj=0,1,,n)

}

其更新方法如下所示:

θ0:=θ0α1mi=1m(hθ(x(i))y(i))x(i)0θ1:=θ1α1mi=1m(hθ(x(i))y(i))x(i)1θ2:=θ2α1mi=1m(hθ(x(i))y(i))x(i)2

特征缩放

在面对多特征问题的时候,我们要保证这些特征都具有相近的尺度,这将帮助梯度下降算法更快地收敛。

以房价问题为例,假设我们使用两个特征,房屋的尺寸和房间的数量,前者的值是0-2000平方英尺,而后者的值是0-5,以两个参数分别为横纵坐标,绘制代价函数的等高线图,如下图所示,能看出图像会显得很扁,梯度下降算法需要非常多次的迭代才能收敛。
这里写图片描述
解决的方法就是尝试将所有特质的尺度都尽量缩放到1xi1之间。最简单的方法如下所示:

xn=xnμnSnμnSn

学习率

对于梯度下降,我们还需要解决的问题有:

  • 如何判断当前的梯度下降是正常工作,即最终可以收敛;
  • 如何选择一个学习率

对于第一个问题,由于迭代次数会随着模型不同而不同,我们也不能提前预知,但可以通过绘制迭代次数和代价函数的图表来观察算法在何时收敛。如下图所示:
这里写图片描述
由上图所示,当曲线在每次迭代后都是呈下降趋势,那么可以表明梯度下降是正常工作的,然后图中可以看出在迭代次数达到400后,曲线基本是平坦的,可以说明梯度下降法在迭代到这个次数后已经收敛了。

当然也有一些自动测试是否收敛的,例如将代价函数的变化值与某个阈值(如0.001)进行比较。但选择这个阈值是比较困难的,所以通常看上面的图表会更好。

对于第二个问题,如何选择一个学习率。由于梯度下降算法的每次迭代都会受到学习率的影响,如果学习率过小,那么达到收敛需要的迭代次数会非常大;但如果学习率过大,每次迭代可能不会减小代价函数,可能会越过局部最小值导致无法收敛。

通常可以考虑尝试这些学习率α=0.001,0.003,0.01,0.03,0.1,0.3,1,

特征和多项式回归

线性回归并不适用于所有数据,有时需要曲线来适应数据,比如一个二次方模型hθ(x)=θ0+θ1x1+θ2x22,或者三次方模型hθ(x)=θ0+θ1x1+θ2x22+θ3x33
而这就是多项式回归,比如在房屋问题中,我们可以选择3个特征,一个房屋的价格,房屋的面积,房屋的体积,这样就会用到三次方模型,其曲线如下图所示:
这里写图片描述
当然,如果我们希望继续使用线性回归模型,可以令:

x2=x22x3=x33

这样就可以将模型转换为线性回归模型hθ(x)=θ0+θ1x1+θ2x2+θ3x3但是如果使用多项式回归模型,在运行梯度下降算法前,有必要使用特征缩放。

正规方程(Normal Equation)

到目前为止,我们都是使用梯度下降算法来解决线性回归问题,但是对于某些线性回归问题,正规方程方法是更好的解决方案。

正规方程是通过求解下面的方程来找出使得代价函数最小的参数的:

θjJ(θj)=0

假设我们的数据如下所示:
![此处输入图片的描述][1]
然后我们在每行数据都添加一个x0=1,可以得到下列表格数据:
这里写图片描述
那么可以得到我们的训练集特征矩阵X以及训练结果向量y:

X=11112104141615348525332122145403036y=460232315178

则利用正规方法可以得到向量 θ=(XTX)1XTy,其中T代表矩阵转置,上标-1表示矩阵的逆。

注意:对于那些不可逆的矩阵(通常是因为特征之间不独立,如同时包含英尺为单位的尺寸和米为单位的尺寸两个特征,也有可能是因为特征数据量大于训练集的数量),正规方程方法是不能用的。

梯度下降法与正规方程的比较

下面给出梯度下降方法和正规方法的比较:

梯度下降正规方程
需要选择学习率α不需要
需要多次迭代一次运算得到
当特征量n大时也能较好使用如果特征数量n比较大则运算代价大,因为矩阵逆的运算时间复杂度为O(n3),通常来说n小于10000还是可以接受的
适用于各种类型的模型只适用于线性模型,不适合逻辑回归模型等其他模型

小结

本节课内容主要是介绍了多变量的线性回归方法,跟单变量线性回归方法还是比较类型的,只是需要增加多几个变量,同样是使用误差平方和函数作为代价函数,然后也是使用梯度下降算法。但需要注意的是由于是多个变量,每个变量的取值范围可能相差很大,这就需要使用特征缩放,通常是将每个特征缩放到[1,1],然后就是介绍了如何选择学习率以及判断梯度下降是否收敛的问题。

接着就是介绍了多项式回归方法,这是由于线性回归可能对某些数据并不适用,所以需要使用如二次方模型,三次方模型等训练数据,但可以通过变量转换来重新使用线性回归模型,但是需要使用特征缩放方法。

最后就是介绍了一种跟梯度下降方法有同样效果的正规方程方法,主要是通过求解θjJ(θj)=0来得到参数值,并给出两种方法的对比。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/409092.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql主键long_MySQL主键设计

[TOC]在项目过程中遇到一个看似极为基础的问题,但是在深入思考后还是引出了不少问题,觉得有必要把这一学习过程进行记录。MySQL主键设计原则MySQL主键应当是对用户没有意义的。MySQL主键应该是单列的,以便提高连接和筛选操作的效率永远也不要…

linux 常用工具

sqlitebrowser sudo apt-get install sqlitebrowser 转载于:https://www.cnblogs.com/xxhong/archive/2013/03/01/2938585.html

[机器学习笔记] Note4--逻辑回归

继续是机器学习课程的笔记,这节课会介绍逻辑回归。 分类问题 这节课会介绍的是分类问题,其结果是离散值。分类问题的例子有判断电子邮件是否是垃圾邮件;判断肿瘤是良性还是恶性;判断一次金融交易是否是欺诈等等。 首先从二元的…

华为日历怎么显示一月_华为手机日历怎么设置

大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答。设置华为手机日历的方法:1、打开“时钟”,点击右下角的设置;2、点击“日期和时间”;3、关闭“自动确定日期和时间”和“自动确定时区”…

javascript中children和childNodes的区别

javascript中children和childNodes的区别 1、childNodes:它是标准属性,它返回指定元素的子元素集合,包括HTML节点,所有属性,文本节点。 可以通过nodeType来判断是哪种类型的节点,只有当nodeType1时才是元素…

java容器集合类的区别用法_Java容器笔记(二):不同集合实现类的特点与区别...

package java.util包中的Collection相关接口和类如下图:Collection.png仅讨论Java.util包中的常见集合类,不涉及java.util的子包concurrent中的并发集合类。可以这样简单的来对待容器中集合:Collection_common.png1、 List、Set、Queue三个接…

[机器学习笔记]Note5--归一化

继续是机器学习课程的笔记,这节课会介绍归一化的内容。 过拟合问题 这节课会介绍一个在机器学习过程中经常会遇到的问题–过拟合。通常,当我们有非常多的特征,我们可以学习得到的假设可能非常好地适应训练集,即代价函数可能几乎…

学习使用按位取反.

#include <stdio.h>int main(){ /*学习使用按位取反 程序分析&#xff1a;0~1 1~0*/ unsigned int a, b; a3; b~a; printf("\40:the as 1 complement(decimal)is %d\n",b); a~b; printf("\40:the as 1 complement(he…

java 反射 框架_Java 反射,开发框架必备技能

通过反射技术我们将上面的统一资源定位付(URL) 映射到Class 相当于class: newsmethod: listparameter: 2差不多就是下面样子class News{public String list(String catagory_id){......}}我们只需要在框架核心中分析 url 然后调用对应的方法&#xff0c;于此同时将参数传递过去…

combobox的联动练习

老师的项目中&#xff0c;网站右上有四个联动的combobox&#xff0c;今天第一次尝试解决。外观如图&#xff1a; 首先第一次登陆系统时&#xff0c;需要分别载入4个框中的数据。通过easyui-combobox的url 属性请求php返回json数据即可&#xff0c;json中的value是名称&#xff…

[机器学习笔记]Note6--神经网络:表达

继续是机器学习课程的笔记&#xff0c;这节课会介绍神经网络的内容。 非线性假设 在之前的课程中&#xff0c;我们看到使用非线性的多项式能够帮助我们建立更好的分类模型。假设我们有非常多的特征&#xff0c;例如100个变量&#xff0c;我们希望用这100个特征来构建一个非线…

《实用技巧》——让你的网站变成响应式的3个简单步骤

如今&#xff0c;一个网站只在桌面屏幕上好看是远远不够的&#xff0c;同时也要在平板电脑和智能手机中能够良好呈现。响应式的网站是指它能够适应客户端的屏幕尺寸&#xff0c;自动响应客户端尺寸变化。在这篇文章中&#xff0c;我将向您展示如何通过3个简单的步骤轻松地使网站…

hiveserver2 mysql_HiveServer2的配置使用

HiveServer2的配置和使用 hive-site.xml配置 hiveserver2的配置 property name hive.support.concurrency / name description Enable Hives TableLock Manager Service / description value true / value / property property name hive.zookeeper.quorum /HiveServer2的配置和…

[机器学习笔记]Note7--神经网络:学习

继续是机器学习课程的笔记&#xff0c;这节课会继续介绍神经网络的内容&#xff0c;上一节主要是基本的介绍&#xff0c;以及模型表示&#xff0c;而本节会介绍代价函数&#xff0c;反向传播算法等。 神经网络代价函数 首先是有如下一个神经网络&#xff0c;这里将首先介绍一些…

spark插件剔除步骤

spark插件删除步骤当需要删除插件时&#xff0c;1.删除在../target/build/pulgins/**.jar&#xff0c;2.在运行../targer/build/bin/start.bat时&#xff0c;该start.bat文件默认&#xff0c;在C:\Documents and Settings\gty\&#xff08;gty电脑用户名&#xff09;下创建spar…