单元二

第7课 DecisionTreeClassifier 浅用

任务场景:像问一串「如果…那么…」来分类
任务场景:像问一串「如果…那么…」来分类
原理图:决策树分层提问
原理图:决策树分层提问

一、任务目标

训练一棵浅决策树,并看测试正确率。

二、核心概念讲清楚

决策树按特征阈值把样本分到不同叶子。优点是好解释;太深可能过拟合。

  • DecisionTreeClassifier
  • 每个节点问一个「是否」式问题
  • 可限制 max_depth 防止树长得过深
1准备数据划分训练/测试
2创建树模型可设深度
3fit在训练集生长
4评估测试集正确率

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

深度很浅的树像「只问两三个关键问题」;深度很大可能把噪声也背下来。

易错:深度不设上限,训练集 100% 正确但测试集崩盘。

正确:控制深度,并看测试集表现。

想一想:游戏「二十个问题」和决策树哪里像?

四、解题思路

任务:训练一棵浅决策树,并看测试正确率。 先想清楚:输入是什么、处理后得到什么、屏幕上应出现什么。

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

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

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

任务:训练一棵浅决策…用print把结果说出来,…对照参考代码跑通后,只改一…

五、语句功能讲解

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

六、知识点讲解

分类根据特征给样本贴标签。先拆分训练/测试,再 fit → predict,最后看准确率。

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

七、编程练习

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

注意 max_depth=3。

参考代码(对照抄写到下方 Mixly)
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
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=1
)
tree = DecisionTreeClassifier(max_depth=3, random_state=0)
tree.fit(X_train, y_train)
print("正确率:", round(accuracy_score(y_test, tree.predict(X_test)), 3))
print("树深度上限 max_depth=3")

八、课堂练习

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

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

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

  3. DecisionTreeClassifier 主要用于?

  4. 限制 max_depth 的常见目的是?

九、本节小结

决策树用问题串分类;浅一点更稳。