Menu
CoddyTech

手写数字

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

邮局的分拣机从你在“数字一览”中见过的 8×8 扫描图中读取手写的邮政编码数字,load_digits:

两行共 20 个手写数字,由两位不同的书写者写成,数字从 0 到 9。它们以灰色小方块扫描图的形式呈现,其中有几个看起来很像其他数字

有两位候选者想要这份工作:k-NN,其中 k 由工程师建议;还有由 100 棵树组成的随机森林。

这次,错误很重要。办公室需要更公平的获胜者、它在未见过的扫描图像上的得分,以及最常见的混淆情况,因此这些数字会交给一个人处理。

challenge icon

挑战

困难

程序会读取工程师的 k;起始代码会创建一个带标题的图表。

  1. 分层划分出四分之一作为测试集,使用 random_state=0。
  2. 在训练数据上,用这个 k 对 k-NN 进行交叉验证,并用 100 棵树的随机森林(random_state=0)进行交叉验证,分成 5 折。打印各自的平均值(保留 3 位小数)和胜出的模型。
  3. 训练胜出的模型,并打印它在测试集上的准确率。
  4. 打印测试集混淆矩阵中数量最多的错误,然后在 ax 上绘制矩阵并显示。

换一台机器,并输入 3:

k-NN: CV accuracy 0.979
Random forest: CV accuracy 0.968
Winner: k-NN
Test accuracy: 0.976
Most confused: 7 read as 2 (3 times)

然后 Coddy 会显示你的矩阵。

亲手试试

import matplotlib.pyplot as plt
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.neighbors import KNeighborsClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay

digits = load_digits()
X = digits.data
y = digits.target
k = int(input())

fig, ax = plt.subplots()
ax.set_title("Test Digits")

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

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

监督学习中的所有课

自己练习: Python 在线编译器