4.2 机器学习的基本概念
在本节中,我们首先了解一个机器学习任务是如何进行的,分为哪些关键步骤;其次阐述机器学习中的几个重要的术语(样本、特征、目标);最后了解如何根据目标形式对机器学习任务进行分类。
4.2.1 数据集、特征和标签
我们从一个实际问题出发。表4-2是纽约市某餐厅一个月内顾客消费和给予小费的数据,我们希望利用此数据研究顾客用餐给小费的规律。以这个数据集为例,我们先向读者介绍机器学习中的一些基本概念。
表4-2 某餐厅小费支付表
*数据节选自Python Seaborn数据包。原数据包含244个样本,7个变量。
我们通常把表4-2这样的样本数据叫作数据集(dataset),该数据集以结构化的列表形式呈现。数据集由若干样本(instances或examples)组成,每一个样本是一个观测数据的记录(Records),或者叫观测值(Observances),在表格中以行(Row)的形式体现。在机器学习中,一行、一条记录和一个样本的概念可以视为是等价的。在这个情景中,我们关注的是顾客给予小费的情况,小费这一列是我们关注的结果(outcome),我们可以把这个变量称为因变量(dependent variable,也叫函数值),在机器学习领域中通常叫作目标(target)或标签(label),也有人把它称为响应值(response)。以上几个概念可以视为一个意思,在本书中一般用目标来指代这个变量,对应的数据称为标签数据。不同于“小费”,表中其他列表示的变量在这个问题中是用来解释和预测“小费”的,我们把这些变量叫作自变量(independent variables),在机器学习领域通常用特征(Features)这个术语来表示。特征和目标在表中通常以列(column)的形式呈现。整个关系如图4-7所示。
图4-7 特征和目标例子
4.2.2 监督式学习和非监督式学习
并不是所有机器学习任务的数据集都带有标签数据,我们把具有标签数据的学习任务叫作监督式学习(Supervised Learning)。当目标变量是连续型(比如温度、价格)的时候,我们把这类问题叫作回归任务(Regression Task);当目标变量是离散型(例如某种植物是否具有毒性、贷款人是否会违约、员工所属部门类别)的时候,我们遇到的问题则是分类任务(Classification Task)。回归问题和分类问题是监督式学习的两大类型。
有时我们遇到的样本数据并没有标签数据,我们把这个问题叫作非监督式学习(Unsupervised Learning)。非监督式学习虽然没有标签数据,但我们仍然可以挖掘特征数据的信息进行分析,聚类(Clustering)就是其中最常见的一种,它根据样本数据分布的特点将数据分成几个类。我们可以把机器学习任务按图4-8进行分类。
图4-8 机器学习分类
4.2.3 强化学习和迁移学习
强化学习(Reinforcement Learning)是不同于监督式学习和非监督式学习的另一种机器学习方法。在传统机器学习分类中不包括强化学习,而随着强化学习的飞速发展,越来越多的人倾向于把强化学习看作机器学习的第三类方法。
强化学习是基于“行动-反馈”的自我学习机制。所谓反馈,是一种基于行动对学习机的奖励。学习机以最大化奖励为目标,不断改进“行动”,从而适应环境。强化学习与监督式学习的主要区别是,前者是完全靠自己的经历去学习,没有人告知学习机正确的答案,“强化”的信号是对学习机行动的反馈;而后者则是有人在监督学习机。
强化学习就像人类刚出生时探索未知的大自然一样,是自我摸索寻找行为道路的过程。强化学习目前一个火热的应用是在游戏AI中。一个射击游戏的机器人要学会如何躲避敌人子弹,找到最合理的开枪和换子弹时机,这些用传统的机器学习来完成是相当困难的,因为游戏对局是动态的、瞬息万变的,有无数种可能。要用监督式学习“教会”电脑如何进行这些操作,需要训练的过程是漫长而烦琐的。强化学习很好地适应了这一问题。我们需要给电脑一个反馈机制,将“未能躲避子弹”作为惩罚,杀死敌人给予奖赏,剩下的就完全交给电脑去完成。这样电脑就能通过一遍又一遍的行为探索得到一套成熟有效的行动方案。
迁移学习指的是将已经训练好的参数提供给新的模型用作训练。现实中很多机器学习问题是存在相关性的。比如在图像识别中,识别狗和识别哈士奇,虽然具体任务不同,但它们具有相似性,用于识别狗的模型学习到的参数可以分享给识别哈士奇的任务,使得后者可以“从半路开始”,而不是从零开始学习参数,大大减少了学习时间。
迁移学习并不是一种新的机器学习分类,而是一种加快学习的模式。迁移学习在深度学习模型中的应用尤为明显。深度学习的模型庞大复杂,具有极多的参数需要训练。
4.2.4 特征数据类型
• 数值型(numerical),如长度、温度、价格等。
• 分类型(categorical),如性别。
• 文本(text),如姓名、地址等。
• 日期(datetime),如2018-08-26。
4.2.5 训练集、验证集和测试集
在机器学习任务中,我们通常将数据集分成三部分:训练集(Training Set)、验证集(Validation Set)和测试集(Test Set)。下面介绍这三个概念。
• 训练集:用于训练模型,确定模型中的参数。
• 验证集:用于模型的选择和优化。
• 测试集:用于对已经训练好的模型进行评估,评价其表现。
训练集和测试集的概念相对好理解。训练集顾名思义是用来训练的,机器使用训练集来学习样本。而测试集用来检验模型的效果。就像我们在学校学习功课,训练集如同教科书中的题库,测试集相当于考试试卷。我们通过“刷题库”获得知识,从而在考试中取得优异的成绩。
为什么要建立测试集呢?不直接用训练集进行测试的原因是,模型是用训练集进行学习的,倾向于尽可能拟合训练集数据的特性,因此在训练集上的测试效果通常会很好,但在没有见过的数据集上表现效果可能会明显下降,这个现象叫作过拟合(Overfitting)。有关过拟合的概念,后面会详细介绍。模型在没有见过的数据集上取得高准确率比在原训练集上获得好的效果更有说服力。因此,总是要设立测试集。就像只有考试才能最公平地衡量学生对功课的掌握程度一样。
有了训练集和测试集,很多机器学习入门者可能不知道还有验证集这样一个概念。事实上,验证集是用来调参的。为了叙述的流畅性,这里读者可以先将调参理解为调整模型,相关概念会在后续章节介绍并通过具体例子说明。验证集的作用是比较我们所尝试的多个模型,从中选择表现最好的一个。这个任务仅通过测试集其实也能实现,很多人会直接把测试集当作验证集来选择和优化模型,从而将测试集和验证集的概念混为一谈。但严格来说,验证集的单独存在是必要的。测试集用来衡量一个完整建好的模型,意味着这个模型在之前就被认定为已经调整到最优,而这个优化的过程就是通过验证集实现的。如果我们延续上文中对训练集和测试集的比喻,验证集就相当于考前的模拟测试。
4.2.6 机器学习的任务流程
一个完整的任务流程大致可分为如图4-9所示的6个步骤。注意这个流程只是一般的思路,具体问题会有各自的差异和侧重。
图4-9 机器学习任务流程图
一般来说,在“数据导入”上,机器学习算法读入的是像表4-2一样的结构化数据(Structured Data)。在结构化数据中,特征都是以列的形式一条一条展开的。但是在图像识别、语音识别等任务中,原始数据以图片或音频的形式出现,所谓的特征我们是“看不见的”。这个时候,我们需要将这些原始信息转化为结构化的形式。