当前位置:   article > 正文

Python构建xgboost模型-训练、测试、验证数据及构建,模型训练,及模型调参介绍_python xgboost实现

python xgboost实现

1、在构建模型之前首先需要确定模型构建所需的数据集

训练集:用于训练模型
验证集:模型训练过程中单独留出的样本集,用于初步查看模型效果,是否过拟合,进一步调参
测试集:用来评估模最终模型的泛化能力,但不能作为调参、选择特征等算法相关的选择的依据。一般取与训练和测试不同时间段的数据,查看模型实际应用效果及随时间变化情况。

三类数据构建的Python代码案例:

  1. # 先根据有业务价值的时间将测试数据与训练、验证数据拆分
  2. data_model_train = data[data['time'] <= '2023-12-23']
  3. data_model_time_test = data[data['time'] > '2023-12-23']
  4. # 处理跨时间测试数据
  5. ## 提取行标签、结果标签y
  6. data_model_time_test_index = data_model_time_test['index']
  7. data_model_time_test_y = data_model_time_test['y']
  8. ## 剔除模型验证时不需要的字段(需与最终模型训练所需字段保持一致,例如行标签列、结果标签列剔除)
  9. delete_list = ['column1','column2','column3']
  10. time_test_x = data_model_time_test.drop(delete_list, axis=1).values # 其中values将数据表转换成矩阵入模型
  11. time_test_y = data_model_time_test_y
  12. # 处理训练、验证数据(一般将数据进行随机7:3分)
  13. ## 数据随机7:3分
  14. train_x, test_x, train_y, test_y = train_test_split(data_model_train, data_model_train.y, test_size=0.3, random_state=0)
  15. ## 保存训练、测试数据行标签,及结果标签y(后续测试用)
  16. train_x_index = train_x['index']
  17. train_y
  18. test_x_index = test_x['index']
  19. test_y
  20. ## 剔除模型测试、训练时不需要的指标数据
  21. drop_list = ['column1','column2','column3']
  22. model_train_x = train_x.drop(drop_list, axis=1).values # 矩阵形式特征
  23. model_test_x = test_x.drop(drop_list, axis=1).values # 矩阵形式特征

2、Xgboost模型构建

模型构建代码案例:

  1. '''
  2. 注意此处是构建二分类模型,使用包XGBClassifier
  3. 如果不是二分类(结果y是连续值),使用包XGBRegressor
  4. '''
  5. clf_model = XGBClassifier(learning_rate = 0.25, n_estimators = 60, max_depth = 3, min_child_weight = 1 , gamma = 0.1 , subsample = 0.9 , colsample_bytree = 0.8 , objective = 'binary:logistic' , reg_alpha = 1 , reg_lambda = 1 , seed = 27 ,
  6. scale_pos_weight=2)
  7. # 使用训练数据进行模型训练
  8. clf_model.fit(model_train_x, model_train_y)

xgboost模型参数介绍:

learning_rate:学习率,可以缩减每一步的权重值,使得模型更加健壮。典型值一般设置为:0.01-0.2,值越小越容易过拟合。

n_estimators:迭代次数,迭代次数越多,越容易出现过拟合问题

max_depth:树的最大深度,缺省值为6。树的深度越大,越容易过拟合,通常取值:3-10

min_child_weight:子节点中最小的样本权重和。如果一个叶子节点的样本权重和小于该设定值,则拆分过程结束。在线性回归模型中,这个参数是指建立每个模型所需要的最小样本数。即调大这个参数能够控制过拟合。取值范围为: [0,∞]

gamma:在树的叶子节点上进行进一步分区所需的最小损失减少。越大gamma,算法将越保守。模型在默认情况下,对于一个节点的划分只有在其loss function 得到结果大于0的情况下才进行,而gamma 给定了所需的最低loss function的值,在模型中应该进行调参。范围:[0,∞]

subsample:用于训练模型的子样本占整个样本集合的比例。如果设置为0.5则意味着XGBoost将随机的从整个样本集合中抽取出50%的子样本建立树模型,这能够防止过拟合。取值范围为:(0,1]

colsample_bytree:列采样率,也就是特征采样率

objective:指定学习任务和相应的学习目标,这个参数定义需要被最小化的损失函数,此处 binary:logistic表示二元分类的逻辑回归,输出概率

alpha[默认= 0,别名:reg_alpha]:L1正则化权重项(逻辑回归)。增加此值将使模型更加保守

lambda[默认= 1,别名:reg_lambda]:L2正则化权重项(线性回归)。增加此值将使模型更加保守

scale_pos_weight [默认值= 1]:控制正负权重的平衡,这对于不平衡的类别很有用。

seed:随机种子

3、利用验证数据调整参数

  1. # 训练阶段,在模型拟合时加入验证数据
  2. train_data = [model_train_x, model_train_y]
  3. eval_data = [model_test_x, model_test_y]
  4. clf_model.fit(model_train_x, model_train_y, eval_metric = 'auc', eval_set=[train_data, eval_data]) # train_data训练数据集,eval_data测试数据集,其中eval_metric可选参数:auc、rmse、logloss

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/604584
推荐阅读
相关标签
  

闽ICP备14008679号