XGBoost--5--代码编写基本流程--回归

这一节主要介绍以下使用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_methodgpu_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算法模型的基本流程,接下来一起向下深究,解决好我们所面对的实际任务。

原文地址:https://www.cnblogs.com/chenzhen0530/p/13885239.html