[机器学习笔记] Note2--单变量线性回归

继续是机器学习课程的笔记,这节介绍的是单变量线性回归算法,线性回归算法也是一个比较基础的算法。

模型表达

首先是以房屋交易问题为例,假设我们回归问题的训练集如下表所示:

Size in feet2feet2 (x)Price($) in 1000’s (y)
2104462
1416232
1534315
852178

此外我们将使用以下变量来描述这个回归问题:

  • m 代表训练集中实例的数量
  • x 代表特征/输入变量
  • y 代表目标变量/输出变量
  • (x,y) 代表训练集中的实例
  • (x(i),y(i)x(i),y(i)) 代表第i个观察实例
  • h 代表学习算法的解决方案或函数,也成为假设(hypothesis)

下面是一个典型的机器学习过程:
此处输入图片的描述

所以对于房价预测问题,我们是在训练集上执行学习算法,学习到一个假设h,然后将要预测的房屋的尺寸作为输入变量输入给h,而输出结果就是该房屋的交易价格。

这里的h也就是一个模型,是一个从输入变量x都输出变量y的函数映射。它的一种可能的表达式为:

hθ=θ0+θ1xhθ=θ0+θ1x

这个表达式只含有一个特征/输入变量,因此这样的问题叫作 单变量线性回归问题.

代价函数

当我们得到一个模型后,就必须选择合适的参数θ0θ0θ1θ1.在房价问题中,对应的就是直线的斜率和在y轴上的截距。

我们选择的参数决定了我们得到的直线相对于我们的训练集的准确程度,模型所预测的值与训练集中实际值之间的差距就是建模误差(modeling error),如下图所示:
此处输入图片的描述

上图中,hθ(x(i))hθ(x(i))是对第i个输入变量的预测输出值,而y(i)y(i)则是对应的真实值。

因此我们的目标是选择出可以使得建模误差的平方和能够最小的模型参数,也就是min(hθ(x(i))hθ(x(i)) -y(i)y(i))。

这里就使用一个代价函数J(θ0,θ1)=12mmi=1(hθ(x(i))y(i))2J(θ0,θ1)=12m∑i=1m(hθ(x(i))−y(i))2

这里的代价函数也叫做平方误差代价函数,这是最常用的解决回归问题的方法。当然还有其他代价函数,这将在后面提及。

梯度下降

梯度下降是一个用来求函数最小值的算法,我们将使用梯度下降算法来求出代价函数J(θ0,θ1)J(θ0,θ1)的最小值。

思想过程

梯度下降算法的思想如下:

首先,我们有一个代价函数,假设是J(θ0,θ1)J(θ0,θ1),我们的目标是minθ0,θ1J(θ0,θ1)minθ0,θ1J(θ0,θ1)
接下来的做法是:
- 首先是随机选择一个参数的组合(θ0,θ1)(θ0,θ1),视频中说一般是设θ0=0,θ1=0θ0=0,θ1=0;
- 然后是不断改变(θ0,θ1)(θ0,θ1),并计算代价函数,直到一个局部最小值。之所以是局部最小值,是因为我们并没有尝试完所有的参数组合,所以不能确定我们得到的局部最小值是否便是全局最小值,选择不同的初始参数组合,可能会找到不同的局部最小值。

下图是视频中给出的梯度下降法是如何工作的:
此处输入图片的描述

算法公式

下面给出梯度下降算法的公式:

repeat until convergence{

θj:=θjαθjJ(θ0,θ1)(forj=0andj=1)θj:=θj−α∂∂θjJ(θ0,θ1)(forj=0andj=1)

}

也就是在梯度下降中,不断重复上述公式直到收敛,也就是找到局部最小值。其中符号:=是赋值符号的意思。

公式中的αα称为学习率(learning rate),它决定了我们沿着能让代价函数下降程度最大的方向向下迈进的步子有多大。

在梯度下降中,还涉及都一个参数更新的问题,即更新(θ0,θ1)(θ0,θ1),一般我们的做法是同步更新

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

算法详解

在上述公式中θjJ(θ0,θ1)∂∂θjJ(θ0,θ1)是一个偏导数,其含义就是函数J(θ0,θ1)J(θ0,θ1)的斜率,假设我们要求的代价函数J(θ0,θ1)J(θ0,θ1)如下图所示,初始点是图中的红色的点,那么由于在该点上的切线斜率是一个正数,而学习率也是正数,所以更新后的θ1θ1会减小,也就是会向左移动,并靠近局部最小值。
此处输入图片的描述
当然,如果起始点是在上述曲线左侧,其切线斜率则是负值,那么会导致θ1θ1逐渐变大,同样也是靠近局部最小值。

公式中的学习率αα是决定找到局部最小值的快慢,同时也决定了能否找到局部最小值,因为如果取值过大,就可能错过局部最小值,并且可能会导致无法收;但是取值过小,学习的速度就会比较慢。

视频中也提到一个问题,如果初始点就是一个局部最小点,那么由于局部最小值的切线斜率是0,那么会导致参数不变,因为其实已经在局部最小值了。
此外,即使学习率αα是一个固定值,梯度下降法也是可以收敛到一个局部最小值,原因是在接近局部最小值时,θjJ(θ0,θ1)∂∂θjJ(θ0,θ1)会自动变得更小,然后就可以慢慢接近局部最小值,而不需要改变学习率。

应用于线性回归

根据前面内容,我们有
梯度下降算法公式:

repeat until convergence{

θj:=θjαθjJ(θ0,θ1)(forj=0andj=1)θj:=θj−α∂∂θjJ(θ0,θ1)(forj=0andj=1)

}

以及线性回归模型

hθ(x)=θ0+θ1xJ(θ0,θ1)=12mi=1m(hθ(x(i))y(i))2hθ(x)=θ0+θ1xJ(θ0,θ1)=12m∑i=1m(hθ(x(i))−y(i))2

这里的关键就是求解代价函数的导数,即:
θjJ(θ0,θ1)=θj12mmi=1(hθ(x(i))y(i))2∂∂θjJ(θ0,θ1)=∂∂θj12m∑i=1m(hθ(x(i))−y(i))2

进一步,可以得到:

j=0:θ0J(θ0,θ1)=1mi=1m(hθ(x(i))y(i))j=1:θ1J(θ0,θ1)=1mi=1m((hθ(x(i))y(i))xi)j=0:∂∂θ0J(θ0,θ1)=1m∑i=1m(hθ(x(i))−y(i))j=1:∂∂θ1J(θ0,θ1)=1m∑i=1m((hθ(x(i))−y(i))⋅xi)

由此,我们的算法可以改写成:

repeat until convergence{

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

}

最后,在我们给出的梯度下降算法公式实际上是一个叫批量梯度下降(batch gradient descent),即它在每次梯度下降中都是使用整个训练集的数据,所以公式中是带有mi=1∑i=1m,当然也存在其他梯度下降法,在每次梯度下降时考虑部分数据。

小结

这里就介绍完单变量的线性回归方法,对于这个线性回归算法,我的理解是,因为正如开头介绍的经典的机器学习过程,是使用一个学习算法在给定的数据集上学习得到一个模型,然后使用该模型对新的数据进行预测,得到一个预测的结果,所以对于线性回归也是要求解其模型,其实就是我们非常熟悉的直线方程hθ=θ0+θ1xhθ=θ0+θ1x,就是让我们计算得到的直线方程尽可能逼近实际的直线方程,而衡量的标准就是使用代价函数,而在线性回归中,非常常用的是平方和误差函数J(θ0,θ1)=12mmi=1(hθ(x(i))y(i))2J(θ0,θ1)=12m∑i=1m(hθ(x(i))−y(i))2,那么这就把问题变成求解最小的代价函数,也就是求解一对参数θ0,θ1θ0,θ1使得minJ(θ0,θ1)minJ(θ0,θ1),而要得到这对参数,我们就是使用梯度下降方法。梯度下降法也是一个非常常用的方法,包括在神经网络中都会使用到。

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

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

相关文章

css格式化文本

选择字体 font-family: "Times New Roman", Times, serif; 注意:字体名称中包含多个单词要用("")括起来。 字体颜色 color:#cccccc(16进制) color: rgb(0%, 100%, 0%) 或者 color: rbg(0, 255, 0) rgb颜色,百分数表示0-2…

[线性代数]Note 1--方程组的几何解释

这是记录麻省理工学院公开课:线性代数的笔记,网址是麻省理工公开课:线性代数 第一节课说的是有关方程组的几何解释。网址是方程组的几何解释 首先是介绍方程组的几何解释,提出可以用矩阵表示,然后矩阵表示有两种表达方…

linux打印mysql堆栈_第25问:MySQL 崩溃了,打印了一些堆栈信息,怎么读?

问题在 09 问中,我们开启了 coredump 功能,在 MySQL 崩溃时获得了有用的 coredump 信息。那如果没开启 coredump,仅有 error log 中的堆栈信息,我们如何分析有效的信息?实验我们沿用 09 问中的 MySQL 崩溃的场景&#…

winform中treeview控件实现部分节点显示checkbox

用过asp.net的应该知道,要在treeview中实现上述功能可以使用ShowCheckBox 属性指定那些节点显示checkbox哪些不显示,可是winform中的treeview只提供一个ShowCheckBoxes 属性,要么全部节点显示checkbox,要不全部不显示,而指定节点没…

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

继续是机器学习课程的笔记,这节课介绍的是多变量的线性回归。 多变量线性回归 多维特征 上节课介绍的是单变量的线性回归,这节课则是进一步介绍多变量的线性回归方法。 现在假设在房屋问题中增加更多的特征,例如房间数,楼层等…

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;于此同时将参数传递过去…