单变量线性回归
Linear Regression with One Variable
模型表示
让我们通过一个例子来开始:这个例子是预测住房价格的,我们要使用一个数据集,数据集包含俄勒冈州波特兰市的住房价格。在这里,我要根据不同房屋尺寸所售出的价格,画出我的数据集。比方说,如果你朋友的房子是1250平方尺大小,你要告诉他们这房子能卖多少钱。那么**,你可以做的一件事就是构建一个模型,也许是条直线,从这个数据模型上来看,也许你可以告诉你的朋友,他能以大约220000(美元)左右的价格卖掉这个房子。这就是监督学习算法的一个例子。**
它被称作监督学习是因为对于每个数据来说,我们给出了“正确的答案”,即告诉我们:根据我们的数据来说,房子实际的价格是多少,而且,更具体来说,这是一个回归问题。回归一词指的是,我们根据之前的数据预测出一个准确的输出值,对于这个例子就是价格。
更进一步来说,在监督学习中我们有一个数据集,这个数据集被称训练集。用小写的m来表示训练样本的数目。
以之前的房屋交易问题为例,假使我们回归问题的训练集(Training Set)如下表所示:
我们将要用来描述这个回归问题的标记如下:
-
m代表训练集中实例的数量
-
x代表特征/输入变量
-
y代表目标变量/输出变量
-
(x,y)代表训练集中的实例
-
代表第i个观察实例
h代表学习算法的解决方案或函数也称为假设(hypothesis)
这就是一个监督学习算法的工作方式,我们可以看到这里有我们的训练集里房屋价格。我们把它喂给我们的学习算法,通过学习算法输出一个函数,通常表示为小写h表示。 代表hypothesis(假设),表示一个函数,输入是房屋尺寸大小,就像你朋友想出售的房屋,因此h根据输入的x值来得出y值, y值对应房子的价格 因此, h是一个从x到y的函数映射。
那么,对于我们的房价预测问题,我们该如何表达h?
一种可能的表达方式为:,因为只含有一个特征/输入变量,因此这样的问题叫作单变量线性回归问题。
代价函数
我们将定义代价函数的概念,这有助于我们弄清楚如何把最有可能的直线与我们的数据相拟合。如图:
我们现在要做的便是为我们的模型选择合适的参数(parameters) 和 ,在房价问题这个例子中便是直线的斜率和在 y轴上的截距。
我们选择的参数决定了我们得到的直线相对于我们的训练集的准确程度,模型所预测的值与训练集中实际值之间的差距(下图中蓝线所指)就是建模误差(modeling error)。
我们的目标便是选择出可以使得建模误差的平方和能够最小的模型参数。
即使 得代价函数最小。注意观察上图,即假设h上所有点与样本实际点之间的差距尽可能的小
**代价函数也被称作平方误差函数,有时也被称为平方误差代价函数。我们之所以要求出误差的平方和,是因为误差平方代价函数,对于大多数问题,特别是回归问题,都是一个合理的选择。**还有其他的代价函数也能很好地发挥作用,但是平方误差代价函数可能是解决回归问题最常用的手段了。
当然,我们真正需要的是一种有效的算法,能够自动地找出这些使代价函数J取最小值的参数 和
梯度下降
梯度下降是一个用来求函数最小值的算法,我们将使用梯度下降算法来求出代价函数 的最小值。
梯度下降背后的思想是:开始时我们随机选择一个参数的组合,计算代价函数,然后我们寻找下一个能让代价函数值下降最多的参数组合。我们持续这么做直到找到一个局部最小值(local minimum),因为我们并没有尝试完所有的参数组合,所以不能确定我们得到的局部最小值是否便是全局最小值(global minimum),选择不同的初始参数组合,可能会找到不同的局部最小值。
想象一下你正站立在山的这一点上,站立在你想象的公园这座红色山上,在梯度下降算法中,我们要做的就是旋转360度,看看我们的周围,并问自己要在某个方向上,用小碎步尽快下山。这些小碎步需要朝什么方向?如果我们站在山坡上的这一点,你看一下周围,你会发现最佳的下山方向,你再看看周围,然后再一次想想,我应该从什么方向迈着小碎步下山?然后你按照自己的判断又迈出一步,重复上面的步骤,从这个新的点,你环顾四周,并决定从什么方向将会最快下山,然后又迈进了一小步,并依此类推,直到你接近局部最低点的位置。
批量梯度下降
批量梯度下降(batch gradient descent)算法的公式为:
其中是是学习率(learning rate),它决定了我们沿着能让代价函数下降程度最大的方向向下迈出的步子有多大,在批量梯度下降中,我们每一次都同时让所有的参数减去学习速率乘以代价函数的导数。(对代价函数求导)
最开始,不知道到底有多少个可能取值(假设空间无穷大),随便选一个与,使用梯度下降算法不断逼近最接近的值,即不断更新,、,如下图所示
梯度下降的直观理解
梯度下降算法如下:
描述:对赋值,使得按梯度下降最快方向进行,一直迭代下去,最终得到局部最小值。其中是学习率(learning rate),它决定了我们沿着能让代价函数下降程度最大的方向向下迈出的步子有多大。
切线的斜率正好是导数,因此不断更新的值使其不断下降
如果太小了,即我的学习速率太小,结果就是只能这样像小宝宝一样一点点地挪动,去努力接近最低点,这样就需要很多步才能到达最低点,所以如果太小的话,可能会很慢,因为它会一点点挪动,它会需要很多步才能到达全局最低点。
如果太大,那么梯度下降法可能会越过最低点,甚至可能无法收敛,下一次迭代又移动了一大步,越过一次,又越过一次,一次次越过最低点,直到你发现实际上离最低点越来越远,所以,如果太大,它会导致无法收敛,甚至发散。
我们来看一个例子,这是代价函数。
我想找到它的最小值,首先初始化我的梯度下降算法,在那个品红色的点初始化,如果我更新一步梯度下降,也许它会带我到这个点,因为这个点的导数是相当陡的。现在,在这个绿色的点,如果我再更新一步,你会发现我的导数,也即斜率,是没那么陡的。随着我接近最低点,我的导数越来越接近零,所以,梯度下降一步后,新的导数会变小一点点。然后我想再梯度下降一步,在这个绿点,我自然会用一个稍微跟刚才在那个品红点时比,再小一点的一步,到了新的红色点,更接近全局最低点了,因此这点的导数会比在绿点时更小。所以,我再进行一步梯度下降时,我的导数项是更小的,更新的幅度就会更小。所以随着梯度下降法的运行,你移动的幅度会自动变得越来越小,直到最终移动幅度非常小,你会发现,已经收敛到局部极小值。
直观的讲,斜率不断减小,最终求导为0。
回顾一下,在梯度下降法中,当我们接近局部最低点时,梯度下降法会自动采取更小的幅度,这是因为当我们接近局部最低点时,很显然在局部最低时导数等于零,所以当我们接近局部最低时,导数值会自动变得越来越小,所以梯度下降将自动采取较小的幅度,这就是梯度下降的做法。所以实际上没有必要再另外减小。
这就是梯度下降算法,你可以用它来最小化任何代价函数,不只是线性回归中的代价函数。
梯度下降的线性回归
梯度下降算法和线性回归算法比较如图:
使用梯度下降将代价函数收敛到最小,对我们之前的线性回归问题运用梯度下降法,关键在于求出代价函数的导数,即:
也就是说与使用梯度下降不断更新直到代价函数最小
我们刚刚使用的算法,有时也称为批量梯度下降。实际上,在机器学习中,通常不太会给算法起名字,但这个名字”批量梯度下降”,**指的是在梯度下降的每一步中,我们都用到了所有的训练样本,在梯度下降中,在计算微分求导项时,我们需要进行求和运算,所以,在每一个单独的梯度下降中,我们最终都要计算这样一个东西,这个项需要对所有m个训练样本求和。**因此,批量梯度下降法这个名字说明了我们需要考虑所有这一"批"训练样本,而事实上,有时也有其他类型的梯度下降法,不是这种"批量"型的,不考虑整个的训练集,而是每次只关注训练集中的一些小的子集。
总结
单变量线性回归使用直线方程y=ax+b拟合,需要考虑两个参数a与b使代价函数最小得出最佳直线,求代价函数最小可以使用梯度下降不断更新a与b最终收敛到0,求出最佳参数值a与b
线性代数回顾
加法和标量乘法
矩阵的加法:行列数相等的可以加。
例:
矩阵的乘法:每个元素都要乘
组合算法也类似。
矩阵向量乘法
矩阵和向量的乘法如图:m*n的矩阵乘以n*1的向量,得到的是m*1的向量
算法举例:
矩阵乘法
比如说现在有两个矩阵A和B,那么它们的乘积就可以表示为图中所示的形式。
内容来源
[1]. 斯坦福机器学习课程2014.吴恩达