机器学习——单变量线性回归

之前写过一篇关于线性回归的博文,今天就单变量的线性回归做以归纳总结。

  1. 模型表达(Model Representation)
    我们的第一个学习算法是线性回归算法,让我们通过一个例子来开始。这个例子用来预测住房价格,我们使用一个数据集,该数据集包含俄勒冈州波特兰市的住房价格。在这里,我要根据不同房屋尺寸所售出的价格,画出我的数据集:

机器学习——单变量线性回归_第1张图片
我们来看这个数据集,如果你有一个朋友正想出售自己的房子,如果你朋友的房子是1250平方尺大小,你要告诉他们这房子能卖多少钱。 那么,你可以做的一件事就是构建一个模型,也许是条直线。从这个数据模型上来看,也许你可以告诉你的朋友,他大概能以220000美元左右的价格卖掉这个房子,显然这就是监督学习算法的一个例子。
我们了解到之所以这个例子被称作 Supervised Learning ,是因为对于每个数据来说,我们给出了“正确的答案”。而且,更具体来说,这是一个回归问题。回归一词指的是我们根据之前的数据预测出一个准确的输出值。对于这个例子就是价格。
同时,还有另一种最常见的 Supervised Learning 的方式叫做分类问题。更进一步来说,在 Supervised Learning 中我们有一个数据集,这个数据集被称训练集。因此对于房价的例子,我们有一个包含不同房屋价格的训练集,我们的任务就是从这个训练集中学习并预测房屋价格。

现在我们给出经常使用的一些符号定义,如下:
机器学习——单变量线性回归_第2张图片
用 m 来表示训练样本的数目,因此,在这个数据集中如果表中有47行,那么我们就有47组训练样本,m就等于47。
机器学习——单变量线性回归_第3张图片
用小写字母 x 来表示输入变量,往往也被称为特征量,就是用 x 表示输入的特征,并且我们将用 y 来表示输出变量或者目标变量,也就是我的预测结果,也就是上面表格的第二列。

在这里我们要使用 (x, y) 来表示一个训练样本,因此,在这个表格中的单独的一行对应于一个训​​练样本。

为了表示某个特定的训练样本,我们将使用x上标(i)与y上标(i)来表示,并且用这个来表示第 i 个训练样本,所以上标为 i ,注意这不是求幂运算,这个(x(i), y(i)) 括号里的上标 i 只是一个索引,表示我的训练集里的第 i 行。

我们的房屋价格预测就是一个监督学习算法的工作方式,如下图:
机器学习——单变量线性回归_第4张图片
我们可以看到这里有我们的训练集里房屋价格,我们把它喂给我们的学习算法,进而学习得到一个函数,按照惯例,通常表示为小写 h,h 代表 hypothesis(假设), 在此处,h 表示一个函数,其输入是房屋尺寸大小。因此 h 根据输入的 x 值来得出 y 值,y 值对应房子的价格。因此,h 是一个从 x到 y 的函数映射。

大家经常会有这样的疑问:为什么这个函数被称作假设(hypothesis)?你们中有些人可能知道 hypothesis 的意思,从字典或者其它什么方式可以查到。其实在机器学习中,这是一个在早期被用于机器学习的名称,它有点绕口,对某些函数来说这可能不是一个很恰当的名字。例如,对表示从房屋的大小到价格的函数映射,我认为这个词 “hypothesis” 就可能不是最好的名称。但是这是人们在机器学习中使用的标准术语,所以我们不用太纠结人们为什么这么叫它。
当我们在设计学习算法的时候,需要去思考的是怎样得到这个假设 h。例如,对于我们的房价预测问题,我们该如何表达 h ? 一种可能的表达方式为:

在这里插入图片描述

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

那么为什么是一个线性函数呢? 实际上,有时候我们会有更复杂的函数,也许是非线性函数,但是由于线性方程是简单的形式,我们将先从线性方程的例子入手。当然,最终我们将会建立更复杂的模型以及更复杂的学习算法。
梯度下降(Gradient Descent)
现在我们来介绍梯度下降算法,该算法可以将代价函数 J 最小化。梯度下降是很常用的算法,它不仅被用在线性回归上,并且被广泛的应用于机器学习的众多领域中,之后为了解决其他线性回归问题,我们也将使用梯度下降法来最小化其他函数。

在这里,我们有一个函数 J(θ0 ,θ1) ,也许这是一个线性回归的代价函数,也许是一些其他函数,要使其最小化,我们需要用一个算法来最小化函数 J(θ0 ,θ1),事实证明,梯度下降算法可应用于多种多样的函数求解,所以想象一下如果你有一个函数J(θ0, θ1, θ2, …,θn ),你希望可以通过最小化 θ0 到 θn 来最小化此代价函数J(θ0 到θn),用n个θ是为了证明梯度下降算法可以解决更一般的问题。但为了简洁起见,为了简化符号,在接下来的讨论中,我们只用两个参数。
下面就是关于梯度下降的构想。首先我们要做的是对 θ0 和 θ1 进行初始化。实际上,它们到底是什么其实并不重要,但通常的选择是将 θ0 设为0
,同时也将 θ1 也设为0,即将它们都初始化为0。

我们在梯度下降算法中要做的就是不停地一点点地改变 θ0 和 θ1 ,试图通过这种改变使得 J(θ0 ,θ1) 变小,直到我们找到 J(θ0 ,θ1) 的最小值。或许是局部最小值。

让我们通过一些图片来看看梯度下降法是如何工作的,我们在试图让 J(θ0 ,θ1) 最小,注意坐标轴 θ0 和 θ1 在水平轴上,而函数 J(θ0 ,θ1) 在垂直坐标轴上,图形表面高度即是 J(θ0 ,θ1) 的值。我们希望最小化这个函数,因此我们从 θ0 和 θ1 的某个值出发。所以想象一下,对 θ0 和 θ1 赋以某个初值,也就是对应于从这个函数表面上的某个起始点出发,因此不管 θ0 和 θ1 的取值是多少,我将它们初始化为0。但有时你也可把它初始化为其他值。

下图是梯度下降算法的定义:

机器学习——单变量线性回归_第5张图片
注意,在梯度下降算法中,我们需要同时更新 θ0 和 θ1。
机器学习——单变量线性回归_第6张图片
如果学习速率太小,只能这样像小宝宝一样一点点地挪动,去努力接近最低点,这样就需要很多步才能到达最低点。

如果学习速率太大,那么梯度下降法可能会越过最低点,甚至可能无法收敛。实际上,会离最低点越来越远,因此,如果α太大,会导致无法收敛,甚至发散。

机器学习——单变量线性回归_第7张图片
如果你的参数已经处于局部最低点,那么梯度下降法更新其实什么都没做(求导为0),它不会改变参数的值,这也正是你想要的,因为它使你的解始终保持在局部最优点,这也解释了为什么即使学习速率 α 保持不变时,梯度下降也可以收敛到局部最低点。
机器学习——单变量线性回归_第8张图片
梯度下降一步后,新的导数会变小一点点。随着梯度下降法的运行,你移动的幅度会自动变得越来越小,直到最终移动幅度非常小,你会发现已经收敛到局部极小值。

在梯度下降法中,当我们接近局部最低点时,梯度下降法会自动采取更小的幅度。这是因为当我们接近局部最低点时(很显然在局部最低时导数等于零 ),导数值会自动变得越来越小,所以梯度下降将自动采取较小的幅度,这就是梯度下降的做法,所以实际上没有必要再另外减小α。
机器学习——单变量线性回归_第9张图片
实际上,我们刚刚介绍的梯度下降,是“批量梯度下降”,指的是,在梯度下降的每一步中我们都用到了所有的训​​练样本。在梯度下降中,在计算微分求导项时,我们需要进行求和运算,所以在每一个单独的梯度下降中,我们最终都要计算这样一项,这项需要对所有m个训练样本求和。

而事实上,也有其他类型的梯度下降法不是这种"批量"型的,不考虑整个的训练集,而是每次只关注训练集中的一些小的子集。

你可能感兴趣的:(机器学习——单变量线性回归)