单元二

第8课 分类综合:比较两种模型

任务场景:同一份试卷,比两种做题方法
任务场景:同一份试卷,比两种做题方法
原理图:同一测试集上比较正确率才公平
原理图:同一测试集上比较正确率才公平

一、任务目标

在同一次拆分上比较 KNN 与决策树的正确率。

二、核心概念讲清楚

在相同划分下公平比较:同一套 train/test,只换模型。记录各自 accuracy,讨论差异原因。

  • 固定 random_state,保证公平
  • 比较时数据预处理也要一致
  • 没有永远第一的模型,看任务与数据
1同一划分共用 X_train 等
2训练模型A记录分数
3训练模型B记录分数
4对比讨论谁高、为何

三、跟着想一遍(小例子)

KNN 与决策树在 iris 上可能都较高,但可解释性不同。

易错:一个用了标准化、一个没用,却直接比分数。

正确:控制变量:只改模型这一处。

想一想:为什么「换模型」前要固定数据划分?

四、解题思路

任务:在同一次拆分上比较 KNN 与决策树的正确率。 先想清楚:输入是什么、处理后得到什么、屏幕上应出现什么。

本课主要用到:屏幕输出。

  1. 1明确任务「在同一次拆分上比较 KNN 与决策树的正确率。」:运行后你希望看到什么结果(文字、图形或计算结果)。
  2. 2用 print 把结果说出来,确认屏幕上出现预期内容。
  3. 3对照参考代码跑通后,只改一个参数,观察结果如何变化。

流程示意(可对照左侧文字)

任务:在同一次拆分上…用print把结果说出来,…对照参考代码跑通后,只改一…

五、语句功能讲解

本课用到的 Mixly 图形块均已在前面的课讲过。请直接对照编程练习搭积木;若有遗忘,回到该积木首次出现的课页复习。

六、知识点讲解

特征是从原始数据里抽出、对判断有用的量;标签是我们想预测的答案。分类就是根据特征给样本贴标签。特征选不好,后面模型再复杂也难做好。

先弄清本课输入与输出,再进编程练习对照现象。

七、编程练习

先理解上面的例子,再在下方 Mixly 运行与检查(含 scikit-learn)。

同一 random_state,打印两个正确率。

参考代码(对照抄写到下方 Mixly)
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score

X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.3, random_state=0
)
knn = KNeighborsClassifier(n_neighbors=3)
tree = DecisionTreeClassifier(max_depth=3, random_state=0)
knn.fit(X_train, y_train)
tree.fit(X_train, y_train)
print("KNN:", round(accuracy_score(y_test, knn.predict(X_test)), 3))
print("Tree:", round(accuracy_score(y_test, tree.predict(X_test)), 3))

八、课堂练习

先完成两道正误判断,再做其余题目;选出后点「检查」。

  1. 判断:只抄参考代码,不看运行输出,也不改参数验证。

  2. 判断:先跑通,再对照「模型比较」改一处输入/参数,确认输出按预期变化;答错小测时读讲解。

  3. 比较两个分类器时,更合理的是?

  4. 本课属于哪类问题?

九、本节小结

分类单元收官:会训、会评、会比。下一单元进入回归——答案是连续数字。