前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >干货|XGBoost进阶—调参+实战

干货|XGBoost进阶—调参+实战

作者头像
AI部落联盟
发布2019-05-27 21:03:10
2K0
发布2019-05-27 21:03:10
举报
文章被收录于专栏:AI部落联盟AI部落联盟

1.通用参数

宏观功能可以理解为整体的功能。

1.1 booster

参数默认值是gbtree,就是每次迭代的模型选择,一共有两种:

gbtree:基于决策树的模型

gbliner:线性模型(模型效果不如gbtree,所以用的比较少)

1.2 silent

参数默认值是0,控制的是模型每次的输出信息。参数有两种选择:

1,silent模式开启,模型不会输出任何信息。

0,silent模式关闭(一般我们选择slient=0,因为这样能更好的帮助我们理解模型)

1.3 nthread

看到这个参数的第一反应就猜到是和多线程相关的,果不其然,该参数是用来控制应当输入系统的核数。如果不输入这个参数的话,算法自动检测会默认使用CPU的全部核。

2.booster参数

这里的booster参数是基于1.1的booster的选择来看的,其中gbtree的效果要远好于gblinear。

2.1 eta

参数默认值是0.3,我的理解是该值的作用是减少每一步的权重(类似于之前介绍过的Shinkage方法),以便于之后的学习有更多的学习空间,典型的取值范围是[0.01-0.2]

2.2 min_child_weight

参数默认值是1,决定的是最小叶子节点的样本权重和,当该值较大的时候,能有效的避免学习到样本的局部特征,能够有效的避免过拟合。但是如果值设置的太大,则会导致欠拟合。该参数需要根据cv(coefficient of variation)值来调整。

2.3 max-depth

参数默认值是6,该值控制的是决策树的最大深度,用来避免过拟合。试想一颗决策树的深度越大,那么这颗决策树划分样本的粒度也就更加细,也就更能学习到样本的局部特征。该参数同2.2一样,需要根据cv(coefficient of variation)值来调整。典型的取值范围是[3-10]。

2.4 max-leaf-nodes

直观解释就是:树上最大的节点或叶子数。该参数的作用和2.3类似,因此可以替代参数2.3,因为它们都用于避免决策树的过拟合。试想一颗深度为n的二叉树,其叶子节点数最多为n^2。

2.5 gamma

参数默认值是0,我们都知道,XGBoost在分裂节点时都会看分裂后损失函数的增益,只有增益大于一个阈值,才会对节点进行分裂。该参数指定的就是那个阈值,该参数越大,则表示决策树越难进行分裂,也就意味着算法越保守。该参数和损失函数息息相关。

2.6 max_delta_step

参数默认值是0,该参数限制的是每棵树权重改变的最大步长。如果该参数设置为0,则表示没有约束,如果其被赋予了某个正值,则会让算法更加保守。原文说该参数一般用不到,但是在样本不平衡的情况下,对逻辑回归很有帮助(有待测试)。

2.7 subsample

参数默认值是1,之前的文章中提到过随机采样,该参数控制的就是对于每棵树,随机采样的比例。减少这个参数的值,同样会使算法更加保守,避免过拟合,但是如果设置的过于小,可能会导致欠拟合。典型的取值范围[0.5-1.0]。

2.8 colsample_bytree

参数默认值是1,用来控制每棵树随机采样的列数的占比(每一列是一个特征)。典型的取值范围[0.5-1.0]。

2.9 colsample_bytree

参数默认值是1,用来控制树的每一级的每一次分裂,对列数的采样的占比。和2.7的作用相同。

2.10 lambda

参数默认值是1,权重的L2正则化项(类似于Ridge Regression)该参数是用来控制XGBoost中的正则化部分的,一般很少用,但是在减少过拟合方面,该参数应该还是能起到很大作用的。

2.11 alpha

参数默认值是1,权重的L1正则化项(类似于Lasso Regression),原文说该参数能应用到很高维度的情况,可以让算法的速度更快(有待测试)。

2.12 scale_pos_weight

参数默认值是1,该参数用于样本十分不平衡时,把该参数设置为一个正值,可以使算法很快收敛。

3.学习目标参数

这些参数用来控制理想的优化目标和每一步结果的度量方法。

3.1 objective

参数默认值是reg:linear,该参数就是用来定义需要被最小化的损失函数的,最常用的值有如下几个:

  • binary:logistic 二分类的逻辑回归,输出的是分类的概率,不是具体的类别。
  • multi:softmax 返回的是具体的类别,不是概率。在使用该参数的情况下,还需要设置另外一个参数:num_class,具体划分的类别数目。
  • multi:softprob multi:softmax一样,只不过返回的是样本属于各个类别的概率,而不再是具体的类别。

3.2 eval_metric

参数默认值会随着3.1参数的取值变化而变化,如果是回归问题,默认值是rmse,如果是分类问题,默认值是mae。

典型取值如下:

  • rmse(均方根误差)
  • mae(平均绝对误差)
  • logloss(负对数似然函数值)
  • error(二分类误差,阈值0.5)
  • merror(多分类错误率)
  • mlogloss(多分类logloss损失函数)
  • auc(曲线下面积)

3.3 seed

参数默认值是0,随机数的种子,设置它可以复现随机数的结果,也可以用于调整参数。


参数说了这么多,但还没说完,以后会根据实战的内容不断更新。接下来就是实战部分:

代码语言:javascript
复制
import xgboost as xgbfrom sklearn.metrics import accuracy_scorefrom xgboost import XGBClassifier
path = './data/'#准备数据 数据下载在xgboost的github上 /demo/data/dtrain = xgb.DMatrix(path+'agaricus.txt.train')dtest = xgb.DMatrix(path+'agaricus.txt.test')#准备参数param = {'max_depth':2,'eta':1,'silent':0,'objective':'binary:logistic'}#参数说明'''max_depth:树的最大深度 缺省值为6 取值范围[1,+无穷]eta:防止过拟合在更新的时候使用的收缩步长 缺省值为0.3 取值[0,1] 其实就是学习率silent:0表示运行时打印运行信息,1表示不打印运行信息 缺省值为0objective:定义学习任务和学习目标 binary:logistic表示二分类逻辑回归 输出为概率'''#设置Boosting的迭代轮数 也就是最后会用到多少颗树num_round = 3#训练bst = xgb.train(param,dtrain,num_round)
def evaluate(data,model):    pre = model.predict(data)    pre_res = [round(res) for res in pre]    y = data.get_label()    acc = accuracy_score(y,pre_res)    return acc
acc_train = evaluate(dtrain,bst)acc_test = evaluate(dtest,bst)print(acc_train)print(acc_test)

为了方便理解,以及篇幅限制,在这里就不放所有代码了,完整代码包括一般模式,xgboost和sklearn结合 fit predict方式,模型可视化,学习曲线,K折交叉验证,GridSearch CV等等,持续更新中。。。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI部落联盟 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.通用参数
    • 2.booster参数
      • 3.学习目标参数
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档