赞
踩
训练集:用于训练模型
验证集:模型训练过程中单独留出的样本集,用于初步查看模型效果,是否过拟合,进一步调参
测试集:用来评估模最终模型的泛化能力,但不能作为调参、选择特征等算法相关的选择的依据。一般取与训练和测试不同时间段的数据,查看模型实际应用效果及随时间变化情况。
三类数据构建的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 # 矩阵形式特征
模型构建代码案例:
- '''
- 注意此处是构建二分类模型,使用包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:随机种子
- # 训练阶段,在模型拟合时加入验证数据
- 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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。