1.首先导入包

import xgboost as xgb

2.使用以下的函数实现交叉验证训练xgboost。

bst_cvl = xgb.cv(xgb_params, dtrain, num_boost_round=50,
           nfold=3, seed=0, feval=xg_eval_mae, maximize=False, early_stopping_rounds=10)

3.cv参数说明:函数cv的第一个参数是对xgboost训练器的参数的设置,具体见以下

xgb_params = {
'seed': 0,
'eta': 0.1,
'colsample_bytree': 0.5,
'silent': 1,
'subsample': 0.5,
'objective': 'reg:linear',
'max_depth': 5,
'min_child_weight': 3
}

参数说明如下:

Xgboost参数

  • 'booster':'gbtree',
  • 'objective': 'multi:softmax', 多分类的问题
  • 'num_class':10, 类别数,与 multisoftmax 并用
  • 'gamma':损失下降多少才进行分裂,gammar越大越不容易过拟合。
  • 'max_depth':树的最大深度。增加这个值会使模型更加复杂,也容易出现过拟合,深度3-10是合理的。
  • 'lambda':2, 控制模型复杂度的权重值的L2正则化项参数,参数越大,模型越不容易过拟合。
  • 'subsample':0.7, 随机采样训练样本
  • 'colsample_bytree':0.7, 生成树时进行的列采样
  • 'min_child_weight':正则化参数. 如果树分区中的实例权重小于定义的总和,则停止树构建过程。
  • 'silent':0 ,设置成1则没有运行信息输出,最好是设置为0.
  • 'eta': 0.007, 如同学习率
  • 'seed':1000,
  • 'nthread':7, cpu 线程数

4.cv参数说明:dtrain是使用下面的函数DMatrix得到的训练集

dtrain = xgb.DMatrix(train_x, train_y)

5.cv参数说明:feval参数是自定义的误差函数

def xg_eval_mae(yhat, dtrain):
y = dtrain.get_label()
return 'mae', mean_absolute_error(np.exp(y), np.exp(yhat))

6.cv参数说明:nfold是交叉验证的折数, early_stopping_round是多少次模型没有提升后就结束, num_boost_round是加入的决策树的数目。

7. bst_cv是cv返回的结果,是一个DataFram的类型,其列为以下列组成

8.自定义评价函数:具体见这个博客:https://blog.csdn.net/wl_ss/article/details/78685984

 def customedscore(preds, dtrain):
label = dtrain.get_label()
pred = [int(i>=0.5) for i in preds]
confusion_matrixs = confusion_matrix(label, pred)
recall =float(confusion_matrixs[0][0]) / float(confusion_matrixs[0][1]+confusion_matrixs[0][0])
precision = float(confusion_matrixs[0][0]) / float(confusion_matrixs[1][0]+confusion_matrixs[0][0])
F = 5*precision* recall/(2*precision+3*recall)*100
return 'FSCORE',float(F)

这种自定义的评价函数可以用于XGboost的cv函数或者train函数中的feval参数

还有一种定义评价函数的方式,如下

  

def mae_score(y_ture, y_pred):
return mean_absolute_error(y_true=np.exp(y_ture), y_pred=np.exp(y_pred))

这种定义的函数可以用于gridSearchCV函数的scorning参数中。

xgboost调参步骤

第一步:确定n_estimators参数

首先初始化参数的值

xgb1 = XGBClassifier(max_depth=3,
learning_rate=0.1,
n_estimators=5000,
silent=False,
objective='binary:logistic',
booster='gbtree',
n_jobs=4,
gamma=0,
min_child_weight=1,
subsample=0.8,
colsample_bytree=0.8,
seed=7)

用cv函数求得参数n_estimators的最优值。

cv_result = xgb.cv(xgb1.get_xgb_params(),
dtrain,
num_boost_round=xgb1.get_xgb_params()['n_estimators'],
nfold=5,
metrics='auc',
early_stopping_rounds=50,
callbacks=[xgb.callback.early_stop(50),
xgb.callback.print_evaluation(period=1,show_stdv=True)])

第二步、确定max_depth和min_weight参数

param_grid = {'max_depth':[1,2,3,4,5],
'min_child_weight':[1,2,3,4,5]}
grid_search = GridSearchCV(xgb1,param_grid,scoring='roc_auc',iid=False,cv=5) grid_search.fit(train[feature_name],train['label']) print('best_params:',grid_search.best_params_)
print('best_score:',grid_search.best_score_)

第三步、gamma参数调优

首先将上面调好的参数设置好,如下所示

xgb1 = XGBClassifier(max_depth=2,
learning_rate=0.1,
n_estimators=33,
silent=False,
objective='binary:logistic',
booster='gbtree',
n_jobs=4,
gamma=0,
min_child_weight=9,
subsample=0.8,
colsample_bytree=0.8,
seed=7)

然后继续网格调参

param_grid = {'gamma':[1,2,3,4,5,6,7,8,9]}
grid_search = GridSearchCV(xgb1,param_grid,scoring='roc_auc',iid=False,cv=5) grid_search.fit(train[feature_name],train['label'])
print('best_params:',grid_search.best_params_)
print('best_score:',grid_search.best_score_)

第四步、调整subsample与colsample_bytree参数

param_grid = {'subsample':[i/10.0 for i in range(5,11)],
'colsample_bytree':[i/10.0 for i in range(5,11)]}
grid_search = GridSearchCV(xgb1,param_grid,scoring='roc_auc',iid=False,cv=5) grid_search.fit(train[feature_name],train['label'])
print('best_params:',grid_search.best_params_)
print('best_score:',grid_search.best_score_)

第五步、调整正则化参数

param_grid = {'reg_lambda':[i/10.0 for i in range(1,11)]}
grid_search = GridSearchCV(xgb1,param_grid,scoring='roc_auc',iid=False,cv=5) grid_search.fit(train[feature_name],train['label'])
print('best_params:',grid_search.best_params_)
print('best_score:',grid_search.best_score_)

最后我们使用较低的学习率以及使用更多的决策树,可以用CV来实现这一步骤

xgb1 = XGBClassifier(max_depth=2,
learning_rate=0.01,
n_estimators=5000,
silent=False,
objective='binary:logistic',
booster='gbtree',
n_jobs=4,
gamma=2.1,
min_child_weight=9,
subsample=0.8,
colsample_bytree=0.8,
seed=7,
)
  1. 仅仅靠参数的调整和模型的小幅优化,想要让模型的表现有个大幅度提升是不可能的。
  2. 要想让模型的表现有一个质的飞跃,需要依靠其他的手段,诸如,特征工程(feature egineering) ,模型组合(ensemble of model),以及堆叠(stacking)等

具体的关于调参的知识请看以下链接:

https://www.cnblogs.com/TimVerion/p/11436001.html

http://www.pianshen.com/article/3311175716/

xgboost的使用的更多相关文章

  1. 搭建 windows(7)下Xgboost(0.4)环境 (python,java)以及使用介绍及参数调优

    摘要: 1.所需工具 2.详细过程 3.验证 4.使用指南 5.参数调优 内容: 1.所需工具 我用到了git(内含git bash),Visual Studio 2012(10及以上就可以),xgb ...

  2. 在Windows10 64位 Anaconda4 Python3.5下安装XGBoost

    系统环境: Windows10 64bit Anaconda4 Python3.5.1 软件安装: Git for Windows MINGW 在安装的时候要改一个选择(Architecture选择x ...

  3. 【原创】xgboost 特征评分的计算原理

    xgboost是基于GBDT原理进行改进的算法,效率高,并且可以进行并行化运算: 而且可以在训练的过程中给出各个特征的评分,从而表明每个特征对模型训练的重要性, 调用的源码就不准备详述,本文主要侧重的 ...

  4. Ubuntu: ImportError: No module named xgboost

    ImportError: No module named xgboost 解决办法: git clone --recursive https://github.com/dmlc/xgboost cd ...

  5. windows下安装xgboost

    Note that as of the most recent release the Microsoft Visual Studio instructions no longer seem to a ...

  6. xgboost原理及应用

    1.背景 关于xgboost的原理网络上的资源很少,大多数还停留在应用层面,本文通过学习陈天奇博士的PPT 地址和xgboost导读和实战 地址,希望对xgboost原理进行深入理解. 2.xgboo ...

  7. xgboost

    xgboost后面加了一个树的复杂度 对loss函数进行2阶泰勒展开,求得最小值, 参考链接:https://homes.cs.washington.edu/~tqchen/pdf/BoostedTr ...

  8. 【转】XGBoost参数调优完全指南(附Python代码)

    xgboost入门非常经典的材料,虽然读起来比较吃力,但是会有很大的帮助: 英文原文链接:https://www.analyticsvidhya.com/blog/2016/03/complete-g ...

  9. 【原创】Mac os 10.10.3 安装xgboost

    大家用的比较多的是Linux和windows,基于Mac os的安装教程不多, 所以在安装的过程中遇到很多问题,经过较长时间的尝试,可以正常安装和使用, [说在前面]由于新版本的Os操作系统不支持op ...

  10. 机器学习(四)--- 从gbdt到xgboost

    gbdt(又称Gradient Boosted Decision Tree/Grdient Boosted Regression Tree),是一种迭代的决策树算法,该算法由多个决策树组成.它最早见于 ...

随机推荐

  1. 【转】用win7(64位)远程桌面连接linux(Ubuntu14.04)详细教程

    转自:http://blog.csdn.net/qq754438390/article/details/50042511 亲测,确实是可以.非常感谢原博. 用win7(64位)远程桌面连接linux( ...

  2. 题解 小B的询问

    题面 解析 这就是道莫队模板啊啊!! 因此,似乎并没有什么好讲的. 莫队算法传送门 我们只需要将询问存下来, 离线处理就行了. 还是上代码吧: #include<bits/stdc++.h> ...

  3. linux运维、架构之路-K8s数据管理

    一.Volume介绍 容器和Pod是短暂的,它们的生命周期可能很短,会被频繁的销毁和创建,存在容器中的数据会被清除,为了持久化保存容器的数据,k8s提供了Volume.Volume的生命周期独立于容器 ...

  4. [人物存档]【AI少女】【捏脸数据】时尚

    点击下载(城通网盘):3in1.zip 点击下载(城通网盘):存档.zip

  5. 激活WebStorm2017.3.1

    亲测有效,测试日期:20181202 转发自:https://blog.csdn.net/bjzhaoxiao/article/details/81486490

  6. 7.Java Web的数据库操作

    一.环境配置(基于MySQL数据库) 1.下载MySQL数据库 2.下载安装 Navicat,破解方法去吾爱破解网站查询 第一次连接mysql时可能会出现错误,可能是因为二者对密码的编码方法不一致,可 ...

  7. Android中的“再按一次返回键退出程序”代码实现

    1 用户在退出应用前给出一个提示是很有必要的,因为可能是用户并不真的想退出,而只是一不小心按下了返回键,大部分应用也是这么做的,但也有些应用的做法是在应用退出去前给出一个Dialog,我觉得这样不太友 ...

  8. SRS之SrsRtmpServer::connect_app详解

    1. connect('live') 2. SrsRtmpServer::connect_app 位于 srs_rtmp_stack.cpp.在 SRS 的 RTMP 连接处理线程 conn 中,当与 ...

  9. DL反向传播理解

    作者:寒小阳 时间:2015年12月. 出处:http://blog.csdn.net/han_xiaoyang/article/details/50321873 声明:版权所有,转载请联系作者并注明 ...

  10. 【2】PRD文档介绍

    首先,我想说,题主是一个不严肃的人(严肃脸),所以每次干个啥事之前我都喜欢唠唠嗑,说说废话,沟通沟通感情,曾经以为自己将会成为一个幻想中的产品经理那般大展身手,作为非计算机专业出身的应届生,后来才发现 ...