与随机森林不同,梯度提升树可以过拟合。因此,对于神经网络,您可以使用验证数据集来应用正则化和早停法。
例如,下图显示了训练 GBT 模型时训练集和验证集的损失曲线和准确率曲线。请注意曲线的散度如何,这表明高度过拟合。
图 29. 损失与决策树的数量。
图 30. 准确性与决策树的数量。
梯度提升树的常见正则化参数包括:
- 树的最大深度。
- 收缩率。
- 在每个节点测试的属性比率。
- L1 和 L2 系数方面的损失。
请注意,决策树通常比随机森林模型要浅得多。默认情况下,TF-DF 中的梯度提升树会增长至深度 6。由于树较浅,因此每片叶的最小样本数量影响较小,通常不会进行调整。
如果训练样本数量较少,就需要验证数据集。因此,常见做法是在交叉验证循环内训练梯度提升树,或者在已知模型不过拟合时停用早停法。
用法示例
在上一章中,我们使用小型数据集训练了一个随机森林。在此示例中,我们将随机森林模型替换为梯度提升树模型:
model = tfdf.keras.GradientBoostedTreesModel()
# Part of the training dataset will be used as validation (and removed
# from training).
model.fit(tf_train_dataset)
# The user provides the validation dataset.
model.fit(tf_train_dataset, validation_data=tf_valid_dataset)
# Disable early stopping and the validation dataset. All the examples are
# used for training.
model.fit(
tf_train_dataset,
validation_ratio=0.0,
early_stopping="NONE")
# Note: When "validation_ratio=0", early stopping is automatically disabled,
# so early_stopping="NONE" is redundant here.
使用和限制
渐变提升树有一些优缺点。
优点
- 与决策树一样,它们本身也支持数值和分类特征,并且通常不需要特征预处理。
- 渐变提升树具有默认的超参数,通常能够提供出色的结果。不过,调整这些超参数可以显著改善模型。
- 梯度提升树模型通常较小(在节点数量和内存中)且运行速度快(通常只有 1 个或几个 μs / 示例)。
缺点
- 决策树必须依序训练,这可能会显著降低训练速度。但是,由于决策树较小,训练速度会有所抵消。
- 与随机森林一样,梯度提升树无法学习和重复使用内部表示法。每个决策树(以及每个决策树的每个分支)都必须重新学习数据集模式。在某些数据集(尤其是包含非结构化数据的数据集(例如图片、文本)中),这会导致梯度提升树的结果比其他方法更差。