Skip to content

Latest commit

 

History

History
221 lines (151 loc) · 8.61 KB

develop-first-xgboost-model-python-scikit-learn.md

File metadata and controls

221 lines (151 loc) · 8.61 KB

如何使用 Python 和 scikit-learn 开发您的第一个 XGBoost 模型

原文: https://machinelearningmastery.com/develop-first-xgboost-model-python-scikit-learn/

XGBoost 是梯度提升决策树的一种实现,旨在提高机器学习竞赛速度和表现。

在这篇文章中,您将了解如何在 Python 中安装和创建第一个 XGBoost 模型。

阅读这篇文章后你会知道:

  • 如何在您的系统上安装 XGBoost 以便在 Python 中使用。
  • 如何准备数据并训练您的第一个 XGBoost 模型。
  • 如何使用 XGBoost 模型做出预测。

让我们开始吧。

  • 2017 年 1 月更新:已更新,以反映 scikit-learn API 版本 0.18.1 中的更改​​。
  • 2017 年 3 月更新:添加缺失导入,使导入更清晰。
  • 更新 March / 2018 :添加了备用链接以下载数据集,因为原始图像已被删除。

How to Develop Your First XGBoost Model in Python with scikit-learn

如何用 scikit-learn 开发你的第一个 XGBoost 模型 照片由 Justin Henry 开发,保留一些权利。

教程概述

本教程分为以下 6 个部分:

  1. 安装 XGBoost 以与 Python 一起使用。
  2. 问题定义和下载数据集。
  3. 加载并准备数据。
  4. 训练 XGBoost 模型。
  5. 做出预测并评估模型。
  6. 将它们结合在一起并运行示例。

1.安装 XGBoost 以便在 Python 中使用

假设您有一个可用的 SciPy 环境,可以使用 pip 轻松安装 XGBoost。

例如:

sudo pip install xgboost

要更新 XGBoost 的安装,您可以键入:

sudo pip install --upgrade xgboost

如果您不能使用 pip 或者想要从 GitHub 运行最新代码,则另一种安装 XGBoost 的方法要求您复制 XGBoost 项目并执行手动构建和安装。

例如,要在 Mac OS X 上没有多线程构建 XGBoost(已经通过 macports 或 homebrew 安装了 GCC),您可以键入:

git clone --recursive https://github.com/dmlc/xgboost
cd xgboost
cp make/minimum.mk ./config.mk
make -j4
cd python-package
sudo python setup.py install

您可以在 XGBoost 安装指南上了解有关如何为不同平台安装 XGBoost 的更多信息。有关安装 XGBoost for Python 的最新说明,请参阅 XGBoost Python 包

作为参考,您可以查看 XGBoost Python API 参考

2.问题描述:预测糖尿病的发病

在本教程中,我们将使用皮马印第安人糖尿病数据集。

该数据集由描述患者医疗细节的 8 个输入变量和一个输出变量组成,以指示患者是否在 5 年内患有糖尿病。

您可以在 UCI 机器学习存储库网站上了解有关此数据集的更多信息。

这是第一个 XGBoost 模型的一个很好的数据集,因为所有输入变量都是数字的,问题是一个简单的二进制分类问题。对于 XGBoost 算法来说,它不一定是一个好问题,因为它是一个相对较小的数据集,并且很容易建模。

下载此数据集并将其放入当前工作目录,文件名为“ pima-indians-diabetes.csv ”(更新:从此处下载)。

3.加载和准备数据

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

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

from numpy import loadtxt
from xgboost import XGBClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

接下来,我们可以使用 NumPy 函数 **loadtext()**将 CSV 文件作为 NumPy 数组加载。

# load data
dataset = loadtxt('pima-indians-diabetes.csv', delimiter=",")

我们必须将数据集的列(属性或特征)分成输入模式(X)和输出模式(Y)。我们可以通过以 NumPy 数组格式指定列索引来轻松完成此操作。

# split data into X and y
X = dataset[:,0:8]
Y = dataset[:,8]

最后,我们必须将 X 和 Y 数据拆分为训练和测试数据集。训练集将用于准备 XGBoost 模型,测试集将用于进行新的预测,我们可以从中评估模型的表现。

为此,我们将使用 scikit-learn 库中的 **train_test_split()**函数。我们还为随机数生成器指定种子,以便每次执行此示例时始终获得相同的数据分割。

# split data into train and test sets
seed = 7
test_size = 0.33
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=test_size, random_state=seed)

我们现在准备训练我们的模型。

4.训练 XGBoost 模型

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

这意味着我们可以使用带有 XGBoost 模型的完整 scikit-learn 库。

用于分类的 XGBoost 模型称为 XGBClassifier 。我们可以创建并使其适合我们的训练数据集。使用 scikit-learn API 和 **model.fit()**函数拟合模型。

训练模型的参数可以传递给构造函数中的模型。在这里,我们使用合理的默认值。

# fit model no training data
model = XGBClassifier()
model.fit(X_train, y_train)

您可以通过打印模型来查看训练模型中使用的参数,例如:

print(model)

您可以在 XGBoost Python scikit-learn API 中了解有关 XGBClassifierXGBRegressor 类的默认值的更多信息。

您可以在 XGBoost 参数页面上了解有关每个参数含义以及如何配置它们的更多信息。

我们现在准备使用训练有素的模型做出预测。

5.使用 XGBoost 模型做出预测

我们可以使用测试数据集上的拟合模型做出预测。

为了做出预测,我们使用 scikit-learn 函数 model.predict()

默认情况下,XGBoost 进行的预测是概率。因为这是二分类问题,所以每个预测是输入模式属于第一类的概率。我们可以通过将它们四舍五入为 0 或 1 来轻松地将它们转换为二进制类值。

# make predictions for test data
y_pred = model.predict(X_test)
predictions = [round(value) for value in y_pred]

现在我们已经使用拟合模型对新数据做出预测,我们可以通过将预测值与预期值进行比较来评估预测的表现。为此,我们将在 scikit-learn 中使用内置的 **accuracy_score()**函数。

# evaluate predictions
accuracy = accuracy_score(y_test, predictions)
print("Accuracy: %.2f%%" % (accuracy * 100.0))

6.将它们捆绑在一起

我们可以将所有这些部分组合在一起,下面是完整的代码清单。

# First XGBoost model for Pima Indians dataset
from numpy import loadtxt
from xgboost import XGBClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# load data
dataset = loadtxt('pima-indians-diabetes.csv', delimiter=",")
# split data into X and y
X = dataset[:,0:8]
Y = dataset[:,8]
# split data into train and test sets
seed = 7
test_size = 0.33
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=test_size, random_state=seed)
# fit model no training data
model = XGBClassifier()
model.fit(X_train, y_train)
# make predictions for test data
y_pred = model.predict(X_test)
predictions = [round(value) for value in y_pred]
# evaluate predictions
accuracy = accuracy_score(y_test, predictions)
print("Accuracy: %.2f%%" % (accuracy * 100.0))

运行此示例将生成以下输出。

Accuracy: 77.95%

对于这个问题,这是一个良好的准确度得分,我们可以期待,考虑到模型的能力和问题的适度复杂性。

摘要

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

具体来说,你学到了:

  • 如何在您的系统上安装 XGBoost 以备 Python 使用。
  • 如何在标准机器学习数据集上准备数据并训练您的第一个 XGBoost 模型。
  • 如何使用 scikit-learn 做出预测并评估训练有素的 XGBoost 模型的表现。

您对 XGBoost 或该帖子有任何疑问吗?在评论中提出您的问题,我会尽力回答。