这一节主要介绍以下使用XGBoost算法再CPU/GPU版本下代码的编写基本流程,主要分为以下几个部分:
- 构造训练集/验证
- 算法参数设置
- XGBoost模型训练/验证
- 模型预测
本节主要面对的任务场景是回归任务,有关多分类的任务见:XGBoost–4–代码编写基本流程–分类
另外,除上述几个部分外,会涉及到sklearn用于加载数据集以及最后的模型预测的评价指标计算;
导入使用到的库:
import time
import xgboost as xgb
from sklearn.datasets import load_diabetes, load_boston
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, mean_absolute_error
from libs.xgboost_plot import plot_training_merror
1. 构造数据集/验证集
使用sklearn
导入数据集,并进一步拆分成训练集、验证;
# 使用sklearn加载数据集
diabetes = load_boston()
data, labels = diabetes.data, diabetes.target
# 拆分数据集
x_train, x_test, y_train, y_test = train_test_split(data, labels, test_size=0.2, random_state=7)
print("x_train: {}, x_test: {}".format(x_train.shape, x_test.shape))
构造XGBoost算法需要的输入格式:
dtrain = xgb.DMatrix(x_train, y_train) # 训练集
dtest = xgb.DMatrix(x_test, y_test) # 验证集
evals = [(dtrain, 'train'), (dtest, 'val')] # 训练过程中进行验证
2. 算法参数设置
算法模型参数设置,详情见:XGBoost Parameters
params = {
'tree_method': "gpu_hist",
'booster': 'gbtree',
'objective': 'reg:squarederror',
'max_depth': 6,
'eval_metric': 'mae',
'eta': 0.01,
'verbosity': 0,
'gpu_id': 0
}
简单介绍以下:
tree_method
,gpu_hist
表示使用GPU运算,影响的可以使用hist
利用CPU计算;objective
,目标函数eval_metric
: 训练过程中的评估方法
3. XGBoost模型训练/验证
模型训练、保存模型、绘制mae
图像;
s_time = time.time()
train_res = {}
model = xgb.train(params, dtrain, num_boost_round=300,
evals=evals,
evals_result=train_res)
print("模型训练耗时: {}".format(time.time() - s_time))
# 模型保存
save_path = "./saved_model/model_regression.model"
model.save_model(save_path)
# train/val的merror绘图
merror_img_path = "./test/error.png"
plot_training_merror(train_res, merror_img_path, type='mae')
4. 模型预测
模型预测,打印预测结果:
pred_data = model.predict(dtest)
res = mean_absolute_error(y_test, pred_data)
print(res)
...
[298] train-mae:1.47924 val-mae:2.60373
[299] train-mae:1.46995 val-mae:2.59919
模型训练耗时: 1.8448662757873535
2.5991851900138103
5. 结语
XGBoost最最最最基本的回归任务基本代码编写流程就是这样了,当然了,这是最最最基本的了:
- 构建数据集
- 参数设置
- 模型训练、保存、预测;
同样地,在实际的业务应用中,每一步都存在很多点值得深究;
例如,有一句话说特征工程的高度就决定了算法模型的精度,那么在构造数据集之前的特征工程的重要性不言而喻;
另外,在参数设置过程中,某些参数的使用对于训练的过程也起到了至关重要的作用,例如树深度、目标函数、评价方法、正则化项等等很多东西;
所以说,还是那句话,知其然知其所以然,本节仅仅用于说明在回归任务中编写XGBoost算法模型的基本流程,接下来一起向下深究,解决好我们所面对的实际任务。