Py学习  »  机器学习算法

机器学习入门-2: 回归

格密链 • 4 年前 • 286 次点击  


回归


假设我们有一些标记过的训练数据。特别是,假设我们有不同房子的价格和它们的平方英尺。如果我们把信息形象化,它看起来是这样的:


每个X代表不同的房子,有不同的价格和面积。
 
我们会发觉有一个规律:随着房子越来越大,就变得越来越贵。我们希望算法找到并使用这种规律来预测房价。
 
仅仅通过直观地观察训练数据,我们就可以看到,在图表中有一条对角线,大多数房屋似乎都落在这条对角线上。
 
我们可以概括这个规律,认为所有的房子是以高概率落在对角线上的数据点集中。例如,房子在下图中绿色X处的概率很高,而在下图中红色X处的概率很低。



现在我们可以进一步归纳,对于任何给定的面积,一栋房子的价值是多少?
 
当然,要得到一个确切的答案是非常困难的。然而,近似的答案更容易得到。为此,我们在数据集群中画一条线,尽可能靠近每个数据点。这条线被称为“预测器”,它根据房子的面积来预测房价。
 
在预测器上的任何一点,以极高的可能性给出该大小房子所对应的价格。从某种意义上说,预测器给出的是给定大小房子的“平均价格”。


预测器不一定是线性的。它可以是任何类型的函数,或模型。可以是二次函数,正弦函数,甚至任意函数都可以。然而,使用最复杂的函数作为预测器并不总是有效。所以不同的问题使用不同的函数会有更好的效果,这取决于程序员来决定使用哪种模型。
 
回顾我们的房价模型,我们可能会问:为什么要把自己限制在一个输入变量上?
 
事实证明,我们可以根据需要考虑尽可能多的信息,比如城市生活成本、条件、建筑材料等等。例如,我们可以把价格与住房的位置和面积的居住成本绘制在一个像这样的图表上,纵轴表示价格,横轴表示面积和生活成本:


在这种情况下,我们可以再次将预测器与数据相匹配。我们不需要在数据中画一条线而是要在数据中画一个平面因为最能预测房价的函数是两个变量的函数。



我们已经看到了一个和两个输入变量的例子,但是许多机器学习应用程序考虑了成百上千的变量。虽然人类很遗憾地不能想象任何高于三维的东西,但我们刚刚学到的原理将适用于这些系统。

预测器

如前所述,有许多不同类型的预测器。
 
在我们的房价例子中,我们使用线性模型来近似我们的数据。线性预测器的数学形式是这样的:


每个x代表一个不同的输入特征,比如面积或生活成本。每个c被称为参数或权重。某个特定的权值越大,模型就越能考虑其对应的特征。
 
例如,面积是一个很好的房价预测器的特征,因此我们的算法应该通过增加与面积相关的系数来充分考虑房价。相反,如果我们的数据包括房子里的电源插座的数量,我们的算法可能会给它一个相对较低的权重,因为插座的数量与房子的价格没有太大的关系。
 
在我们基于面积预测房价的例子中,因为我们只考虑一个变量,所以我们的模型只需要一个输入特征,或者只需要一个x:


这个方程在这种形式下可能更容易辨认:



y(x)是我们的输出,这里是房子的价格,x是我们的特征,这里是房子的大小。c0是y轴截距,表示房子的基本价格。
 
现在的问题是,机器学习算法如何选择c_0和c_1,使直线能最好地预测房价?
 
*这里值得注意的是,系数实际上可以通过一个称为标准方程的矩阵关系非常直接和有效地找到。然而,由于这种方法在处理成百上千个变量时变得不切实际,我们将使用机器学习算法经常使用的方法。

损失函数

决定选择什么参数来最好地近似数据的关键是找到一种方法来描述我们的预测器有多“错误”。我们通过使用损失函数来实现这一点。损失函数接受一行和一组数据,并返回一个称为成本的值。如果这条线很好地逼近了数据,成本就会很低,如果这条线很差地逼近了数据,成本就会很高。
 
最好的预测器将使损失函数的输出最小化,换句话说,它将使成本最小化。为了直观地理解这一点,让我们看看下面的三个预测函数:


预测器a和c并不能很好地拟合数据,而我们的成本函数应该使这两行具有较高的成本。另一方面,预测器b似乎与数据吻合得很好,因此我们的成本函数应该会给它一个非常低的成本。
 
那么成本函数是什么呢?
 
实际上,我们可以使用很多不同类型的成本函数,但在这个例子中,我们将坚持使用一个非常常用的函数,称为均方误差。
 
我们来解释一下均方误差。这里的误差指的是数据点与预测值之间的垂直距离,也就是差值(x_i−y_i)。我们可以使用下面的图来直观地看到误差,其中每个条都是不同的(x_i−y_i)。
 
因此,对于单个数据点(x_i, y_i),其中xi为房屋的面积,y_i为房屋的价格,预测器y(x)的平方误差为:



误差的平方的好处是所有项都是正的。这样我们就可以最小化平方误差。现在我们取所有数据点的均值,或者说平均值来得到均值平方误差:


这里,我们对所有平方误差求和,然后除以N(N是数据点的个数),也就是平方误差的平均值。因此是均方误差。

梯度下降


当我们绘制损失函数(只有两个变量)时,它看起来是这样的:


现在,很明显这个成本函数的最小值在哪里。
 
我们可以目测一下。然而,记住我们只有一个特征——面积。实际上,几乎所有现代机器学习算法的应用程序都不只包含一个特征。在某些情况下,多达数千万的参数被使用。
 
为了找到高维损失函数的最小值,我们将使用一种叫做梯度下降的算法。我们将看到,梯度下降法在二维中有一个非常直观的解释,但是这个算法也可以很容易地推广到任意维数。
 
首先,想象一个球沿着成本函数图滚动。当球滚动时,它总是沿着最陡的路线,最终停在底部。简而言之,这就是梯度下降法
 
我们选择图上的任意一点,找到斜率最大的方向,在这个方向上移动一点点,然后重复。最终,我们必须达到损失函数的最小值。因为那个点是损失函数的最小值,它也是我们画直线时用到的参数。


总结:我学到了什么?


读完这些之后,希望机器学习现在对你们更有意义了。希望它没有你想象的那么复杂。记住,机器学习实际上就是通过训练数据画线。我们决定线的用途,例如分类算法中的决策边界,或者建模真实世界行为的预测器。这些直线又来自于用梯度下降法求一个损失函数的最小值。
 
换句话说,机器学习实际上就是模式识别。ML算法通过训练数据绘制线条来学习模式,然后将它看到的模式归纳为新的数据。这就引出了一个问题,机器学习真的是“学习”吗?谁能说学习不仅仅是模式识别呢?


往期推荐

第2届国际区块链学术会议接受论文

机器学习入门-1: 分类

区块链应用案例2—股市,投票,保险,身份管理,贸易金融

区块链应用案例1—卫生保健,能源产业

如何学习计算机科学? - 4

如何学习计算机科学? - 3

如何学习计算机科学? - 2

如何学习计算机科学? - 1

全国密码算法设计竞赛 第一轮算法评选结果

机器学习的50个最佳免费数据集

匿名数据不可能完全匿名

区块链与机器学习模型共享


欢迎收听“区块链杂谈”节目,国内最有质量的区块链知识分享节目。


◆ ◆ ◆  ◆ 

格密链

专注于区块链上的密码学技术

长按扫码可关注


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/47651
 
286 次点击