📄 一句话概括
数据拿到手,第一件事是先看一眼——把点阵画出来人眼确认;因为机器不是在【看形状】,它只是在比 64 个格子有多像。
📝 本节和前面几节的关系
12.4 把数据准备好了,这一节是动手之前不能省的一步:先看看它到底是什么。
一、为什么非要先看一眼
数据在机器眼里就是一堆数,在你眼里也得先变回【能看懂的东西】。
8×8 的点阵最好办:直接画成字符画,# 表示有笔画。
实测把每个数字的第一条都画出来:它们确实是 0、1、2、3、4。
这一步不能省——数据里要是有画错的、标错的,后面全白做。
二、机器到底在比什么
看完这几张图,顺手就能看出哪些好认、哪些难认: 0 和 1 的差别很大(一圈对一竖)——好认。 3 和 2 都有横有弯——难认,最容易混。 记住这个观察——下一节的实测里,认错的那一个正好就栽在这儿。 关键在于机器没法像人一样看形状,它只是在比那 64 个格子上的相似程度。
三、这一步的三个作用
查错:标签标错的、图画反的,一眼就能抓出来。 建立直觉:知道数据长什么样,才明白模型为什么错。 判断难度:如果人眼都分不清,就别指望机器分得清。 所以它不只是【看看】,是正式动手前的体检。
四、一条通用的经验
这件事可以推广成一条经验:任何数据拿到手,先想办法【看一眼】。 表格数据——看几行、看每列的分布。 图像数据——抽几张画出来。 文本数据——抽几条读一读。 很多所谓【模型不行】的问题,最后都发现是数据本身的问题。
五、动手 Demo:查看手写数字数据的内容
数据拿到手第一件事是先看一眼。 把 8×8 的点阵画成字符画,人眼确认它确实是那个数字。
xs, ys = make_dataset(per_digit=8)
for want in sorted(GLYPH):
for x, y in zip(xs, ys):
if y == want:
show_point(x) # 把 64 个格子画成 # 和 .
break
实跑输出:
--------------------------------------------------------------------
查看手写数字数据的内容
--------------------------------------------------------------------
**数据拿到手,第一件事是先【看一眼】。**
这里的样本是 8×8 的点阵,**那就把它画出来看**——用 `#` 表示有笔画的格子。
标签 = 0
.####...
##...#..
#....#..
##...#..
#..###..
#....#..
#....#..
.#####..
标签 = 1
...#....
..##...#
..##....
..#.....
..###...
..##....
..##....
..####..
标签 = 2
..####..
.#.#..#.
..#...#.
.....##.
....#.#.
...#....
..#.....
.###.##.
标签 = 3
.####...
.....#..
.....#..
..###...
.....#..
...###..
.....#..
.####..#
标签 = 4
...##...
..#.##..
.#..#...
#.#.#...
######..
...###..
....#.#.
........
**看清楚了:它们确实是 0、1、2、3、4。**
**这一步不能省**——**数据里要是有画错的、标错的,后面全白做。**
顺便看几个数字之间的差别,就明白机器在比什么了:
0 和 1 的差别很大(一圈 对 一竖)——**好认。**
3 和 2 都有横有弯——**难认,最容易混。**
**机器没法像人一样【看形状】,它只是在比 64 个格子上的相似程度。**
实测五张图确实分别是 0、1、2、3、4——数据没错,可以往下走。 0 和 1 差别大、好认;3 和 2 都有横有弯、最容易混——这个观察下一节马上会被验证。
30 秒实验
- 把每个数字的第二条也画出来,看看同一个人写的两遍差多少。
- 想一想:如果某个样本画得连你都认不出是几,该不该留它。
常见误区
- 拿到数据直接开跑。先看一眼能省掉后面大把的排查时间。
- 以为机器是在【看图】。它只是在比 64 个格子上的相似程度。
自测三问(点开对答案)
1. 为什么数据到手要先看一眼? —— 能查出标错的样本、建立对数据的直觉、判断任务难度,避免后面白做。 2. 机器识别手写数字时比的是什么? —— 比较 64 个格子(像素)上的相似程度,而不是像人一样看形状。 3. 这一章的数据里哪两个数字最容易混? —— 3 和 2——两者都有横有弯,差异最小。- ☐ 下一节(12.6 通过机器学习识别手写数字)
相关笔记
- 准备学习数据 — 这批数据是怎么来的
- 通过机器学习识别手写数字 — 那个被认错的数字就在这儿
- 准备学习数据 — 数据本身要经得起看
- ⌨️ 编程原理 · 索引 — 把编程全貌理一遍
- ⚙️ 程序是怎样跑起来的 · 索引