⚙️ 第十二章 如何让计算机【学习】
📄 一句话概括

数据拿到手,第一件事是先看一眼——把点阵画出来人眼确认;因为机器不是在【看形状】,它只是在比 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 秒实验

  1. 把每个数字的第二条也画出来,看看同一个人写的两遍差多少。
  2. 想一想:如果某个样本画得连你都认不出是几,该不该留它。

常见误区

  1. 拿到数据直接开跑。先看一眼能省掉后面大把的排查时间。
  2. 以为机器是在【看图】。它只是在比 64 个格子上的相似程度。
自测三问(点开对答案) 1. 为什么数据到手要先看一眼? —— 能查出标错的样本、建立对数据的直觉、判断任务难度,避免后面白做。 2. 机器识别手写数字时比的是什么? —— 比较 64 个格子(像素)上的相似程度,而不是像人一样看形状。 3. 这一章的数据里哪两个数字最容易混? —— 3 和 2——两者都有横有弯,差异最小。

相关笔记