手写数字识别之数据集介绍
1 课程概览
本课介绍KNN算法的经典案例——手写数字识别。详细讲解MNIST数据集的来源、文件结构、数据格式(CSV)、像素点概念(28×28=784)、灰度图原理(0=纯黑,255=纯白),以及如何通过784个像素点构成数字图像。为后续模型训练和预测做准备。
2 核心概念与定义
- MNIST数据集:1999年发布的经典分类算法基准测试数据集,至今仍是研究人员和学习者的可靠资源。
- 灰度图:背景色为深色,图像为灰度的图片格式。
- 像素点(Pixel):构成图像的最小单元,每个像素点有自己的颜色值。
- 28×28:每张图片的像素尺寸,共784个像素点。
- 0~255:像素值的取值范围,0=纯黑,255=纯白,值越大颜色越深。
- CSV文件:以逗号分隔的数据文件,每行代表一张图片。
3 算法与模型详解
3.1 数据集基本信息
| 项目 | 说明 |
|---|---|
| 数据集来源 | MNIST(1999年发布) |
| 完整数据集 | 6万训练集 + 1万测试集 = 7万 |
| 课程使用 | 42000条数据 |
| 数据格式 | CSV文件 |
| 文件名 | train.csv、test.csv |
3.2 CSV文件结构
文件规格:
- 行数:42001行(第1行为列名,实际数据42000条)
- 列数:785列(1列标签 + 784列特征)
列结构:
| 列位置 | 列名 | 说明 |
|---|---|---|
| 第1列 | label | 标签(0~9) |
| 第2~785列 | pixel0~pixel783 | 像素点特征值 |
⚠️注意:标签在前,特征在后(与以往数据集相反)。
3.3 像素点与图像关系
28×28像素矩阵:
28列 →
↓
28行
- 每张图片由28×28=784个像素点组成
- 每个像素点的取值范围:0~255
- 0 = 纯黑(背景色)
- 255 = 纯白(数字颜色)
图像构成原理:
- 背景像素值为0(黑色)
- 数字像素值为255(白色)
- 黑底白字构成数字图像
3.4 灰度图颜色说明
| RGB值 | 颜色 | 含义 |
|---|---|---|
| (0, 0, 0) | 纯黑 | 背景色 |
| (255, 255, 255) | 纯白 | 数字颜色 |
3.5 数据集索引说明
索引与行号关系:
- CSV第1行为列名(title)
- 数据索引从0开始
- 实际行号 = 索引 + 2(列名行 + 索引从0开始)
示例:
- 索引0 → CSV第2行
- 索引9 → CSV第11行
- 索引22 → CSV第24行
3.6 图像显示原理
784个像素点 → 28×28图像:
- 原始数据:1行784列
- 转换后:28行×28列的矩阵
- 使用reshape(28, 28)进行转换
4 数学原理与推导
4.1 像素点总数计算
$$\text{Total Pixels} = 28 \times 28 = 784$$
4.2 图像矩阵转换
$$\text{Image}{28 \times 28} = \text{reshape}(\text{Data}{1 \times 784})$$
5 代码示例
本课主要为概念介绍,代码示例见后续课程。
数据加载预览:
import pandas as pd
# 读取CSV文件
df = pd.read_csv('./data/手写数字识别.csv')
# 查看数据形状
print(df.shape) # (42000, 785)
# 查看前5行
print(df.head())
6 重难点与易错提醒
- ❗重点:每张图片由28×28=784个像素点组成。
- ❗重点:CSV文件每行785列(1列标签 + 784列特征)。
- ❗重点:标签在前(第1列),特征在后(第2~785列)。
- ❗重点:像素值范围0~255,0=纯黑,255=纯白。
- ⚠️易错:索引与行号相差2(列名行 + 索引从0开始)。
- ⚠️易错:显示图像时需将784个像素点reshape为28×28。
- 💡深入理解:黑底白字构成数字图像,类似学生方阵举板拼字。
7 课堂问答精选
Q: 为什么CSV文件有785列?
A: 因为每张图片有784个像素点(28×28),加上1列标签(label),共785列。其中第1列为标签(0~9),第2~785列为像素点特征值(pixel0~pixel783)。
Q: 像素值0和255分别代表什么?
A:
- 0 = 纯黑(背景色)
- 255 = 纯白(数字颜色) 灰度图中,背景为黑色,数字为白色,通过黑底白字构成数字图像。
Q: 为什么索引9对应的是数字3?
A: 因为CSV第1行是列名,数据从第2行开始。索引0对应第2行,索引9对应第11行。需要从0开始数到第9个数据,对应的就是数字3。
8 本课小结
- MNIST数据集:1999年发布的经典分类基准,课程使用42000条数据。
- CSV结构:42001行×785列(1列标签 + 784列特征)。
- 像素点:每张图片28×28=784个像素点,值范围0~255。
- 灰度图:0=纯黑(背景),255=纯白(数字)。
- 图像显示:需将784个像素点reshape为28×28矩阵。
9 延伸思考与实践
- 思考:为什么使用28×28像素而不是更大尺寸?
- 预习:如何用代码绘制手写数字图片。
- 预习:如何训练KNN模型识别手写数字。