xgboost调参

Xgboost参数

  • ‘booster’:‘gbtree’, 提升树
  • ‘objective’: ‘multi:softmax’, 多分类的问题
  • ‘num_class’:10, 类别数,与 multisoftmax 并用
  • ‘gamma’:损失下降多少才进行分裂-(即xgboost公式推导中的,类似于信息增益)
  • ‘max_depth’:12, 构建树的深度,越大越容易过拟合
  • ‘lambda’:2, 控制模型复杂度的权重值的L2正则化项参数,参数越大,模型越不容易过拟合。
  • ‘subsample’:0.7, 随机采样训练样本(每颗构造的树,训练数据是不一样的,随机选择部分数据,这里是70%)
  • ‘colsample_bytree’:0.7, 生成树时进行的列采样(随机选择部分特征)
  • ‘min_child_weight’:3, 孩子节点中最小的样本权重和。如果一个叶子节点的样本权重和小于min_child_weight则拆分过程结束
  • ‘silent’:0 ,设置成1则没有 运行信息 输出,最好是设置为0.
  • ‘eta’: 0.007, 如同学习率(一棵树对结果预测的权重)
  • ‘seed’:1000,
  • ‘nthread’:7, cpu 线程数

Xgboost API:

  • num_boost_round 建立的树个个数
  • nfold 交叉验证n折
  • feval 评估方法

调参

分组调节参数:

  • 模型复杂程度的参数
  • 评估方法参数
  • 数据采样策略
  • 学习率

前一步的参数调好之后,固定不变

  • Step 1: 选择一组初始参数
  • Step 2: 改变 max_depthmin_child_weight.
  • Step 3: 调节 gamma 降低模型过拟合风险.
  • Step 4: 调节 subsamplecolsample_bytree 改变数据采样策略.
  • Step 5: 调节学习率 eta.

Step 1: 这些参数对xgboost性能影响最大,因此,他们应该调整第一。我们简要地概述它们:

  • max_depth: 树的最大深度。增加这个值会使模型更加复杂,也容易出现过拟合,深度3-10是合理的。
  • min_child_weight: 正则化参数. 如果树分区中的实例权重小于定义的总和,则停止树构建过程(停止策略)。

Step 2: 调节 gamma去降低过拟合风险

  • 在固定以上最好取值的情况下,调节其他参数

Step 3: 调节样本采样方式 subsample 和 colsample_bytree

Step 4: 学习率与树个数

GridSearchCV

它存在的意义就是自动调参,只要把参数输进去,就能给出最优化的结果和参数。但是这个方法适合于小数据集,一旦数据的量级上去了,很难得出结果。这个时候就是需要动脑筋了。数据量比较大的时候可以使用一个快速调优的方法——坐标下降。它其实是一种贪心算法:拿当前对模型影响最大的参数调优,直到最优化;再拿下一个影响最大的参数调优,如此下去,直到所有的参数调整完毕。这个方法的缺点就是可能会调到局部最优而不是全局最优,但是省时间省力,巨大的优势面前,还是试一试吧,后续可以再拿bagging再优化。回到sklearn里面的GridSearchCV,GridSearchCV用于系统地遍历多种参数组合,通过交叉验证确定最佳效果参数。

常用方法:

grid.fit():运行网格搜索
grid_scores_:给出不同参数情况下的评价结果
best_params_:描述了已取得最佳结果的参数的组合
best_score_:成员提供优化过程期间观察到的最好的评分

# 先得到一个基准模型
dtrain = xgb.DMatrix(x_train, y_train)
        cv_rounds = xgb.cv(params=self.params, dtrain=dtrain, num_boost_round=self.num_boost_round,
                           nfold=nfold, feval=xg_eval_mae, maximize=False, early_stopping_rounds=10)

# 将要遍历的参数输入GridSearchCV-param_grid
xgb_param_grid = {'max_depth': list(range(4,9)), 'min_child_weight': list((1,3,6))}
xgb_param_grid['max_depth']                           

grid = GridSearchCV(XGBoostRegressor(eta=0.1, num_boost_round=50, colsample_bytree=0.5, subsample=0.5),
                param_grid=xgb_param_grid, cv=5, scoring=mae_scorer)

grid.fit(train_x, train_y.values) 
grid.grid_scores_, grid.best_params_, grid.best_score_

OUT:grid.best_score_:
{‘max_depth’: 8, ‘min_child_weight’: 6},
-1187.9597499123447)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值