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

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

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

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

# 先根据有业务价值的时间将测试数据与训练、验证数据拆分
data_model_train = data[data['time'] <= '2023-12-23']
data_model_time_test = data[data['time'] > '2023-12-23']

# 处理跨时间测试数据
## 提取行标签、结果标签y
data_model_time_test_index = data_model_time_test['index']
data_model_time_test_y = data_model_time_test['y']
## 剔除模型验证时不需要的字段(需与最终模型训练所需字段保持一致,例如行标签列、结果标签列剔除)
delete_list = ['column1','column2','column3']
time_test_x = data_model_time_test.drop(delete_list, axis=1).values        # 其中values将数据表转换成矩阵入模型
time_test_y = data_model_time_test_y

# 处理训练、验证数据(一般将数据进行随机7:3分)
## 数据随机7:3分
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)
## 保存训练、测试数据行标签,及结果标签y(后续测试用)
train_x_index = train_x['index']
train_y
test_x_index = test_x['index']
test_y

## 剔除模型测试、训练时不需要的指标数据
drop_list = ['column1','column2','column3']
model_train_x = train_x.drop(drop_list, axis=1).values                # 矩阵形式特征
model_test_x = test_x.drop(drop_list, axis=1).values                  # 矩阵形式特征

2、Xgboost模型构建

模型构建代码案例:

'''
注意此处是构建二分类模型,使用包XGBClassifier
如果不是二分类(结果y是连续值),使用包XGBRegressor
'''
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 ,
scale_pos_weight=2)
# 使用训练数据进行模型训练
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、利用验证数据调整参数

# 训练阶段,在模型拟合时加入验证数据
train_data = [model_train_x, model_train_y]
eval_data = [model_test_x, model_test_y]
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

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值