如前所述,机器学习就是通过建立数学模型来理解数据。当我们赋予机器学习模型调整其 内部参数 的能力时,学习就进入了这个过程;我们可以调整这些参数,以使模型更好地解释数据。在某种意义上,这可以理解为模型从数据中学习。一旦模型掌握了足够多的知识——不管这意味着什么——我们可以要求模型解释新观测到的数据。
一个典型的分类过程,如图2-1所示。
图2-1 一个典型的分类过程
让我们一步一步分解吧!
首先,需要注意的是,总是把机器学习问题分成(至少)两个不同的阶段:
将数据分解成训练集和测试集的重要性不容小觑。我们总是在一个独立的测试集上评估我们的模型,因为我们感兴趣的是我们的模型 对新数据的泛化能力 。最后,无论是机器学习还是人类学习——这难道不是学习的全部意义吗?回忆一下你在学校的时候,那时你还是个学生:在家庭作业中解决的问题,在期末考试中几乎不会以完全相同的形式出现。这同样也应该适用于机器学习模型;我们对模型记忆一组数据点的能力不太感兴趣(比如一道家庭作业题),但是我们想知道模型如何利用所学的知识来解决新问题(比如在期末考试中出现的试题)并解释新的数据点。
通常,高级机器学习问题的工作流程包括一个称为 验证数据集 的第三组数据。目前,这种区分并不重要。通常通过进一步划分训练集形成一个验证集。验证集用于模型选择等高级概念,当我们熟练地构建机器学习系统时,我们将讨论验证集(见第11章)。
接下来要注意的是:机器学习实际上是关于 数据 的。数据以原始形式输入前面描述的工作流程图(不管这意味着什么)并在训练阶段和测试阶段使用。数据可以是从图像和电影到文本文档和音频文件的任何形式。因此,在数据的原始形式中,数据可能由像素、字母、单词,甚至更糟糕的纯比特构成。显而易见,使用这种原始形式的数据可能不太方便。我们必须找到对数据进行 预处理 的方法,以便把数据转换成 易于解析或易于使用的 形式 。
数据预处理分为两个阶段:
一个更高级的主题是创造有用信息特征的过程,即 特征工程 。毕竟,在人们可以选择主流特征之前,必须先有人创造出这些特征。通常,对于算法的成功,特征工程比算法本身的选择更重要。我们将在第4章中全面地讨论特征工程。
不要让命名 约定 把你弄糊涂了!有时,很难区分特征选择和特征提取,这是由命名方式导致的。例如,SURF既表示特征提取又表示特征的实际名称。 尺度不变特征变换 (Scale Invariant Feature Transform,SIFT)也如此,这是一个特征提取器,可以生成 SIFT特征 。可是,这两种算法都申请了专利,不能够用于商业目的。我们不会共享这两种算法的代码。
最后需要说明的一点是:在监督学习中,每个数据点都必须有一个 标签 。标签识别一个数据点属于某一类事物(如猫或狗),或者具有某个特定的值(如房价)。最终,监督学习系统的目标是预测测试集中所有数据点的标签(如图2-1所示)。我们通过使用带标签的数据在训练数据中学习规则,然后在测试集中测试性能来实现这一任务。
因此,要构建一个有效的机器学习系统,我们必须先学习如何加载、存储和操作数据。如何使用OpenCV和Python来实现这个目标呢?