在Python中的XGBoost机器学习模型
XGBoost库是用于Python的梯度提升决策树实现,旨在提供速度和执行能力,这是机器学习中最重要的方面。
XgBoost :XgBoost(极端梯度提升)库是由华盛顿大学的学者引入的。它是一个用C++编写的Python模块,通过训练梯度提升来帮助ML模型算法。
梯度提升: 这是一种在分类和回归任务中使用的AI方法。它将弱预测模型的集合作为预测模型。
基本梯度提升如何工作
- 需要改进损失函数,即将损失函数的结果降低。
- 为了进行预测,模型中使用了弱学习器。
- 在此使用决策树,并以嫉妒的方式使用,即基于Gini不纯度等选择最佳划分点,或者以限制损失函数的方式使用。
- 采用加法模型,汇集所有弱模型,限制损失函数。
- 每次添加树,并确保决策树中的现有树不发生变化。通常使用梯度下降过程来找到最佳超参数,然后进一步更新权重。
在本教程中,您将了解如何引入和构建您最具特色的Python XGBoost模型。
XGBoost可以提供比其他机器学习模型算法更好的解决方案。实际上,自推出以来,它已经成为处理结构化数据的“最佳模型算法”。
XGBoost的独特之处是什么
- 性能和速度: 最初是基于C++构建的,其速度与其他聚类分类器相当。
- 核心计算可并行化 :由于核心XGBoost计算可并行化,因此可以利用多核计算机的计算能力。此外,它可以在GPU上并行化,并跨计算机集群进行并行化,使其能够在大型数据集上进行训练。
- 在许多基准数据集上始终优于其他方法算法: 在许多人工智能基准数据集上,它表现出更好的输出。
- 多样化的调优参数 :XGBoost内部具有用于scikit-learn兼容API、缺失值、正则化、交叉验证、用户定义的目标函数、树参数等的参数。
XGBoost(极端梯度提升)属于一族集成算法,并在其核心使用了梯度提升(GBM)框架。
本教程
- 在Python中安装XGBoost。
- 准备数据和训练XGBoost模型。
- 使用XGBoost模型进行预测。
逐步方法
- 安装XGBoost
- 下载数据集1。
- 准备和加载数据。
- 训练模型。
- 进行预测和评估模型。
- 综合所有内容并运行最终示例。
步骤1:在Python中安装XGBoost
在SciPy环境中,可以通过pip轻松安装Python中的XGBoost。
例如:
要安装的命令
pip install xgboost
更新XGBoost命令
pip install --upgrade xgboost
一种将最新的GitHub代码引入XGBoost的替代方法是通过克隆项目XGBoost并进行手动构建和安装。
例如,要在Mac OS X上构建没有多线程功能的XGBoost(通过MacPorts或自制libation之前安装了GCC),我们可以输入以下命令:
git clone ---recursive https://github.com/dml/xgboost
cd xgboost
cp makes/minimum.mk .//config.mk
make -j4
cd python-package
python setup.py install
步骤2:问题描述
本教程将使用Pima印第安人的糖尿病起始数据集。
该数据集包含8个数据因素,描述患者的临床细节,以及一个结果变量,用于显示患者是否在5年内出现糖尿病起始。
这是一个适合首次使用XGBoost模型的良好数据集,因为所有的数据因素都是数值型的,而且问题是一个简单的二元分类问题。它不适合XGBoost算法,因为它是一个相对较小的数据集,而且是一个容易证明的问题。
下载这个数据集,并将其放置在您当前的工作目录中,文件名为”pima-Indians–diabetes.csv”。
怀孕 | 血糖水平 | 血压 | 皮肤厚度 | 胰岛素水平 | 体重指数 | 糖尿病家族史 | 年龄 | 结果 |
---|---|---|---|---|---|---|---|---|
6 | 148 | 72 | 35 | 0 | 33.6 | 0.627 | 50 | 1 |
1 | 86 | 66 | 78 | 0 | 76.6 | 0.461 | 41 | 0 |
8 | 184 | 64 | 0 | 0 | 74.4 | 0.677 | 47 | |
98 | 76 | 97 | 117 | 55.2 | 0.254 | 51 | 1 | |
0 | 0 | 0 | 46.4 | 0.144 | 78 | 0 | ||
7 | 187 | 70 | 46 | 644 | 40.6 | 0.168 | 64 | 1 |
8 | 176 | 86 | 0 | 0 | 0 | 0.747 | 64 | 1 |
4 | 110 | 87 | 0 | 0 | 47.6 | 0.181 | 40 | 0 |
10 | 168 | 74 | 0 | 0 | 48 | 0.647 | 44 | 1 |
10 | 148 | 80 | 0 | 0 | 77.1 | 1.441 | 67 | 0 |
1 | 188 | 60 | 74 | 846 | 40.1 | 0.488 | 68 | 1 |
6 | 166 | 77 | 18 | 176 | 76.8 | 0.687 | 61 | 1 |
7 | 100 | 0 | 0 | 0 | 40 | 0.484 | 47 | 1 |
4 | 176 | 88 | 41 | 746 | 48.4 | 0.704 | 77 | 0 |
8 | 88 | 84 | 0 | 0 | 46.4 | 0.488 | 60 | 0 |
7 | 186 | 80 | 0 | 0 | 48.8 | 0.461 | 41 | 1 |
8 | 118 | 80 | 46 | 0 | 78 | 0.764 | 78 | 1 |
11 | 144 | 84 | 44 | 146 | 46.6 | 0.764 | 163 | 98 | 0 | 0 | 35.7 | 0.183 | 66 | 1 |
117 | 87 | 0 | 0 | 44.1 | 0.447 | 48 | 0 | |
6 | 108 | 76 | 76 | 0 | 46 | 0.646 | 60 | 0 |
4 | 168 | 76 | 46 | 746 | 41.6 | 0.861 | 78 | 1 |
4 | 88 | 68 | 11 | 64 | 74.8 | 0.767 | 77 | 0 |
6 | 87 | 87 | 0 | 0 | 18.8 | 0.188 | 78 | 0 |
10 | 177 | 78 | 41 | 0 | 77.6 | 0.617 | 46 | 0 |
4 | 104 | 60 | 44 | 187 | 74 | 0.866 | 44 | 0 |
步骤3:加载和准备数据
在本部分,我们将整理文档中的信息,并为准备和评估XGBoost模型做好准备。
准备ML模型最常见的方式包括使用ML算法(即学习算法)提供训练数据。训练数据应包含正确的响应,这被称为目标属性。
我们将开始导入在本教程中需要使用的类和函数。
例如:
from numpy import loadtxt
from xgboost import XGBClassifier
from sklearn.model_selection import train, test, split
from sklearn.metrics import accuracy_score
loadtext().
#loading data
dataset1 = loadtxt('pima--indians--diabetes.csv', delimiter=",")
# spliting data into (Y) output patterns and (X) input patterns
X = dataset1[:,0:8]
Y = dataset1[:,8]
# spliting data into train and test sets
Seed1 = 7
test_sizes = 0.33
X1_train , X1_test , y1_train , y1_test= train_test_split(X, Y, test_sizes = test_sizes, random_state=seed1)
说明:
接下来,使用NumPy函数将CSV文件加载为NumPy数组。
现在将列(特征或属性)分离为(Y)输出模式和(X)输入模式。我们可以通过使用NumPy格式并指定列的索引来实现此目的。
最后,我们应该将其分为测试集和准备集。准备集将用于建立XGBoost模型,测试集将用于进行新的预测,从而评估模型的准确性。
我们将使用scikit-learn库中的train_test_split()函数。我们还为随机数生成器指定种子,以便每次执行此模型时都获得相同的数据分割。
步骤4:训练XGBoost模型
说明:
XGBoost提供了一个封装类,允许在scikit-learn框架中将模型视为分类器或回归器。
这意味着XGBoost模型可以完全使用scikit-learn库。
对于分类,XGBoost模型被称为XGBClassifier。我们可以创建并适应于我们的训练数据集。使用scikit-learn API和model.fit()函数来拟合模型。
对于训练模型,可以在构造函数的参数列表中传递参数。因此,在这里,我们使用了合理的默认值。并且通过打印模型,我们可以查看训练过的XGBoost模型的数据。
例如:
# fiting model no training data
model = XGBClassifier()
model.fit(X1_train , y1_train)
print(model)
步骤5:使用XGBoost模型进行预测
我们可以使用适应模型对测试数据集1进行预测。
例如:
# make predictions for test data
y_prediction = model.predict(X1_test )
predictions = [round(value) for value in y_prediction]
# evaluating predictions
Accuracy1 = accuracy_score(y1_test , predictions)
print("Accuracy: %.2f%%" % (accuracy1 * 100.0))
解释:
我们利用scikit-learn工具模型进行预测。
由于这是一个双分类问题,每个预测都是数据模型属于高质量的可能性。XGBoost模型的预测结果是准确的概率值。我们可以通过将它们调整为1或0,将它们转换为二进制类别值。
现在,要对数据进行预测,我们需要使用已拟合的模型。为了确定预测的准确性,我们将预测值与实际值进行比较。我们使用scikit-learn库中的 accuracy_score() 函数来确定准确性水平。
步骤6:整合所有先前的步骤
源代码:
from numpy import loadtxt
from xgboost import XGBClassifier
from sklearn.model_selection import train, test, split
from sklearn.metrics import accuracy_score
# loading data
dataset1 = loadtxt('pima--indians--diabete.csv', delimiter = ",")
# spliting data into X and y
X1 = dataset1[:,0:8]
Y1 = dataset1[:,8]
# spliting data into test and train sets
seed1 = 7
test_sizes = 0.33
X1_train , X1_test , y1_train , y1_test= train_test_split(X1, Y1, test_sizes=test_sizes, random_state=seed1)
model = XGBClassifier()
model.fit(X1_train , y1_train )
# making prediction for test data
y_prediction = model.predict(X1_test )
prediction = [round(value) for value in y_prediction]
accuracy1 = accuracy_score(y1_test , prediction)
print("Accuracy = %.2f%" % (accuracy1 * 100.0))
注意:考虑到评估系统的想法或计算或数学结果准确性的对比,结果可能会波动。我们可以运行模型几次并找出典型结果。
输出:
运行此模型会得出以下结果。
Accuracy = 77.95%
这是一个关于这个问题的相当准确的得分,这是我们预期的,考虑到模型的能力和问题的潜在复杂性。
结论
在这篇文章中,您了解了如何在Python中培养您最难忘的XGBoost模型。
具体来说,您学到了:
- 如何在您的系统上安装XGBoost以便在Python中使用。
- 如何使用scikit-learn库进行预测和评估已经训练过的XGBoost模型的性能。
- 如何准备数据并在标准的AI数据集上训练您最难忘的XGBoost模型。