Menu
CoddyTech

观察数字

本课属于 Coddy Machine Learning 学习旅程的“无监督学习”单元。第 43 课,共 51 课。

你的上一个项目:1,797 张手写扫描图,而且没有老师。在接下来的 5 节课中,你将找到这样的分组,而且不用读取任何标签:

两行共十张模糊的灰色数字图片,是 k-means 在扫描图中找到的十个分组的中心:一个 9,一个模糊的 1 或 8,一个 7,一个 6,一个 2,一个 0,一个 3,一个 4,一个 5 和一个细长的 1

每个项目都从观察开始。像素的离散程度,也就是它在多次扫描中的标准差,能显示书写者在哪些地方意见不一。这里展示的是所有数字 7 的情况:

一个 8 乘 8 的网格,显示数字 7 各像素的离散程度,颜色越深的蓝色表示数值越大:顶部横线和向下的笔画处数值较高,左边缘和右下角的数值为 0.0

spread = X[y == 7].std(axis=0)
print((spread == 0).sum())

这会输出 15:每 7 个像素中有 15 个是空白的。一个始终不变的像素无法向模型提供任何信息。

challenge icon

挑战

中等

开始探索。起始代码会将扫描图像加载到 X,将数字加载到 y,并设置好图表。

  1. 计算所有扫描图像中每个像素的离散程度。打印最繁忙像素的行、列和离散程度(保留 2 位小数),然后打印在每张扫描图像中都保持空白的像素数量。
  2. 在 ax 上用 cmap="Blues" 将它们绘制成一张 8 × 8 的图像,并添加颜色条。显示图像。

只看数字 1:

Busiest pixel: row 6, column 5 (spread 6.53)
Blank in every scan: 12 pixels

一张标题为 Where Writers Disagree 的 8 × 8 图像,带有颜色条:展示数字 1 的每个像素的离散程度,行和列的编号为 0 到 7:中间有两条深色带,表示书写者在笔画位置上的差异,左右边缘颜色较浅

你的图像涵盖了全部 1,797 张扫描图像。Coddy 会描述你的图像。书写者在哪些地方的差异最大?

亲手试试

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_digits

# 1,797 张手写数字扫描图:每张有 64 个像素(8 × 8,墨迹深浅从 0 到 16),并标有写下的数字
digits = load_digits()
X = digits.data
y = digits.target

fig, ax = plt.subplots()
ax.set_title("Where Writers Disagree")

# 在下方编写你的代码
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

无监督学习中的所有课

自己练习: Python 在线编译器