机器学习从入门到XX(一):线性回归与梯度降低

介绍

什么是机器学习?

有两种定义。Arthur Samuel如此描述机器学习:一个领域的研究,旨在研究,在不进行编程的状况下,让计算机具备学习能力。算法

Tom Mitchell给出了一个更为现代的定义:一个计算机程序从经验E以及评判标准P中学习如何完成任务T,随着E的累积,P获得提高。编程

例如,下棋游戏中:机器学习

  • E:在不少盘棋局中的经验
  • T:下棋任务
  • P:程序赢得下一盘棋的可能性

整体来讲,任何机器学习问题能够分为监督学习(supervised learning)无监督学习(unsupervised learning)函数

监督学习

在监督学习中,给定一个数据集,而且咱们已经知道输出看起来是什么样子的,知道数据和输出之间是存在联系的。学习

监督学习可分为“回归(regression)”“分类(classification)”两种类型的问题。在回归问题中,咱们试图预测连续的结果,换句话说,咱们试图将输入变量映射到某种连续函数。在分类问题中,却试图预测离散结果,换句话说,咱们试图将输入变量映射进离散的类别中。spa

例子1:3d

给定一组关于房子大小的数据,预估出价格。从大小推算价格的函数的输出是连续的,因此这是个回归问题。code

若是换一种问法:“预估房价与指订价格的大小关系”。这个问题就转化为分类问题了,由于咱们试图将房价分为两种离散的类别中(大于或小于)。blog

例子2:游戏

a) 回归:给定一张男性或女性的照片,推算年龄。
b) 分类:给定一张男性或女性的照片,估计他/她是高中生仍是大学生。另外一个分类的例子:银行须要根据跟人信用历史,判断是否要给其贷款。

无监督学习

无监督学习是指在几乎对结果一无所知的状况下,趋近结果。在对输入数据的变量缺乏必要的认识的状况下,从中获取一些结构。经过将数据中变量的关联,将数据进行聚类,从而获取这些结构。无监督学习对于预测结果是没有反馈的。

例如:

聚类:从1,000,000个不一样的基因中,找到某种方式,可以自动将具备某种类似性或关联的基因进行分组,这些变量多是寿命,位置,功能等。

非聚类:“鸡尾酒算法”,可否从嘈杂环境中识别不一样的声音。(例如,在鸡尾酒会上,从混合的声音中区分人声或音乐声)

模型和代价函数

模型表示

这里以监督学习中的房子大小预测房价问题为例。使用$ x^{(i)} $指代输入变量(这里是房屋面积),$ y^{(i)} $指代输出或者咱们须要预测的结果(这里是房屋价格)。元组($ x^{(i)}, y^{(i)} $)是训练用例数据集,m个训练用例$ (x^{(i)},y^{(i)});i=1,...,m $称为训练数据集。注意,上标(i),并无幂运算的功能。咱们也会使用X,表征输入数据集,Y表征输出数据集。

稍微正规的解释一下监督学习是什么。监督学习的目标是,给定一个训练数据集,尝试学习一个函数h: X → Y,使得h(x)成为好的预测y的函数。因为历史缘由,这个h函数称为假设函数(hypothesis),下图说明了这个流程:

clipboard.png

若是咱们要预测的目标值是一个连续值时,例如房价预测问题,咱们称这种机器学习问题为回归(regression)问题;若是y值只在少数的离散值中取值(例如,假设给定面积,预测这是个house仍是apartment),咱们称为分类(classification)问题

代价函数

咱们可使用代价函数(cost function)来衡量假设函数(hypothesis function)的精准性。代价函数实际上计算的就是每个经由假设函数计算而来的y,与实际的y的差值的平均值。当这个差值最小时,假设函数最优。

若是hypothesis function以下:

$$ h(x)=θ_0+θ_1x $$

这是一个线性函数,对于房价预测问题,咱们的最终目的是经过算法,获得一组最优的$ (θ_0,θ_1) $使得对全部的训练集合X(房屋面积),经过h(x)计算获得的Y(房屋价格)与实际的Y误差最小,即拟合度最高。为了衡量h(x)的拟合度,使用代价函数$ J(θ_0,θ_1) $以下:

$$ J(θ_0,θ_1) = {1 \over 2m} {\sum_{i=1}^m(h_θ(x_i)-y_i)^2} $$

经过观察,不难发现,该公式实际计算的是,y的方差的均值。而且这个均值越小,说明拟合度越高。因此算法推导$ (θ_0,θ_1) $的过程,就是求$ J(θ_0,θ_1) $最小值的过程。

直观的看,咱们能够把训练数据集当作散落在一个x-y的二维坐标系中的点,试图找到一条直线(由$ h_θ(x) $定义),穿过这些点。最终的目的是,找到一条这样的一条直线,使得这些点离这条直线的垂直距离最近。理想状态下,这条直线可以穿过全部的点,这时$ J(θ_0,θ_1) $为0。

这个代价函数也称为平法偏差代价函数(Squared error function)均方偏差(Mean squared error)。将均方除以2,是为了梯度降低算法的计算。下图总结了代价函数

clipboard.png

为了更直观的观察代价函数,咱们假设,须要预测的变量只有一个$ θ_1 $,那么h(x)以下:

$$ h(x)=θ_1x $$

这将是一条通过原点的直线。那么容易想到,随着斜率$ θ_1 $的变化,$ J(θ_1) $将呈现出一个以下相似抛物线的造型:

clipboard.png

总能找到一个$ θ_1 $使得$ J(θ_1) $最小。

若是有两个变量$ J(θ_0,θ_1) $:

$$ h(x)=θ_0+θ_1x $$

那么$ J(θ_0,θ_1) $将同时受到两个变量的影响,这将是一个三维的图形:

clipboard.png

所以,咱们总能找到一组$ (θ_0,θ_1) $,使得$ J(θ_0,θ_1) $最小。用三维图观察并不直观,如今咱们引入一种叫contour plot的图。观察上面的三维图,咱们用一个平行于底面的平面穿过曲面,与曲面相交,造成一个相似椭圆的闭环,随着这个平面高度的变化,将产生无数的相似椭圆的闭环,若是将这些椭圆闭环投影到底面,将造成一个相似靶环的图形,就跟下图的右图同样,这称为contour plot

clipboard.png

在同一个环上的点,对应不一样的$ (θ_0,θ_1) $取值,可是他们的$ J(θ_0,θ_1) $是相同的。而靶环的中心点,就是可以使得$ J(θ_0,θ_1) $最小的$ (θ_0,θ_1) $取值:

clipboard.png

梯度降低

如今咱们有了hypothesis function和用于衡量hypothesis function中参数$ (θ_0,θ_1) $取值拟合度的cost function。如今将介绍第一个算法,称为Gradient Descent(梯度降低)。算法的目的是找到一组变量$ (θ_0,θ_1) $,使得他们的代价函数$ J(θ_0,θ_1) $最小。咱们把代价函数假想成以下的三维图,好似有一座座的山头,若是咱们从某个山头的某处出发,往下走,走到最低点,每一步往哪一个方向取决于当前往哪一个方向走最优,咱们可能会走到A点。若是换一个点出发,咱们可能走到B点:

clipboard.png

在决定下一步往哪里走的时候,咱们采起的方式是,找到当前这个点的切线方向(切线即导数),切线方向告诉咱们应该往哪一个方向走;另外一个影响因素是,每一步大小α,这个参数咱们称为learning rate学习速率。单次梯度降低迭代获得的每每是局部最优解,即上图的A,B两点是对于不一样的起始点来讲的最优解。

梯度降低算法描述以下:

重复以下步骤,直到收敛:

$$ θ_j := θ_j - α{∂ \over ∂θ_j}J(θ_0,θ_1), j=0,1 $$

上述公式中的:=表示赋值,而不是数学意义上的判等。上式的迭代过程就是,从初始的$ (θ_0,θ_1) $开始,对于每组$ (θ_0,θ_1) $计算$ J(θ_0,θ_1) $的导数,而后获得新的$ (θ_0,θ_1) $,重复计算,直到$ (θ_0,θ_1) $再也不变化,即收敛。

为了更直观的展现算法,咱们任然假设h(x)只有一个参数$ θ_1 $:

$$ h(x)=θ_1x $$

那么此时的算法能够描述为,重复以下过程直到收敛:

$$ θ_1 := θ_1 - α{∂ \over ∂θ_j}J(θ_1) $$

因为$ J(θ_1) $是关于$ θ_1 $的二次函数,因此$ ∂ \over ∂θ_j $ 表示$ θ_1 $所在点的切线斜率。从下图能够看出,当$ θ_1 $在上升沿时,斜率为正数,这会使得$ θ_1 $在迭代过程当中逐渐减少;当$ θ_1 $在降低沿时,斜率为负数,这会使得$ θ_1 $在迭代过程当中逐渐减增大,总之都是趋近于最低点的$ θ_1 $。

clipboard.png

因此能够看到,算法巧妙的使用导数,让迭代过程自动趋向于正确的方向。

在算法中,$ α $是一个可调参数,当$ α $过小时,每次迭代,$ θ_1 $的变化很小,这样会算法的效率;而当$ α $太大时,每次迭代,$ θ_1 $的变化很大,这有可能会产生震荡,甚至没法收敛:

clipboard.png

理想状况下,$ ∂ \over ∂θ_j $会在最低点,使得斜率为0,此时:

$$ θ_1 := θ_1 − α ∗ 0 $$

这样获得的新的$ θ_1 $不变,这就是收敛。

再考虑有两个变量$ (θ_0,θ_1) $的状况:

$$ h(x)=θ_0+θ_1x $$

前面咱们将本来三维的代价函数,绘制成了contour plot,不难想象,在梯度降低算法的迭代过程当中,$ (θ_0,θ_1) $老是从远离靶心的位置开始,向靠近靶心的位置移动,最终收敛在靶心

clipboard.png

有了直观的认知后,咱们给出Gradient Descent(梯度降低)的推导式,这样可以方便计算机进行计算:

重复以下过程,直到收敛:

$$ θ_0 := θ_0 - α{1 \over m} {\sum_{i=1}^m(h_θ(x_i)-y_i)} $$

$$ θ_1 := θ_1 - α{1 \over m} {\sum_{i=1}^m((h_θ(x_i)-y_i)x_i)} $$

具体的推导过程省略。

相关文章
相关标签/搜索