机器学习

是什么?

有监督学习

在一个有监督的学习任务中,数据样本将包含一个目标属性 yy,也就是所谓的真值(ground truth)。我们的任务是通过学习得到一个函数 F,它接受非目标属性 X,并输出一个接近目标属性的值,即 F(X) \approx yF(X)≈y。目标属性 yy 就像指导学习任务的教师,因为它提供了一个关于学习结果的基准。所以,这项任务被称为有监督学习。

在 Iris 数据集中,类别属性(鸢尾花的类别)可以作为目标属性。具有目标属性的数据通常称为 “标记” 数据(labeled data)。基于上述定义,,可以看出用标记数据预测鸢尾花的种类的任务是一个有监督的学习任务。

无监督学习

无监督学习
与有监督的学习任务相反,我们在无监督的学习任务中没有设置真值。人们期望从数据中学习潜在的模式或规则,而不以预先定义的真值作为基准。

人们可能会问,如果没有来自真值的监督,我们还能学到什么吗?答案是肯定的。以下是一些无监督学习任务的示例:

聚类(Clustering):给定一个数据集,可以根据数据集中样本之间的相似性,将样本聚集成组。例如,样本可以是一个客户档案,具有诸如客户购买的商品数量、客户在购物网站上花费的时间等属性。根据这些属性的相似性,可以将客户档案分组。对于聚集的群体,可以针对每个群体设计特定的商业活动,这可能有助于吸引和留住客户。
关联(Association):给定一个数据集,关联任务是发现样本属性之间隐藏的关联模式。例如,样本可以是客户的购物车,其中样本的每个属性都是商品。通过查看购物车,人们可能会发现,买啤酒的顾客通常也会买尿布,也就是说,购物车里的啤酒和尿布之间有很强的联系。有了这种学习而来的洞察力,超市可以将那些紧密相关的商品重新排列到相邻近的角落,以促进这一种或那一种商品的销售。

半监督学习

在数据集很大,但标记样本很少的情况下,可以找到同时具备有监督和无监督学习的应用。我们可以将这样的任务称为半监督学习(semi-supervised learning)。

在许多情况下,收集大量标记的数据是非常耗时和昂贵的,这通常需要人工进行操作。斯坦福大学的一个研究团队花了两年半的时间来策划著名的 “ImageNet”,它包含了数以百万计的图像带有成千上万个手动标记的类别。因此,更普遍的情况是,我们有大量的数据,但只有很少一部分被准确地 “标记”,例如视频可能没有类别甚至标题。

通过将有监督和无监督的学习结合在一个只有少量标记的数据集中,人们可以更好地利用数据集,并获得比单独应用它们更好的结果。

例如,人们想要预测图像的分类,但只对图像的 10 %10% 进行了标记。通过有监督的学习,我们用有标记的数据训练一个模型,然后用该模型来预测未标记的数据,但是我们很难相信这个模型是足够普遍的,毕竟我们只用少量的数据就完成了学习。一种更好的策略是首先将图像聚类成组(无监督学习),然后对每个组分别应用有监督的学习算法。第一阶段的无监督学习可以帮助我们缩小学习的范围,第二阶段的有监督学习可以获得更好的精度。1

如何做?

数据

从数据出发,我们首先需要确定我们要解决的机器学习问题的类型,即有监督的学习问题还是无监督的机器学习问题。我们规定,如果数据中的一个属性是所需的属性,即目标属性,那么该数据被标记。例如,在判断照片上是否有猫的任务中,数据的目标属性可以是布尔值 [Yes|No]。如果这个目标属性存在,那么我们就说数据被标记了,这是一个简单的学习问题。
对于有监督的机器学习算法,我们根据模型的预期输出进一步确定生成模型的类型:分类或回归,即分类模型的离散值和回归模型的连续值。
一旦我们确定了想要从数据中构建的模型类型,我们就开始执行特征工程(feature engineering),这是一组将数据转换为所需格式的活动。下面给出了几个例子:
对于几乎所有的情况,我们将数据分成两组:训练和测试。在训练模型的过程中使用训练数据集,然后使用测试数据集来测试或验证我们构建的模型是否足够通用,是否可以应用于不可见的数据。
原始数据集通常是不完整的,带有缺失值。因此,可能需要用各种策略来填充这些缺失值,例如用平均值进行填充。
数据集通常包含分类属性,如国家、性别等,通常情况下,由于算法的限制,需要将这些分类字符串值编码为数值。例如,线性回归算法只能处理输入的实值向量。
特征工程的过程无法一蹴而就。通常,在工作流的稍后阶段,您需要反复地回到特征工程上来。

一旦数据准备好,我们就选择一个机器学习算法,并开始向算法输入准备好的训练数据(training data)。这就是我们所说的训练过程(training process)。

一旦我们在训练过程结束后获得了机器学习模型,就需要用保留的测试数据(testing data)对模型进行测试。这就是我们所说的测试过程(testing process)。

初次训练的模型往往无法令人感到满意。此后,我们将再一次回到训练过程,并调整由我们选择的模型公开的一些参数。这就是我们所说的超参数调优(hyper-parameter tuning)。之所以突出 “超(hyper)”,是因为我们调优的参数是我们与模型交互的最外层接口,而这最终会对模型的底层参数造成影响。例如,对于决策树模型,其超参数之一是树的最大高度。一旦在训练之前进行手动设置,它将限制决策树在结束时可以生长的分支和叶的数量,而这些正是决策树模型所包含的基本参数。

可以看到,机器学习工作流所涉及的几个阶段形成了一个以数据为中心的循环过程

现实世界中,在有利的情况下,我们得到的数据可能反映了现实的一部分,而在不利的情况下就可能是一些干扰判断的噪音,在最糟糕的情况下,甚至会与现实相矛盾。不管机器学习算法如何,人们都无法从包含太多噪音或与现实不符的数据中学到任何东西。

拟合问题

对于有监督学习算法,例如分类和回归,通常有两种情况下生成的模型不能很好地拟合数据:欠拟合(underfitting)和过拟合(overfitting)。
机器学习的概念性的总结
有监督学习算法的一个重要度量是泛化,它衡量从训练数据导出的模型对不可见数据的期望属性的预测能力。当我们说一个模型是欠拟合或过拟合时,它意味着该模型没有很好地推广到不可见数据。

一个与训练数据相拟合的模型并不一定意味着它能很好地概括不可见数据。有以下几点原因:1). 训练数据只是我们从现实世界中收集的样本,只代表了现实的一部分。这可能是因为训练数据根本不具有代表性,因此即使模型完全符合训练数据,也不能很好的拟合不可见数据。2). 我们收集的数据不可避免地含有噪音和误差。即便该模型与数据完全吻合,也会错误地捕捉到不期望的噪音和误差,最终导致对不可见数据的预测存在偏差和误差。

在深入欠拟合和过拟合的定义之前,我们将会展示一些能够反映欠拟合和过拟合模型在分类任务中真实情形的示例。

与欠拟合相反,过拟合往往是一个能够适应每一位数据的超复杂模型,但却可能会陷入噪音和误差的陷阱。从上面的图(3)可以看出,虽然模型在训练数据中的分类错误少了,但在不可见数据上更可能出错。

类似地于欠拟合的情况,为了避免过拟合,可以尝试另一种从训练数据集生成更简单的模型的算法。或者更常见的情况是,使用生成过拟合模型的原始算法,但在算法中增加添加了**正则化(regularization)**项,即对过于复杂的模型进行附加处理,从而引导算法在拟合数据的同时生成一个不太复杂的模型。

对于某些 ML 模型,很难(如果不是不可能的话)进行推理。

到目前为止,人们已经了解到 ML 模型存在错误,而且很难逐例纠正错误。也许事情并没有那么糟糕,因为至少我们可以解释它为什么会出错,比如决策树模型。然而,在某些情况下,特别是对于带有神经网络的 ML 模型,我们不能真正对这些模型进行推理,也就是说,很难对模型作出解释,从而识别模型中的关键参数。例如,有一个叫做 ResNet 的最先进的神经网络模型,它在 ImageNetChallenge 中实现了高达 96.43 %96.43% 的精度。ResNet-50 模型由 50 层神经元组成,包括 2560 万个参数。每个参数都有助于模型的最终输出。无论输出是否正确,都是模型背后的数百万个参数共同作用的结果。很难将任何逻辑单独归于每个参数。因此,在偏重模型可解释性的场景中,应该仔细考量应用基于神经网络的 ML 模型的决定。

因此,概括地说,ML不是灵丹妙药,因为它常常无法达到 100 %100% 精确,而且我们不能逐例更正 ML 模型,在某些情况下,我们甚至无法对 ML 模型进行推理。

citation


  1. Fisher,R.A. “The use of multiple measurements in taxonomic problems” Annual Eugenics, 7, Part II, 179-188 (1936) ↩︎

相关文章: