手写数字
本课属于 Coddy Machine Learning 学习旅程的“监督学习”单元。第 57 课,共 58 课。
邮局的分拣机从你在“数字一览”中见过的 8×8 扫描图中读取手写的邮政编码数字,load_digits:
有两位候选者想要这份工作:k-NN,其中 k 由工程师建议;还有由 100 棵树组成的随机森林。
这次,错误很重要。办公室需要更公平的获胜者、它在未见过的扫描图像上的得分,以及最常见的混淆情况,因此这些数字会交给一个人处理。
挑战
困难程序会读取工程师的 k;起始代码会创建一个带标题的图表。
- 分层划分出四分之一作为测试集,使用
random_state=0。 - 在训练数据上,用这个
k对 k-NN 进行交叉验证,并用 100 棵树的随机森林(random_state=0)进行交叉验证,分成 5 折。打印各自的平均值(保留 3 位小数)和胜出的模型。 - 训练胜出的模型,并打印它在测试集上的准确率。
- 打印测试集混淆矩阵中数量最多的错误,然后在
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")
# 在下方编写你的代码
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
监督学习中的所有课
自己练习: Python 在线编译器