尿不湿

机器学习快速课程:第一部分 · ML@B

尿不湿 · 2017-01-19翻译 · 309阅读 原文链接

_引言, 回归/分类,成本函数和梯度下降

机器学习(ML)最近受到极大的关注,这样的关注不是没有理由的。它给诸如图像识别,卫生医疗和交通等领域带来了革命性的变化。对机器学习的典型解释大致如下:

“记E为经验,T为任务类,P为效果度量。如果,一个计算机程序对T中的任务,因为引入了经验E,以P度量其效果而有所改进,则称,该程序关于任务T和度量P从经验E处有所习得。”

解释得不太清楚,是吗?本帖子,是关于机器学习一系列教程的第一篇,目的是使得任何一位想学习机器学习的人士不再觉得它遥不可及。我们设计该教程,使你对于机器学习算法如何工作有坚实的理解,同时给予你将之用于你自己项目中的知识。

什么是机器学习

本质上说,机器学习的概念并不难掌握。其实绝大多数的机器学习的算法仅仅关注一件简单的事:划线。特别说来,机器学习是为了对数据“划线”。到底什么意思,我们来看一个简单的例子。

分类

让我们假设你是个有很多苹果和橘子图片的计算机。每张图片,你都能了解水果的颜色和大小,而拟想把这些图片划分成苹果和橘子。很多机器学习的算法,第一步是获得加标签的数据作为训练数据。在本例中,这意味着获得大量的水果图片。这些图片要么标记为苹果,要么标记为橘子。从这些图片中,我们能够抽取颜色和大小的信息然后看看这些信息如何关联到苹果或是橘子。例如,我们的加标签的训练数据看起来类似这样。

这些红色的x是标记为苹果的数据点而橘色的x是标记为橘子的数据点。你可以看到数据中有一个模式。苹果因为大多是红色的,看起来都聚在图的左侧,而橘子由于大多是橘色的,主要集中在图的右侧。我们希望我们的算法能学到这类模式。

对于这个特定的问题,我们的目标市找个算法,在这两个标记过的组中间划一条线,并称之为决策边界。我们的数据最简单的决策边界看起来像这样:

仅仅是一条介于苹果和橘子中间的直线而已。然而,复杂的机器学习算法可能最终会划出类似如下那样复杂的决策边界。

我们假设通过上面的加标签的训练数据而划出的用于分辨苹果橘子的线能对任意的图片分辨出苹果和橘子。换句话说,通过我们从苹果橘子的例子中得到的算法,能够将这一经验推广到用于分辨我们从来没有遇到过的苹果和橘子的图片上来。例如,当我们有一个在下图中用蓝色x表示的水果的图片,我们能根据决策边界将它分类为橘子。

这就是机器学习的力量。我们用一些训练数据,执行一个机器学习的算法找到决策边界然后就将我们学到的东西用于全新的数据上。

当然,分辨苹果橘子是一项平凡的工作。然而,我们可以将这一策略用于更加令人激动的问题上,例如将肿瘤分类为恶性或良性,将电子邮件标记为垃圾邮件或非垃圾邮件,或分析指纹用于安全系统。 这种类型的机器学习,即用于为数据分组而划线,是一个叫做分类的机器学习分支。另一个分支,称为回归,则完全市为了描述数据而划线。

回归

假设我们有一些加标签的训练数据。特别的,假设我们有各种房屋的价格和它们以平方英尺为单位的面积数据。若我们将这些信息可视化,它看起来像这样:

每个X代表不同的房屋的价格和对应的平方英尺数。注意到,尽管这些数据有些波动(换句话说,每个数据点有些分散),但是其中依然有各模式:房子越大,价格越高。我们要我们的算法能找到这个模式,ingredients将之用于已知面积的情况下的房屋价格预测。

直观上,仅仅观察训练数据,我们就能看到图中有一条对角带子,大多数房子都落在其中。我们将这一观点一般化,并说所有房子有很高的概率落在对角的数据簇上。例如,下图中一个房子很高的可能性在绿色的X处,而在红色X处的可能性则很低。

现在,我们可以将之进一步推广并问,任给一个以平方英尺为单位的面积,这个房子值多少钱?当然,要想得到准确答案很难。但是得到近似答案就容易多了。要做到这一点,我们在数据簇中画一条线,尽可能靠近每一个点。这条线,称为预测器。它从房屋的面积预测房屋的价格。 在预测器上的任意数据点,有如此面积的房子有很高的概率有所示的价格。某种意义上,我们说,预测器代表了给定面积的房屋的"平均价格"。

预测器不一定要是线性的。它可以是任意类型的函数,模型。你可以想象到二次函数,正弦函数甚至任意的函数都可以。然而,用最复杂的模型做预测器并不总能奏效;不同的函数对不同的问题更有效,这取决于程序员希望用什么类型的模型。

当我们回顾我们的房价模型时,我们会问:为何我们自我限制为仅仅一个变量?其实我们可以考虑许多我们想要考虑的各种类型的信息,例如所在城市的生活成本、条件以及建材等等。例如,我们可以用纵轴表示房价,两条横轴表示房屋面积和生活成本而将房价和房子所在地的生活成本以及房屋的面积画在同一张图上。

在这种情况下,我们可以重新用数据拟合一个预测器。与我们画一条线来穿过数据不同,由于我们的函数有两个变量,我们必须画一个平面来穿过这些数据。

我们已经看过有一个或两个输入变量的例子了,但很多机器学习的应用会考虑几百甚至上千个变量。虽然人类非常遗憾地不能将超过三维的事物可视化,但是与前述例子相同的很多原理却可以应用于这些系统。

预测器

如前所述,有很多不同类型的预测器。在我们房价的例子里,我们用了一个线性模型来近似数据。线性预测器的数学表达式看起来像这样: f\left( x \right)\; =\; c{n}x{n}\; +\; c{n-1}x{n-1}\; +\; …\; +\; c{1}x{1}\; +\; c_{0}

每个x表示一个不同的输入特性,例如用平方英尺表示的面积或生活成本。每个c则称为参数或权重。一个特定的权重越大,模型考虑其功能就越多。例如,以平方英尺为单位的房屋面积是房价的良好预测器,所以我们的算法应该通过增大与面积关联的系数来给房屋面积更多的考虑。相反,如果我们的数据包括房子里的电源插座数量,由于插座数量与房价没有太大的关系,我们的算法可能会给它一个相对较低的权重。

在我们基于房屋面积的房价预测模型里,由于我们只考虑一个变量,我们的模型只需要一个输入特性或仅仅一个x: y(x)=c_1 x + c_0 该方程用下面的形式表达可能更为人熟知: y=m x + b

y(x)是我们的输出,在本例中则是房价;而x则是我们的特性,在本例中是房屋的面积。c_0是y的截距,用于表示房屋的基础价格。

现在,问题变为:一个机器学习的算法如何选择c_2和c_1使得这条直线可以最好地预测房价。

*值得注意的是,这些系数可以用一个称之为“规范方程”的矩阵关系直接而高效地获得。然而,由于在处理成百上千个变量时这一方法变得不可行,所以我们将用机器学习里常用的算法来计算。

成本函数

要找出近似这些数据最佳的参数的关键点是找到一种方法得以描述我们的预测器到底有多“错”。我们用一个成本函数(或损失函数)来做到这一点。一个成本函数会通过一条直线和一个数据集,计算出一个称之为成本的值。若这条直线很好地近似这些数据,成本将比较低;反之,若该直线近似这些数据不太好,则成本会比较高。

最优的预测器将最小化输出的成本函数,换句话,它将最小化成本。为将之形象化,我们看看下面三个不同的预测器:

预测器ac并没能非常好地拟合数据,由此,我们的成本函数给予这两条直线较高的成本。另一方面,预测器b看起来将数据拟合得非常好,由此,我们的成本函数加给予它一个很低的成本。

100

你可以用上述的模拟试验试试自己的某个成本函数。点击并拖动数据点和直线以移动它们,或者双击以生成新的数据点。

所以成本函数仅仅是什么?其实我们能用很多不同种类的成本函数,不过在本例中,我们则保持使用一个非常常用的称之为均方误差的成本函数。

让我们分解“均方误差”。误差此处表示数据点和预测器之间的垂直距离,或距离(x_i - y_i)。我们可以用下面的图来可视化误差,其中每个不同的条子是不同的(x_i - y_i)。

至此,对于一个单独的点(x_i,y_i),其中x_i是房屋的面积,y_i是房价,预测器y(x)的平方误差是 e=(y(x_i)-y_i)^2

它的一个优点是平方误差始终都是正的。用这种方法,我们可以最小化平方误差。现在我们对所有的数据点计算均值或平均数就得到了均方误差: C=\frac{1}{N}\sum_i (y-y_i)^2

此处,我们把所有的平方误差相加并除以数据点的数量N,即所有平方误差的平均数,也就是均方误差。

梯度下降

当我们将成本函数用图像表示(仅包含两个变量),它看起来有点像这样:

现在,哪里是成本函数的最小处可谓一目了然。我们仅需目测即可。不过不要忘了,我们仅有房屋面积这一个特性。现实中几乎所有的现代机器学习算法使用的变量都远比一个特性来的多。在某些情况下,甚至有上千万个参数。你可以试着画出上千万维空间的图来找找乐子!

所以,为了找到超高维的成本函数,我们用一种叫做梯度下降的算法。我们将很快看到,梯度下降有一个在二维情况下的非常直观的解释,但是该方法可以推广到任何维数的情形。

首先,请想象沿着成本函数的图滚动一个球。在球滚动时,它总是沿着最陡峭的路线并最终到达底部不动。简言之,这就是所谓梯度下降。我们在图上选择任意一个点,找到有最陡斜率的方向,朝那个方向移动一小步,然后重复上面的步骤。最终,我们将达到最小的成本函数。因为这个点是成本函数的最小值,它也是我们绘制直线的参数。

好,我们刚刚学了些什么?

所以在阅读了所有这些之后,希望机器学习现在开始对你更有意义了。而且希望,它不像你曾经想象的那么复杂。记住,机器学习只是画一条线穿过训练数据而已。我们决定这条线的功能,例如在分类算法中作为决策边界或用于对现实世界建模的预测器。而且这条线来自于通过梯度下降方法找出的成本函数的最小值。

换句话说,真正的机器学习就是模式识别。机器学习算法通过画出穿过训练数据的线来学习数据的模式,然后推广模式并用于新数据。但这引出了一个问题,机器学习实际上是“学习”吗?那么,谁说学习不仅仅是模式识别?

检查: Machine Learning Crash Course: Part 2

译者尿不湿尚未开通打赏功能

相关文章