机器学习实战 | XGBoost建模应用详解

本文详细介绍了XGBoost的安装步骤,数据加载与处理技巧,以及不同建模方式的应用,包括内置建模、预估器接口和高级功能如参数调优、特征重要性和并行训练。适合初学者和进阶者深入理解XGBoost的实战应用。

作者:韩信子@ShowMeAI
教程地址https://www.showmeai.tech/tutorials/41
本文地址https://www.showmeai.tech/article-detail/204
声明:版权所有,转载请联系平台与作者并注明出处
收藏ShowMeAI查看更多精彩内容


引言

XGBoost是eXtreme Gradient Boosting的缩写称呼,它是一个非常强大的Boosting算法工具包,优秀的性能(效果与速度)让其在很长一段时间内霸屏数据科学比赛解决方案榜首,现在很多大厂的机器学习方案依旧会首选这个模型。XGBoost在并行计算效率、缺失值处理、控制过拟合、预测泛化能力上都变现非常优秀。

本篇内容ShowMeAI展开给大家讲解XGBoost的工程应用方法,对于XGBoost原理知识感兴趣的同学,欢迎参考ShowMeAI的另外一篇原理文章 图解机器学习|XGBoost模型详解

1.XGBoost安装

XGBoost作为常见的强大Python机器学习工具库,安装也比较简单。

1.1 Python与IDE环境设置

XGBoost工具库建模应用详解; XGBoost安装; 4-1

python环境与IDE设置可以参考ShowMeAI文章 图解python | 安装与环境设置 进行设置。

1.2 工具库安装

(1) Linux/Mac等系统

这些系统下的XGBoost安装,大家只要基于pip就可以轻松完成了,在命令行端输入命令如下命令即可等待安装完成。

pip install xgboost

大家也可以选择国内的pip源,以获得更好的安装速度

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple xgboost

XGBoost工具库建模应用详解; XGBoost安装; 工具库安装; 4-2

(2) Windows系统

对于windows系统而言,比较高效便捷的安装方式是:在网址http://www.lfd.uci.edu/~gohlke/pythonlibs/ 中去下载对应版本的的XGBoost安装包,再通过如下命令安装。

pip install xgboost‑1.5.1‑cp310‑cp310‑win32.whl

2.XGBoost数据读取

应用XGBoost的第一步,需要加载所需的数据成为工具库所能支持的格式形态。XGBoost可以加载多种数据格式的数据用于训练建模:

  • libsvm格式的文本数据。
  • Numpy的二维数组。
  • XGBoost的二进制的缓存文件。加载的数据存储在对象DMatrix中。

XGBoost的SKLearn接口也支持对于Dataframe格式的数据(参考ShowMeAI的文章 Python数据分析|Pandas核心操作函数大全 进行更多了解)进行处理。

下面是不同格式的数据,XGBoost的加载方式。

  • 加载libsvm格式的数据
dtrain1 = xgb.DMatrix('train.svm.txt')
  • 加载二进制的缓存文件
dtrain2 = xgb.DMatrix('train.svm.buffer')
  • 加载numpy的数组
data = np.random.rand(5,10) # 5 entities, each contains 10 features
label = np.random.randint(2, size=5) # binary target
dtrain = xgb.DMatrix( data, label=label)
  • 将scipy.sparse格式的数据转化为 DMatrix 格式
csr = scipy.sparse.csr_matrix( (dat, (row,col)) )
dtrain = xgb.DMatrix( csr ) 
  • 将DMatrix格式的数据保存成XGBoost的二进制格式,在下次加载时可以提高加载速度,使用方式如下
dtrain = xgb.DMatrix('train.svm.txt')
dtrain.save_binary("train.buffer")
  • 可以用如下方式处理DMatrix中的缺失值
dtrain = xgb.DMatrix( data, label=label, missing = -999.0)
  • 当需要给样本设置权重时,可以用如下方式
w = np.random.rand(5,1)
dtrain = xgb.DMatrix( data, label=label, missing = -999.0, weight=w)

3.XGBoost不同建模方式

3.1 内置建模方式:libsvm格式数据源

XGBoost内置了建模方式,有如下的数据格式与核心训练方法:

  • 基于DMatrix格式的数据。
  • 基于xgb.train接口训练。

下面是官方的一个简单示例,演示了读取libsvm格式数据(成DMatrix格式)并指定参数建模的过程。

# 导入工具库
import numpy as np
import scipy.sparse
import pickle
import xgboost as xgb

# 从libsvm文件中读取数据,做二分类
# 数据是libsvm的格式,如下样本格式
#1 3:1 10:1 11:1 21:1 30:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 124:1
#0 3:1 10:1 20:1 21:1 23:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 120:1
#0 1:1 10:1 19:1 21:1 24:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 122:1
dtrain = xgb.DMatrix('./data/agaricus.txt.train')
dtest = xgb.DMatrix('./data/agaricus.txt.test')

# 超参数设定
# 主要是树深、学习率、目标函数
param = {
   
   'max_depth':2, 'eta':1, 'silent':1, 'objective':'binary:logistic' }

# 设定watchlist用于建模过程中观测模型状态
watchlist  = [(dtest,'eval'), (dtrain,'train')]
num_round = 2
bst = xgb.train(param, dtrain, num_round, watchlist)

# 使用模型预测
preds = bst.predict(dtest)

# 判断准确率
labels = dtest.get_label()
print('错误率为%f' % \
       (sum(1 for i in range(len(preds)) if int(preds[i]>0.5)!=labels[i]) /float(len(preds))))

# 模型存储
bst.save_model('./model/0001.model')

XGBoost工具库建模应用详解; 不同建模方式; 内置建模方式–libsvm; 4-3

[0]  eval-error:0.042831  train-error:0.046522
[1]  eval-error:0.021726  train-error:0.022263
错误率为0.021726

3.2 内置建模方式:csv格式数据源

下面的例子,输入的数据源是csv文件,我们使用大家熟悉的pandas工具库(参考ShowMeAI教程 数据分析系列教程数据科学工具速查 | Pandas使用指南)把数据读取为Dataframe格式,再构建Dmatrix格式输入,后续使用内置建模方式进行训练。

# 皮马印第安人糖尿病数据集 包含很多字段:怀孕次数 口服葡萄糖耐量试验中血浆葡萄糖浓度 舒张压(mm Hg) 三头肌组织褶厚度(mm) 
# 2小时血清胰岛素(μU/ ml) 体重指数(kg/(身高(m)^2) 糖尿病系统功能 年龄(岁)
import pandas as pd
data = pd.read_csv('./data/Pima-Indians-Diabetes.csv')
data.head()

XGBoost工具库建模应用详解; 不同建模方式; 内置建模方式–csv; 4-4

# 导入工具库
import numpy as np
import pandas as pd
import pickle
import xgboost as xgb
from sklearn.model_selection import train_test_split

# 用pandas读入数据
data = pd.read_csv('./data/Pima-Indians-Diabetes.csv')

# 做数据切分
train, test = train_test_split(data)

# 转换成Dmatrix格式
feature_columns = ['Pregnancies', 'Glucose', 'BloodPressure', 'SkinThickness'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ShowMeAI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值