Menu
CoddyTech

树会提问

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

本章以一棵解释农场贷款的树作为结尾。决策树就像“二十个问题”游戏:每次只问一个关于特征的是非问题,直到得出答案:

一张树形图。顶部方框询问:花瓣宽度是否不超过 0.8 cm?是,则指向 setosa。否,则指向第二个方框:花瓣长度是否不超过 4.95 cm?是,则指向 versicolor;否,则指向 virginica

训练过程会为每个问题挑选答案,使其尽可能清晰地划分类别:

from sklearn.tree import DecisionTreeClassifier

tree = DecisionTreeClassifier(max_depth=2, random_state=0)
tree.fit(X_train, y_train)  # 花瓣长度和宽度,单位为 cm
print(tree.predict([[4.5, 1.4]]))

这会输出 [1],versicolor。max_depth=2 允许每条路径提出两个问题。无需缩放:每个问题只读取一个特征。

challenge icon

挑战

中等

一家相机租赁店会在器材可能逾期归还时发送提醒。起始代码会拆分过去的租赁记录,并将一笔新租赁记录读入单行表 new_rental。

  1. 训练一棵决策树,每条路径最多包含 2 个问题(random_state=0)。
  2. 打印测试准确率(保留 3 位小数),并打印对这笔新租赁记录的判断:1 表示 likely late,0 表示 likely on time。

对于另一家店:

Test accuracy: 0.792
This rental: likely on time

亲手试试

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier

# 以往的租赁记录:late 中的 1 表示装备逾期归还
rentals = pd.read_csv("rentals.csv")
features = ["rental_weeks", "gear_value_usd", "customer_age", "late_before"]
X_train, X_test, y_train, y_test = train_test_split(rentals[features], rentals["late"], test_size=0.25, random_state=0)

# 一笔新的租赁:预订周数、装备价值、客户年龄,以及该客户此前逾期归还的次数
weeks = int(input())
value = int(input())
age = int(input())
late_before = int(input())
new_rental = pd.DataFrame([[weeks, value, age, late_before]], columns=features)

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

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

监督学习中的所有课

自己练习: Python 在线编译器