Python 中的 XGBoost ML 模型

2024年8月29日 | 阅读 8 分钟

XGBoost 库实现了梯度提升决策树,旨在提高速度和执行效率,这是机器学习 (ML) 中最重要的方面。

XgBoost:Python 的 XgBoost (Extreme Gradient Boosting) 库由华盛顿大学的学者推出。它是用 C++ 编写的 Python 模块,通过梯度提升训练来帮助机器学习模型算法。

梯度提升:这是一种人工智能方法,用于分类和回归任务等。它将预测模型呈现为弱预测模型(通常称为决策树)的集合。

基础梯度提升是如何工作的?

  • 应该优化损失函数,这意味着比结果更好地降低损失函数。
  • 为了进行预测,模型中使用了弱学习器。
  • 该模型使用了决策树,并且以一种贪婪的方式使用它们,这意味着根据 Gini 杂质等选择最佳分割点,或者最小化损失函数。
  • 加性模型用于组合所有弱模型,最小化损失函数。
  • 树一棵一棵地添加,确保现有的树在决策树中不被改变。通常使用梯度下降过程来查找最佳超参数,之后进一步更新权重。

在本教程中,您将了解如何安装和构建您的第一个 Python XGBoost 模型。

XGBoost 可以提供比其他机器学习模型算法更好的解决方案。事实上,自推出以来,它已成为处理结构化数据的“最先进”的机器学习模型算法。

是什么让 XGBoost 如此受欢迎?

  • 性能和速度:最初基于 C++ 构建,它的速度与其他集成分类器一样快。
  • 核心算法是可并行的:它可以利用多核计算机的强大功能,因为核心 XGBoost 算法是可并行的。此外,它还可以并行化到 GPU 和计算机网络上,从而可以在大型数据集上进行训练。
  • 持续超越其他技术算法:它在许多机器学习基准数据集上都显示出更好的输出。
  • 广泛的调优参数:XGBoost 内部具有适用于 scikit-learn 的 API、缺失值、正则化、交叉验证、用户定义的损失函数、树参数等的参数。

XGBoost (Extreme Gradient Boosting) 属于一类集成算法,并以梯度提升 (GBM) 框架为核心。

本教程的成果

  • 在 Python 中安装 XGBoost。
  • 准备数据和训练 XGBoost 模型。
  • 使用 XGBoost 模型进行预测。

分步方法

  1. 安装 XGBoost
  2. 下载数据集1。
  3. 准备和加载数据。
  4. 训练模型。
  5. 进行预测并评估模型。
  6. 整合所有内容并运行最终示例。

步骤 1:在 Python 中安装 XGBoost

如果我们在 SciPy 环境中工作,可以使用 pip 轻松地在 Python 中安装 XGBoost。

例如

安装命令

更新 XGBoost 命令

安装 XGBoost 的另一种方法是运行最新的 GitHub 代码,这需要您克隆 XGBoost 项目并执行手动构建和安装。

例如,要在 Mac OS X 上构建不带多线程的 XGBoost(已通过 MacPorts 或自制 libtool 安装 GCC),我们可以输入

步骤 2:问题描述

本教程将使用 Pima 印第安人糖尿病发病率数据集。

该数据集1 包含 8 个描述患者临床细节的数据变量和一个结果变量,用于指示患者是否将在 5 年或更短的时间内出现糖尿病。

这对于第一个 XGBoost 模型来说是一个不错的数据集1,因为所有数据变量都是数值型的,而且问题是一个简单的二元分类问题。对于 XGBoost 算法来说,这不是一个好问题,因为数据集1 相对较小,问题也比较简单。

下载此数据集1 并将其放入当前工作目录中,文件名为“pima-Indians--diabetes.CSV”。

怀孕葡萄糖水平血压皮肤厚度胰岛素水平BMI糖尿病遗传函数年龄结果
61487235033.60.627501
1866678076.60.461410
8184640074.40.677471
18866748478.10.167710
0147404616844.17.788441
6116740076.60.701400
478604788410.748761
1011600046.40.144780
7187704664440.60.168641
8176860000.747641
4110870047.60.181400
101687400480.647441
10148800077.11.441670
1188607484640.10.488681
6166771817676.80.687611
7100000400.484471
0118844774046.80.661411
7107740078.60.764411
110440488444.40.184440
111670408644.60.678471
4176884174648.40.704770
888840046.40.488600
7186800048.80.461411
811880460780.764781
11144844414646.60.764611
10176707611641.10.706411
7147760048.40.767441
187661614074.70.487770
14146871811077.70.746670
6117870044.10.447480
610876760460.646600
4168764674641.60.861781
48868116474.80.767770
687870018.80.188780
101777841077.60.617460
41046044187740.866440

步骤 3:加载和准备数据

在本节中,我们将从文件中加载数据并准备好以用于训练和评估 XGBoost 模型。

准备机器学习模型的过程包括向机器学习算法(即学习算法)提供训练数据以供学习。训练数据应包含正确答案,这被称为目标变量或目标属性。

我们将从导入本教程中需要使用的类和函数开始。

例如

说明

接下来,使用 NumPy 的 `genfromtxt` 函数将 CSV 文件加载为 NumPy 数组。

现在,通过指定列的索引,使用 NumPy 格式将列(特征或属性)分离为 (Y) 输出模式和 (X) 输入模式。

最后,我们应该将其拆分为测试集和训练集。训练集将用于准备 XGBoost 模型,而测试集将用于进行新预测,我们可以从中评估模型的性能。

我们将使用 scikit-learn 库中的 `train_test_split()` 函数。我们还指定随机数生成器的种子,以便每次执行此模型时都能获得相同的数据分割。

步骤 4:训练 XGBoost 模型

说明

XGBoost 提供了一个包装器类,允许模型在 scikit-learn 框架中被视为分类器或回归器。

这意味着 XGBoost 模型可以完全利用 scikit-learn 库。

对于分类,XGBoost 模型称为 `XGBClassifier`。我们可以创建它并将其拟合到我们的训练数据集。模型使用 scikit-learn API 和 `model.fit()` 函数进行拟合。

为了训练模型,可以在构造函数的参数列表中传递参数。所以这里,我们使用合理的默认值。此外,通过打印模型,我们可以观察到训练好的 XGBoost 模型的信息。

例如

步骤 5:使用 XGBoost 模型进行预测

我们可以在测试数据集上使用已拟合的模型进行预测。

例如

说明

我们使用 scikit-learn 函数 `model.predict()` 进行预测。

由于这是一个二元分类问题,每次预测都是数据模式属于正类的概率。默认情况下,XGBoost 模型做出的预测是准确的概率。通过将它们四舍五入到 1 或 0,我们可以轻松地将它们转换为二元类别值。

现在,要对数据进行预测,需要使用已拟合的模型。为了确定预测的效率,将预测值与实际值进行比较。使用 scikit-learn 库的 `accuracy_score()` 函数来查找准确率。

步骤 6:整合所有前面的步骤

源代码

注意:鉴于评估系统或算法的性质以及数学结果精度上的差异,结果可能会有所不同。我们可以多次运行模型并找出平均结果。

输出

运行此模型会产生以下结果。

Accuracy = 77.95%

考虑到模型的性能和问题的内在复杂性,我们在该问题上获得了不错的准确率得分,这是我们所期望的。

结论

在这篇文章中,您了解了如何在 Python 中开发您的第一个 XGBoost 模型。

具体来说,您学会了

  • 如何安装 XGBoost 并准备好在您的系统上与 Python 一起使用。
  • 如何使用 scikit-learn 库进行预测并评估已训练的 XGBoost 模型的性能。
  • 如何准备数据并在标准机器学习数据集1 上训练您的第一个 XGBoost 模型。