跳到主要内容

机器学习全景 — 三类任务、一张表格与一次完整实验

这一章讲三件事: 机器学习到底指什么、它分哪几类;喂给它的数据长什么样; 以及一次完整的实验从装好工具到得出分数是怎么跑下来的。 这一章是全书的地图:后面 11 章讲的所有做法,全都是往本章这张表格上套的不同套路。 不需要任何基础,遇到的生词都在当场解释。

1. 先把名字捋清楚:人工智能、机器学习、深度学习

这三个词在新闻里经常混着用,但它们不是一回事。原书开篇第一件事就是把包含关系画了出来1:

┌─────────────────────────────┐
│ 人工智能(让机器表现出智能这个大目标) │
│ ┌─────────────────────┐ │
│ │ 机器学习(实现它的一种手段) │ │
│ │ ┌─────────────┐ │ │
│ │ │ 深度学习(其中 │ │ │
│ │ │ 一种具体算法) │ │ │
│ │ └─────────────┘ │ │
│ └─────────────────────┘ │
└─────────────────────────────┘

图说:外圈是目标,内圈是手段。深度学习只是机器学习算法里的一种。

机器学习指的是:计算机根据给定的问题或环境进行学习,并利用学习结果来解决问题的一整套机制2。它是实现人工智能的一种方法——注意「一种」,不是唯一:按人事先定好的规则去做统计预测,同样是实现人工智能的路子,只是近年大家普遍改用了机器学习3

深度学习只是机器学习领域里的一种做法,它在图像识别上成绩惊人,以至于产生了「提起人工智能就是深度学习」的误解4。这本书讲的 17 种做法里,神经网络(把许多简单的计算件一层层接起来、让信号逐层传递的预测器)那一章(我们的第 07 章)才碰到多层世界的门槛,其余 16 种都与它无关。

算法(一套写清楚、可以一步步执行的计算步骤)这个词,本书天天出现。菜谱是做菜的算法,本章讲的是让计算机「从数据里找规律」的算法。

2. 机器学习分三类:给答案、不给答案、给奖励

按输入数据的样式,原书把机器学习分成三类,这一刀切开了全书 17 个算法的去向5:

类别数据里有没有答案全书哪些章
有监督学习有。特征+答案成对出现第 0207 章(算法 19)
无监督学习——只给特征、不给答案没有第 0810 章(算法 1017)
强化学习答案换了个形态:行动后的奖励全书不讲(原书明确说未涉及6)

有监督学习是把答案直接告诉计算机,让它学出一条「从特征猜答案」的路子。比如已有身高、体重数据和对应的性别,喂给计算机学出一个预测器,再来新人的身高体重,它就能猜性别7

无监督学习手里没有答案,只有特征。它做的事是换一种角度呈现数据:或者把数据变形(降维),或者把相似的数据归成堆(聚类)。原书提醒了一句很实在的话:没有答案的结果难以解释,需要分析的人靠经验做主观的解释8——所以用无监督学习,前提是分析者本身得先懂这份数据。

强化学习可以看成有监督学习的变体:答案不直接给,而是以奖励的形式出现。玩主机游戏的例子:玩家(程序)反复玩、看输赢,自己收集「场景─操作─得分」的数据组,越玩越会玩9。原书只用一段带过,本书也照实带过。

3. 喂给机器的数据长什么样:一张二维表格

列是特征,行是数据

机器学习吃的数据,绝大多数时候就是一张表格:每一列记录一种信息,每一行是一条完整的数据10。原书拿一个四人社团举例:姓名、身高、体重、出生日期、性别,五列四行。

要预测性别,性别这一列就叫目标变量(预测的对象,也叫标签);剩下用来做预测的列——身高、体重这些——叫特征值(描述事物特点的原始数据,也叫特征变量)11。这两个名字全书反复出现,先钉死:

姓名 身高(cm) 体重(kg) 出生日期 性别
赵小刚 165 60 1995-10-02 男 ← 目标变量(要预测的)
钱小花 150 45 1996-01-20 女
孙小明 170 70 1995-05-29 男
李小芳 160 50 1995-08-14 女
↑ 特征值(用来预测的)

图说:表格数据来自原书表 1-4。做机器学习第一步永远是分清:
哪几列是特征值,哪一列是目标变量。

答案分两种:类别和数字

目标变量的类型决定了问题的名字。答案是「男/女」「恶性/良性」这种互斥的类别的,叫分类问题;答案是鞋码、房价这种大小有意义的数字的,叫回归问题12。两者最容易混的地方,原书举得很准:把性别数值化成 0 和 1 之后,这两个数字之间没有大小关系——不能说 1 比 0 「大一半」;而鞋码 26.5 cm 和 24 cm 的大小关系是真的,回归问题甚至可能预测出 23.7 cm 这种现实中不存在的尺码13

还有一个前置分类:答案只有两类的叫二元分类,两类以上(比如 10 类)叫多元分类14

无监督学习的数据:同一张表,撕掉答案那列

无监督学习的输入还是这张表,只是目标变量那列不存在。它有两大任务:降维(用更少的列概括原来很多列的信息)和聚类(把相似的数据归成簇)15。本书第 08~10 章的 8 个算法,全在这两类里。

4. 主走查:一次完整的机器学习实验

这一节是全章的主走查,也是全书所有实验的原型。 我们拿原书用的威斯康星州乳腺癌数据集,从载入走到打分,每一步都有具体的数16

① 载入数据
569 条病例,每条 30 个特征值(肿瘤半径、纹理、面积等),
目标变量是诊断结果:恶性(M)212 条,良性(B)357 条。
这是 569 行 × 30 列的特征表 + 569 行的目标列。
↓ 本书只取前 10 列(10 个「平均值」类特征),表格变成 569 × 10
② 选算法,建模型
用逻辑回归(第 03 章讲它)。此时代制只是「初始化」,什么都没学。

③ 训练:fit(X, y)
把 569×10 的特征表和 569 条答案一起交给算法,
算法在内部算出一组可调的数(行话叫参数)。fit 完,它就从一张白纸变成学成的预测器。

④ 预测:predict(X)
把同一份特征表再喂进去,模型逐条给出判断:恶性还是良性。

⑤ 打分:accuracy_score(y, y_pred)
拿预测结果对答案:569 条里判对了 517 条,
正确率 0.9086——也就是 90.86%,约九成。

走一遍就能看清几件事。第一,「训练」指的是上面第 ③ 步:把数据和答案交给算法,让它算出自己内部那组数,而不是「培训」的那个训练;学出来的那台「会猜的机器」,术语就叫模型——拿到新数据就能给出预测17。第二,这套「载入→fit→predict→打分」的节奏是 scikit-learn 这套工具库规定的统一写法,全书 17 个算法全走这个节奏,只是第 ② 步换类名18

但这条走查的终点,埋着全书第一个大坑。 上面那个 0.9086 是拿「训练时用过的同一批数据」打的分——相当于让学生用课上讲过的原题考试。模型可能只是把答案背下来了。原书紧接着警告:评估必须用没参与训练的数据,否则就会碰上过拟合——模型对练过的数据表现很好、对没见过的数据表现很差的现象19。怎么科学地留数据、怎么发现过拟合,第 11 章整章在回答;这里先记住这个坑的存在。

5. 第二个坑:正确率从第一天起就靠不住

乳腺癌数据集有 212 条恶性、357 条良性,两边的量差不多。可换一组数据试试:30~39 岁人群的癌症检测里,真正恶性的只占百分之几。这时一个「把所有人都判成良性」的破模型,正确率也能很高——因为绝大多数人确实是良性20

这就是不均衡数据的问题:目标变量里各类别的数量差得很远时,光看正确率无法判断模型好坏21。原书在第一章就把这个坑摆出来,然后在第 11 章给了整套对策(精确率、召回率、AUC)。第一天的结论只有一句:正确率这个数,先问数据的构成,再决定信多少。

6. 工具链:一晚上能装好的全套家当

原书所有示例代码跑在 Python 3.7 + scikit-learn 0.20.3 上(2019 年 3 月当时的版本)22。这套家当四件套,各管一段:

工具管什么在本书的角色
scikit-learn全部 17 个算法的实现主角。原书称它已成为机器学习领域「事实上的标准库」23
pandas像 Excel 工作表一样的表格数据处理看数据、洗数据。还自带每列统计与列间相关系数的计算24
Matplotlib画图(散点图、直方图、箱形图等)原书反复强调:拿到数据先可视化25
Jupyter Notebook在浏览器里一段一段跑代码、看结果所有实验的操作台26

安装方式原书给了两条路:官方安装程序配 venv 虚拟环境(给不同项目各备一套互不干扰的库版本),或 Anaconda 一体化安装包。原书特别提醒:Anaconda 的 conda install 和 pip install 混着用会破坏开发环境,二者只能选一个27。这部分是操作指南,本书只在方法上借用,细节照原书第 5 章走即可。

顺带一个工作习惯,值得从第一章就学走:原书讲 Matplotlib 时特意分了「两行搞定的简易写法」和「先建对象再逐步设置的严密写法」,并说严密写法虽然要 7 行,但真正画图的核心只有 ax.plot(x1, y1) 一行28——工具里的复杂,大多花在好看上,不在原理上。

7. 作者的判断与证据

说法性质依据
机器学习是实现人工智能的一种方法,不是唯一方法作者的界定性陈述,业界共识书内给出规则预测等反例3
无监督学习的结果难以解释,需主观解释作者的判断,没有给实验证据书内只给了 PCA 成绩单这个正面例子8
「机器学习工作 80% 以上的时间花在数据预处理上」原书明说是「有这样一种说法」的行业经验,不是测量结果书内标注了这是传言口径29
80% 时间做预处理对照:剩下的 20% 才是选算法、训练、评估——所以这本书教的东西只占工作量的两成,这句话值得每个初学者读三遍同上

8. 边界与局限

  • 这本书不教强化学习,原书明说未涉及;深度学习也只到「一层网络」为止,图像识别专用的那些进阶结构一概没讲。
  • 本章所有数据集(鸢尾花、乳腺癌、葡萄酒)都是教科书内置的教学数据,几百到几千行的规模。真实工作的数据采集、清洗、人工打标签的苦活,原书只在专栏里点了一句29
  • 版本时效:scikit-learn 0.20.3、Python 3.7 都是 2019 年的版本;今天照跑大体不误,但个别函数签名(如 sklearn.datasets.samples_generator 的位置)已挪动(补充:不在书里,来自通用知识),以当下官方文档为准。

9. 可带走的

  1. 人工智能 ⊃ 机器学习 ⊃ 深度学习:目标是外圈,手段是内圈,别再混用;
  2. 机器学习三类:有答案=有监督,没答案=无监督,给奖励=强化(本书不讲);
  3. 数据=二维表格,特征值是输入列,目标变量是要预测的那一列;
  4. 答案是类别→分类问题;答案是有大小意义的数→回归问题;性别的 0/1 没大小,鞋码有;
  5. 一次实验五步:载入→建模型→fit→predict→打分,scikit-learn 全书统一这个节奏;
  6. 打分必须用没参与训练的数据——用训练数据打分是自欺,那叫过拟合风险;
  7. 数据不均衡时,正确率会自己说谎;先看各类别占比,再看分数;
  8. 预处理占掉机器学习八成工时(行业说法,非精确测量),选算法只是剩下的两成;
  9. 工具四件套各司其职:scikit-learn 管算法、pandas 管表格、Matplotlib 管画图、Jupyter 管操作台。

10. 原文地图

主题原书章原文位置
AI/机器学习/深度学习包含关系1.1 机器学习概要text/04-ch01-01-1-1.txt:15(搜「实现人工智能的一种方法」) · text/04-ch01-01-1-1.txt:19(搜「其中一种」)
机器学习定义1.1 机器学习概要text/04-ch01-01-1-1.txt:5(搜「利用学习结果解决问题」)
三类学习1.1 机器学习概要text/04-ch01-01-1-1.txt:41(搜「根据不同的输入数据」)
强化学习、本书不涉及1.1 机器学习概要text/04-ch01-01-1-1.txt:205(搜「奖励最大化为目标」)
有监督学习、身高体重猜性别1.1 机器学习概要text/04-ch01-01-1-1.txt:50(搜「将问题的答案告知计算机」)
无监督学习难解释1.1 机器学习概要text/04-ch01-01-1-1.txt:140(搜「主观的解释」)
分类与回归、鞋码1.1 机器学习概要text/04-ch01-01-1-1.txt:91(搜「大小关系则是有」) · text/04-ch01-01-1-1.txt:92(搜「问题就是回归问题」)
二元/多元分类1.1 机器学习概要text/04-ch01-01-1-1.txt:70(搜「分类到两个类别中」)
降维与聚类1.1 机器学习概要text/04-ch01-01-1-1.txt:166(搜「降维是以更少的特征值」)
表格数据、目标变量与特征值1.2 机器学习的步骤text/05-ch01-02-1-2.txt:52(搜「也称为标签或类别标签数据」) · text/05-ch01-02-1-2.txt:54(搜「有时也称为特征变量或输入变量」)
80% 预处理1.2 机器学习的步骤text/05-ch01-02-1-2.txt:19(搜「80%」)
scikit-learn 事实标准1.2 机器学习的步骤text/05-ch01-02-1-2.txt:26(搜「事实上的标准库」)
乳腺癌数据集、212/3571.2 机器学习的步骤text/05-ch01-02-1-2.txt:100(搜「数据 212 条」) · text/05-ch01-02-1-2.txt:152(搜「569 × 30」)
正确率 0.90861.2 机器学习的步骤text/05-ch01-02-1-2.txt:243(搜「0.9086」)
过拟合警告1.2 机器学习的步骤text/05-ch01-02-1-2.txt:247(搜「否则会产生过拟合」)
不均衡数据、全判良性1.2 机器学习的步骤text/05-ch01-02-1-2.txt:255(搜「极不均衡的数据」)
葡萄酒 k-means、规则自动学出1.2 机器学习的步骤text/05-ch01-02-1-2.txt:371(搜「不是由人预先设置的」)
Matplotlib 两种写法1.2 机器学习的步骤text/05-ch01-02-1-2.txt:523(搜「简易方法」)
describe 与相关系数1.2 机器学习的步骤text/05-ch01-02-1-2.txt:770(搜「从上到下依次为行数」)
Python 2 停止维护、版本第5章 环境搭建text/26-ch05.txt:9(搜「2020 年 1 月停止」)
conda 与 pip 冲突第5章 环境搭建text/26-ch05.txt:90(搜「是相互冲突的」)

Footnotes

  1. 出处:「1.1 机器学习概要」第 15 段(text/04-ch01-01-1-1.txt:15,搜「实现人工智能的一种方法」)与第 19 段(text/04-ch01-01-1-1.txt:19,搜「其中一种」)。原书以图 1-2 画了三层包含关系;图本身在文本提取里是乱码,但周边正文把关系讲全了。

  2. 出处:「1.1 机器学习概要」第 5 段(text/04-ch01-01-1-1.txt:5,搜「利用学习结果解决问题」)。原文:「机器学习指的是计算机根据给定的问题、课题或环境进行学习,并利用学习结果解决问题或课题等的一整套机制」。

  3. 出处:「1.1 机器学习概要」第 15 段(text/04-ch01-01-1-1.txt:15,搜「实现人工智能的一种方法」)。原文:实现人工智能「还有很多(方法),比如根据事先定好的规则进行数理统计预测等方法」。 2

  4. 出处:「1.1 机器学习概要」第 19 段(text/04-ch01-01-1-1.txt:19,搜「其中一种」)。

  5. 出处:「1.1 机器学习概要」第 41 段(text/04-ch01-01-1-1.txt:41,搜「根据不同的输入数据」)。分类去向见同文件表 1-1、表 1-3(第 112、184 段)。

  6. 出处:「1.1 机器学习概要」第 205 段(text/04-ch01-01-1-1.txt:205,搜「奖励最大化为目标」)。原文:「本书未涉及强化学习」。

  7. 出处:「1.1 机器学习概要」第 50 段(text/04-ch01-01-1-1.txt:50,搜「将问题的答案告知计算机」)与第 52 段(搜「身高和体重数据」)。

  8. 出处:「1.1 机器学习概要」第 140 段(text/04-ch01-01-1-1.txt:140,搜「主观的解释」)。 2

  9. 出处:「1.1 机器学习概要」第 207 段(text/04-ch01-01-1-1.txt:207,搜「主机游戏」)。

  10. 出处:「1.2 机器学习的步骤」第 33 段(text/05-ch01-02-1-2.txt:33,搜「二维的表格形式的数据」)。

  11. 出处:「1.2 机器学习的步骤」第 52 段(text/05-ch01-02-1-2.txt:52,搜「也称为标签或类别标签数据」)与第 54 段(text/05-ch01-02-1-2.txt:54,搜「有时也称为特征变量或输入变量」)。

  12. 出处:「1.1 机器学习概要」第 72 段(text/04-ch01-01-1-1.txt:72,搜「离散值的问题就是分类问题」)。

  13. 出处:「1.1 机器学习概要」第 91 段(text/04-ch01-01-1-1.txt:91,搜「大小关系则是有」)与第 92 段(text/04-ch01-01-1-1.txt:92,搜「问题就是回归问题」)。

  14. 出处:「1.1 机器学习概要」第 70 段(text/04-ch01-01-1-1.txt:70,搜「分类到两个类别中」)。

  15. 出处:「1.1 机器学习概要」第 166 段(text/04-ch01-01-1-1.txt:166,搜「降维是以更少的特征值」)与第 167 段(搜「聚类是将数据分类为几个簇」)。

  16. 出处:「1.2 机器学习的步骤」第 99 段(text/05-ch01-02-1-2.txt:99,搜「美国威斯康星州乳腺癌数据集」)、第 100 段(搜「数据 212 条」)、第 152 段(搜「569 × 30」)。取前 10 列见第 199 段(搜「缩减到了 10 项」)。

  17. 训练与预测的接口说明见:「1.2 机器学习的步骤」第 223 段(text/05-ch01-02-1-2.txt:223,搜「fit 方法训练模型」)与第 229 段(搜「predict 方法」)。

  18. 出处:「1.2 机器学习的步骤」第 26 段(text/05-ch01-02-1-2.txt:26,搜「两大优点」)。原文给 scikit-learn 的两大优点:「一是操作方法统一;二是易于在 Python 中使用」。

  19. 出处:「1.2 机器学习的步骤」第 247 段(text/05-ch01-02-1-2.txt:247,搜「否则会产生过拟合」)。原书定义过拟合的完整表述在第 248 段:「过拟合是有监督学习的一个严重问题」。

  20. 出处:「1.2 机器学习的步骤」第 255 段(text/05-ch01-02-1-2.txt:255,搜「极不均衡的数据」)与第 256 段(搜「30 岁 ~ 39 岁人群」)。

  21. 出处:「1.2 机器学习的步骤」第 274 段(text/05-ch01-02-1-2.txt:274,搜「光看正确率无法正确评估」)。

  22. 出处:「前言」第 74 段(text/02-fm.txt:74,搜「Python:3.7」);版本时代背景另见「第5章 环境搭建」第 9 段(text/26-ch05.txt:9,搜「2020 年 1 月停止」)。

  23. 出处:「1.2 机器学习的步骤」第 26 段(text/05-ch01-02-1-2.txt:26,搜「事实上的标准库」)。

  24. 出处:「1.2 机器学习的步骤」第 770 段(text/05-ch01-02-1-2.txt:770,搜「从上到下依次为行数」);相关系数见第 726 段(搜「越接近于 1」)。

  25. 出处:「1.2 机器学习的步骤」第 384 段(text/05-ch01-02-1-2.txt:384,搜「把握数据的偏差和特征」);「拿到数据之后,首先应该进行可视化」出自「2.1 算法1:线性回归」第 126 段(text/06-ch02-01-2-1-1.txt:126,搜「首先应该进行可视化」)。

  26. 出处:「1.2 机器学习的步骤」第 398 段(text/05-ch01-02-1-2.txt:398,搜「浏览器上显示数据的可视化结果」)。

  27. 出处:「第5章 环境搭建」第 90 段(text/26-ch05.txt:90,搜「是相互冲突的」);venv 虚拟环境的用途见第 99 段(text/26-ch05.txt:99,搜「多个 Python 运行环境」)。

  28. 出处:「1.2 机器学习的步骤」第 505 段(text/05-ch01-02-1-2.txt:505,搜「主要代码只有」)。

  29. 出处:「1.2 机器学习的步骤」第 19 段(text/05-ch01-02-1-2.txt:19,搜「80%」)。原文:「有这样一种说法:机器学习工作 80% 以上的时间花在了数据预处理上」;采集与人工标注的苦活见同章专栏第 15 段(搜「人工标注答案标签」)。 2