XGBoost是梯度提升集成算法的强大而有效的实现。配置XGBoost模型的超参数可能具有挑战性,这通常会导致使用既费时又计算量大的大型网格搜索实验。配置XGBoost模型的另一种方法是在训练过程中算法的每次迭代评估模型的性能,并将结果绘制为学习曲线。这些学习曲线图提供了一种可以解释的诊断工具,并建议对模型超参数进行特定更改,从而可能会改善预测性能。
在本教程中,您将发现如何在Python中绘制和解释XGBoost模型的学习曲线。完成本教程后,您将知道:
学习曲线为了解诸如XGBoost之类的监督学习模型的训练动态提供了有用的诊断工具。
如何配置XGBoost来评估每次迭代的数据集并将结果绘制为学习曲线。
如何解释和使用学习曲线图来改善XGBoost模型的性能。
教程概述
本教程分为四个部分。他们是:
极端梯度提升
学习曲线
绘制XGBoost学习曲线
使用学习曲线调整XGBoost模型
极端梯度提升
梯度提升是指一类集成机器学习算法,可用于分类或回归预测建模问题。集成是根据决策树模型构建的。一次将一棵树添加到集合中,并进行调整以纠正由先前模型造成的预测误差。这是一种集成机器学习模型,称为Boosting。使用任何任意的微分损失函数和梯度下降优化算法对模型进行拟合。这给该技术起了名字,称为“梯度提升”,因为随着模型的拟合,损耗梯度被最小化,非常类似于神经网络。
Extreme Gradient Boosting(简称XGBoost)是梯度提升算法的一种有效的开源实现。因此,XGBoost是一个算法,一个开源项目和一个Python库。它最初是由Tianqi Chen开发的,并由Chen和Carlos Guestrin在其2016年的论文“ XGBoost:可扩展的树增强系统”中进行了描述。它被设计为既计算效率高(例如执行速度快)又高效,也许比其他开源实现更有效。使用XGBoost的两个主要原因是执行速度和模型性能。在分类和回归预测建模问题上,XGBoost主导结构化或表格数据集。证据表明,它是Kaggle竞争数据科学平台上竞赛获胜者的首选算法。
现在我们已经了解了XGBoost是什么以及为什么它很重要,让我们仔细研究一下学习曲线。
学习曲线
通常,学习曲线是在x轴上显示时间或经验并在y轴上显示学习或改善的图。
学习曲线广泛用于机器学习中的算法,这些算法会随着时间的推移逐步学习(优化其内部参数),例如深度学习神经网络。用于评估学习的指标可能会最大化,这意味着分数越高(数字越大)表示学习越多。一个例子是分类精度。
更常见的是使用最小化的分数,例如损失或错误,其中分数越高(数字越小)表示学习越多,而值0.0指示训练数据集学习得很好,并且没有犯错误。
在机器学习模型的训练过程中,可以评估训练算法每个步骤的模型当前状态。可以在训练数据集上对其进行评估,以了解模型的“学习程度”。也可以在不属于训练数据集的保留验证数据集上对其进行评估。通过对验证数据集进行评估,可以了解模型的“一般化”程度。
在训练数据集和验证数据集上进行训练时,通常会为机器学习模型创建双重学习曲线。学习曲线的形状和动态可用于诊断机器学习模型的行为,并进而建议可以进行配置更改的类型以改善学习和/或性能。
您可能会在学习曲线中观察到三种常见的动态变化;他们是:
欠拟合
过拟合
拟合适中
最常见的是,学习曲线用于诊断模型的过拟合行为,可以通过调整模型的超参数来解决。
过度拟合是指对训练数据集学习得太好的模型,包括统计噪声或训练数据集中的随机波动。过度拟合的问题在于,模型对训练数据的专业化程度越高,将其推广到新数据的能力就越差,从而导致推广误差增加。泛化误差的增加可以通过验证数据集上模型的性能来衡量。
现在我们已经熟悉了学习曲线,让我们看一下如何绘制XGBoost模型的学习曲线。
绘制XGBoost学习曲线
在本节中,我们将绘制XGBoost模型的学习曲线。
首先,我们需要一个数据集作为拟合和评估模型的基础。在本教程中,我们将使用合成的二进制(两类)分类数据集。
make_classification()
scikit-learn函数可用于创建综合分类数据集。在这种情况下,我们将使用50个输入要素(列)并生成10,000个样本(行)。伪随机数生成器的种子是固定的,以确保每次生成样本时都使用相同的基本“问题”。
下面的示例生成综合分类数据集,并汇总生成数据的形状。
# test classification dataset
from sklearn.datasets import make_classification
# define dataset
X, y = make_classification(n_samples=10000, n_features=50, n_informative=50, n_redundant=0, random_state=1)
# summarize the dataset
print(X.shape, y.shape)
运行示例将生成数据并报告输入和输出组件的大小,从而确认期望的形状。
(10000, 50) (10000,)
接下来,我们可以在该数据集上拟合XGBoost模型,并绘制学习曲线。首先,我们必须将数据集分成一个部分,该部分将用于训练模型(训练),另一部分将不用于训练模型,但将被保留下来并用于评估模型的每一步训练 算法(测试集或验证集)。
<