创建决策树

在本单元中,您将使用 YDF (Yggdrasil) 决策森林)库训练和解释决策树。

此单元的灵感来源于 🧭? YDF 使用入门 教程。

预赛

在研究数据集之前,请执行以下操作:

  1. 创建一个新的 Colab 笔记本
  2. 放置并执行以下代码行,以安装 YDF 库 创建新的 Colab 笔记本:
    !pip install ydf -U
    
  3. 导入以下库:
    import ydf
    import numpy as np
    import pandas as pd
    

棕榈企鹅数据集

此 Colab 使用 <ph type="x-smartling-placeholder"></ph> 棕榈企鹅数据集,其中包含三个动物的大小测量值 企鹅物种:

  • 胸带
  • 巴布亚语
  • Adelie

这是一个分类问题,目标是预测 企鹅。以下是企鹅:

三只不同的企鹅
。

<ph type="x-smartling-placeholder"></ph> 图 16.三种不同的企鹅物种。图片来源: @allisonhorst

 

以下代码会调用 熊猫 函数将棕榈企鹅数据集加载到内存中:

path = "https://storage.googleapis.com/download.tensorflow.org/data/palmer_penguins/penguins.csv"
dataset = pd.read_csv(path)
label = "species"

# Display the first 3 examples.
dataset.head(3)

下表设置了棕榈企鹅的前 3 个示例的格式 数据集:

<ph type="x-smartling-placeholder"></ph> 表 3.棕榈企鹅的前 3 个示例

物种 岛屿 bill_length_mm bill_depth_mm flipper_length_mm body_mass_g 性爱
0 次 Adelie Torgersen 39.1 18.7 181.0 3,750.0 男性 2007 年
1 Adelie Torgersen 39.5 17.4 186.0 3,800.0 女性 2007 年
2 Adelie Torgersen 40.3 18.0 195.0 3,250.0 女性 2007 年

完整数据集包含数值(例如 bill_depth_mm)、 分类(例如 island)和缺失的特征。与神经元 决策森林原生支持所有这些特征类型, 无需进行独热编码、归一化或额外的 is_present 功能。

以下代码单元将数据集拆分为训练集和测试集 set

# Use the ~20% of the examples as the testing set
# and the remaining ~80% of the examples as the training set.
np.random.seed(1)
is_test = np.random.rand(len(dataset)) < 0.2

train_dataset = dataset[~is_test]
test_dataset = dataset[is_test]

print("Training examples: ", len(train_dataset))
# >> Training examples: 272

print("Testing examples: ", len(test_dataset))
# >> Testing examples: 72

使用默认超参数训练决策树

您可以使用 CART(分类和 回归树)学习算法(也称为学习器),不指定任何 超参数。 这是因为,ydf.CartLearner 学习器提供了良好的默认 超参数值。您将详细了解这种模型的工作原理 详细介绍

model = ydf.CartLearner(label=label).train(train_dataset)

上述调用未指定用作 输入特征。因此,我们使用训练集内的每一列。通话 也没有指定语义(例如数字、分类、文本) 输入特征。因此,系统会自动推断特征语义。

调用 model.plot_tree() 以显示生成的决策树:

model.plot_tree()

在 Colab 中,您可以使用鼠标来显示特定元素的详细信息,例如 作为每个节点中的类别分布。

使用默认值训练的决策树
超参数。

<ph type="x-smartling-placeholder"></ph> 图 17使用默认超参数训练的决策树。

Colab 显示根条件包含 243 个样本。不过,您可以 请记住,训练数据集包含 272 个样本。其余 29 个 示例已自动保留以用于验证和树剪枝。

第一个条件测试 bill_depth_mm 的值。表 4 和表 5 显示了 不同物种的可能性取决于第一个条件的结果。

<ph type="x-smartling-placeholder"></ph> 表 4.如果bill_depth_mm ≥ 42.3,则其他物种的概率

种类 可能性
Adelie(红色) 8%
Gentoo(蓝色) 58%
胸带(绿色) 36%

 

<ph type="x-smartling-placeholder"></ph> 表 5.不同物种的 bill_depth_mm < 42.3

物种 可能性
Adelie(红色) 97%
Gentoo(蓝色) 2%
胸带(绿色) 0%

bill_depth_mm 是一个数值特征。因此,结果发现值 42.3 使用二元分类精确拆分, 特征算法。

如果 bill_depth_mm ≥ 42.3 为 True,进一步测试 flipper_length_mm ≥ 207.5几乎可以完美地将

以下代码提供模型的训练和测试准确率:

train_evaluation = model.evaluate(train_dataset)
print("train accuracy:", train_evaluation.accuracy)
# >> train accuracy:  0.9338

test_evaluation = model.evaluate(test_dataset)
print("test accuracy:", test_evaluation.accuracy)
# >> test accuracy:  0.9167

测试准确率高于训练准确率,但这种情况很少见, 准确率。在这种情况下,测试集可能与训练集不同。 然而,情况并非如此,测试被拆分 。更可能的原因是,测试数据集非常小(只有 72 个样本),因此准确度估算值很嘈杂。

在实践中,对于如此小的数据集,使用 交叉验证 更合适,因为它可以计算更准确的评估指标值。 但在本示例中,我们将继续进行测试 简单易用。

改进模型超参数

该模型是使用默认超参数训练的单个决策树 值。为了获得更好的预测结果,您可以:

  1. 使用更强大的学习器,例如 随机森林梯度提升树 模型。这些学习算法将在下一页中介绍。

  2. 根据您的观察结果和直觉来优化超参数。通过 模型改进指南 会很有帮助。

  3. 使用超参数调节 来自动测试大量可能的超参数。

由于我们尚未看到随机森林和梯度提升树, 并且由于样本数量太少而无法自动 超参数调优,您需要手动改进模型。

上面显示的决策树很小,具有 61 个示例的叶项包含一个 Adelie 和 Chinstrap 的经典品牌组合。为什么算法不分割这片叶子 该怎么办?造成这种情况的原因可能有两种:

  • 每个叶的样本数下限(默认为 min_examples=5) 。
  • 该树可能遭到了分割,然后进行了剪枝以防止过拟合。

将样本数下限减少到 1 并查看结果:

model = ydf.CartLearner(label=label, min_examples=1).train(train_dataset)
model.plot_tree()

使用经过训练的决策树
min_examples=1。

<ph type="x-smartling-placeholder"></ph> 图 18.使用 min_examples=1 训练的决策树。

 

包含 61 个样本的叶节点已进一步划分为多个 次。

为了了解进一步划分节点是否有价值,我们会评估 在测试数据集上训练此新模型:

print(model.evaluate(test_dataset).accuracy)
# >> 0.97222

随着测试准确率从 0.9167 增加到 0.97222。这种超参数更改是个好主意。

上一个决策森林

通过继续改进超参数,我们很有可能 准确率。但是,我们可以训练出更强大的 例如随机森林模型,看看它是否效果更好。

model = ydf.RandomForestLearner(label=label).train(pandas_train_dataset)
print("Test accuracy: ", model.evaluate(pandas_test_dataset).accuracy)
# >> Test accuracy: 0.986111

随机森林的准确度优于我们的简单树。您将 请参阅下文,了解具体原因。

使用和限制

如前所述,一个决策树的质量通常低于现代 随机森林、梯度提升树和神经元等机器学习方法 。不过,决策树在以下情况下仍然有用:

  • 作为评估更复杂的方法的简单且实惠的基准。
  • 需要在模型质量和可解释性之间进行权衡时。
  • 作为解释决策森林模型的代理, 本课程稍后会进一步介绍