手写数字模型的测试集要在训练前锁定,并保持 0 到 9 的类别比例。scikit-learn Digits 有 1797 个 8×8 灰度图样本,可用 stratify 分层划分,再把错分样本的原始编号、真实标签和预测标签一起导出。
为什么保留原始编号
只有准确率无法告诉你哪些数字容易混淆。划分时把样本索引一同传给 train_test_split,测试后就能回到原图,检查模糊书写、标签问题或特定数字对。

标题结论:手写数字测试集应在训练前按标签分层固定,并保留原始样本编号用于逐条错例回查。
可运行示例
import numpy as np
from sklearn.datasets import load_digits
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
digits = load_digits()
ids = np.arange(len(digits.target))
Xtr, Xte, ytr, yte, idtr, idte = train_test_split(
digits.data, digits.target, ids, test_size=.25,
random_state=42, stratify=digits.target
)
model = LogisticRegression(max_iter=3000).fit(Xtr, ytr)
pred = model.predict(Xte)
wrong = np.flatnonzero(pred != yte)
print("train/test", len(ytr), len(yte))
print("accuracy", (pred == yte).mean())
print("first_errors", [(int(idte[i]), int(yte[i]), int(pred[i]))
for i in wrong[:10]])
读者下一步:先运行示例确认索引链路,再把自己的图片 ID、特征和标签按相同顺序一起划分。
验收测试集
结果验证:训练集与测试集数量之和应为 1797,测试集中 0 到 9 都应出现;first_errors 的每个编号都能索引回 digits.images 查看原图。
正式项目还要按来源人、采集批次或时间分组,防止同一人的近似字迹同时出现在训练和测试中。
限制
失败边界:Digits 是低分辨率教学数据,不能代表手机拍照、复杂背景、中文手写或真实 OCR;示例精度不能外推到生产数据。
依据与核验日期
- load_digits 文档:说明数据规模、图像形状、特征和值域
- train_test_split 文档:说明 random_state 与 stratify 参数
以上页面于 2026-10-01 核验。版本更新后,应重新查看参数含义和默认值。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/31203.html