source:https://www.jianshu.com/p/1083b6feb576

两种调用方式

  • 自身接口
  • 类似sklearn的接口

三种接口的调用方式见:添加链接描述
添加链接描述
Xgboost版本对比(原生版与sklearn接口版)

对比预测结果,原生xgb与sklearn接口的训练过程相同,结果也相同。
不同之处在于:

  1. 原生采用xgb.train()训练,sklearn接口采用model.fit() 。
  2. sklearn接口中的参数n_estimators在原生xgb中定义在xgb.train()的num_boost_round
  3. sklearnwatchlist为[(xtrain,ytrain),(xtest,ytest)]形式,而原生则是ain,‘train’),(dtest,‘test’)],在数据和标签都在DMatrix中,元组里可以定位输出时的名字。
  • 举例
    分别使用两个版本对同一个数据集进行测试
  1. 导入库
from sklearn.model_selection import train_test_split
from pandas import DataFrame
from sklearn import metrics
from sklearn.datasets  import  make_hastie_10_2
from xgboost.sklearn import XGBClassifier
import xgboost as xgb
import pandas as pd#准备数据,y本来是[-1:1],xgboost自带接口邀请标签是[0:1],把-1的转成1了。
X, y = make_hastie_10_2(random_state=0)
X = DataFrame(X)
y = DataFrame(y)
y.columns={"label"}
label={-1:0,1:1}
y.label=y.label.map(label)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)#划分数据集
  1. 用两个版本设定相同的参数,对数据集进行训练
    1)XGBoost自带接口
#XGBoost自带接口
params={'eta': 0.3,'max_depth':3,   'min_child_weight':1,'gamma':0.3, 'subsample':0.8,'colsample_bytree':0.8,'booster':'gbtree','objective': 'binary:logistic','nthread':12,'scale_pos_weight': 1,'lambda':1,  'seed':27,'silent':0 ,'eval_metric': 'auc'
}
d_train = xgb.DMatrix(X_train, label=y_train)
d_valid = xgb.DMatrix(X_test, label=y_test)
d_test = xgb.DMatrix(X_test)
watchlist = [(d_train, 'train'), (d_valid, 'valid')]#sklearn接口
clf = XGBClassifier(n_estimators=30,#三十棵树learning_rate =0.3,max_depth=3,min_child_weight=1,gamma=0.3,subsample=0.8,colsample_bytree=0.8,objective= 'binary:logistic',nthread=12,scale_pos_weight=1,reg_lambda=1,seed=27)
watchlist2 = [(X_train,y_train),(X_test,y_test)]print("XGBoost_自带接口进行训练:")
model_bst = xgb.train(params, d_train, 30, watchlist, early_stopping_rounds=500, verbose_eval=10)
print("XGBoost_sklearn接口进行训练:")
model_sklearn=clf.fit(X_train, y_train, eval_set=watchlist2,eval_metric='auc',verbose=10, early_stopping_rounds=500)y_bst= model_bst.predict(d_test)
y_sklearn= clf.predict_proba(X_test)[:,1]

xgboost源码

一般使用xgboost直接用pip install安装即可,下载源码主要以学习为主。
 下载使用命令:

git clone https://github.com/dmlc/xgboost

xgboost学习率与迭代次数

  • 原生接口:迭代次数通过num_boost_round设置,学习率通过eta设置。
  • sklearn接口:迭代次数通过 n_estimators设置,学习率通过 learning_rate设置

迭代次数越多,花费时间越长。
为优化这种情况,xgboost除了可以设置固定迭代次数以外,还可以根据评估,判断如果n次不再改进,则停止迭代(具体见eval部分)
学习率越高收敛越快,但也可能因为粒度太大,错过极值点。
调参方法:先粗调再细调,一开始将学习率设大一点,比如0.1-0.3,次数有说往大了调有说往小了调。待试验。

xgboost的eval系列参数

eval系列参数用于评估模型的状态,可以在每次迭代之后给模型打分,它本身与模型如何计算无关(无论它设成什么,最终模型都不变),只是评估当前模型好坏。这个功能非常重要,比如:有时候会看到在迭代过程中训练集评分提高,而测试集评分下降,一般就是过拟合了。使用它还可以控制当模型不再改进时,停止迭代(具体通过early_stopping_rounds设置)。

  1. evals设置估计数据
     evals可设置训练集和测试集,在每次迭代后用训练集和测试集代入模型,并给预测结果评分。

  2. eval_metric现成的评估函数
     可以设置rmse,logloss,error,merror,mlogloss,auc,ndcg,map等xgb自带的评估函数。

  3. feval自定义评估函数
     本例就需要自定义估伻函数,使用feval方法实现。它和梯度下降算法无法,主要用于显示,并判断何时终止迭代。最好别写太复杂,否则会延长计算时间。

  4. early_stopping_rounds自动停止迭代
     通过early_stopping_rounds设置,如果在n轮内正确率没有提升,则退出迭代,具体根据evals给出的数据判断,若其中包含多组数据,则取最后一个。
     如果设置了early_stopping_rounds,模型会生成三个属性,best_score,  best_iteration, bst.best_ntree_limit,以便下次选择最合适的迭代次数。

  5. verbose_eval输出评估信息
     如果设置为True输出评估信息,设置为数字,如5则每5次评估输出一次。

样本不均衡问题

  1. 设置scale_pos_weight
     有时会遇到样本不均衡的问题,比如正例占99%,反例占1%,那么如果预测为全正例或者随机抽机,正确率也占99%。此时可使用scale_pos_weight提高反例权重,默认为1,不增加权重。

  2. DMatrix设置weight
     使用xgb自带的调用接口 (非sklearn接口),需要把数据转成DMatrix格式,如果想给不同实例分配不同权重,可以转换时使用weight参数,它传入与实例个数等长的数组,数组中每个数对应一个实例的权重,在xgb每次迭代后调整权重时也会将它计算在内。

Xgboost的误差函数

Xgboost可以处理二分类,多分类,回归问题。处理不同问题,主要的区别在于指定不同的误差函数,xgboost会根据不同误差函数计算的结果调整权重进行下一次迭代。
 通过参数objective可设置xgb自带的误差函数:回归一般用reg:xxx(如reg:linear),二分类用binary:xxx(如binary:logistic),多分类用multi:xxx(如multi:softmax)。误差函数的功能是通过训练集的label和预测值计算一阶梯度,二阶梯度,在源码中可以看到它们是如何实现的(C语言部分)。在调用train()训练时,也可以用参数obj自定义误差函数。

xgboost答疑解惑相关推荐

  1. 院长齐聚,答疑解惑 | 清华-青岛数据科学研究院“院长接待日”成功举办

    2017年12月14日下午,清华-青岛数据科学研究院(以下简称:数据院)"院长接待日"活动在双清大厦四层成功举行.院长俞士纶.副院长王建民和执行副院长韩亦舜与来自校内不同院系对大数 ...

  2. DxOMARK如何测试音频质量?小编带你答疑解惑

    昨日晚间,DxOMARK正式推出全新的手机音频评分系统DXOMARK Audio.根据结果来看,华为Mate 20 X获得75分,位列榜首,表现不俗.相信很多人都有一个疑问,那就是DXOMARK Au ...

  3. kicad绿油开窗_KICAD新手答疑解惑专帖

    回复: 81 KICAD新手答疑解惑专帖 当前离线 精华汤圆VIP++ {*} (23407445) 出0入0汤圆 电梯直达 发表于 2020-3-23 22:18:37 | 只看该作者 |正序浏览 ...

  4. 李飞飞高徒Andrej Karpathy为大家答疑解惑

    编者按:李飞飞高徒Andrej Karpathy2015年在斯坦福大学获得计算机科学专业博士,2016进入OpenAI工作,主要研究兴趣为:深度学习,生成模型和强化学习.2011至2015年先后在Go ...

  5. android答疑解惑 知识星球

    借着几位好友推送星球,明哥也准备了下,今天谈下这个星球的目的. 这个念头,是一瞬间产生的.产生的原因是,感觉到困惑.很多朋友问我,你咋不写深安卓度文章了.按照你的水平,写出来肯定大卖. 嗨,自知能量如 ...

  6. 电子电气架构系列 —— 关于车载DoIP的一些答疑解惑

    我是穿拖鞋的汉子,魔都中坚持长期主义的工程师. 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 好的生活不是拼命透支,而是款款而行.当我们被欲望追赶,步子迈得太快,就容易丧失自我.懂得 ...

  7. 新高考如何选科?职引专家问答为您答疑解惑

    现在我们大多数省份的选科模式,是三加一加二,物理和历史两门科目必选其一,政治.生物.地理.化学四门科目选两科,一共有12种选科组合. 可是对于咱们高中生还有家长来说,选科关系到我们未来这个学习课程的难 ...

  8. 话里话外:新顾问答疑解惑对话大公开

    提问人: malven.mao 解惑人:aaron.sun malven.mao: 对于某个项目,要列pdca, 但是我不确定某些问题可能会做多久, 会做成怎么样, 在这种情况下, 我该怎么来列计划? ...

  9. 新浪项目-------小知识点答疑解惑

    1.IOS解惑(1)之@property(nonatomic,getter=isOn) BOOL on;中的getter解惑 //如果这个property是 BOOL on,那么Objc默认创建的 s ...

最新文章

  1. 二进制计算机课教案,计算机与二进制教案.pdf
  2. linux安装没有root权限
  3. silverlight实现2D人物动画
  4. ide快捷键_新买的固态硬盘用AHCI不能装系统,而用IDE却可以?问题就在这里
  5. Spark技术内幕: Task向Executor提交的源代码解析
  6. .NET Core + Kubernetes:StatefulSet
  7. 函数重载、引用再探、内联函数
  8. 力改变物体形状举例_人教版八年级物理下册第七章《力》知识点大全
  9. U盘安装CentOS 7错误 /dev/root does not exist, could not
  10. 圆通速递:2022年1月快递产品收入36.19亿元 同比增长20.09%
  11. linux 线程异常退出_Linux 进程必知必会
  12. sqlserver 2016 安装
  13. 总结数字签名实现身份验证
  14. 【IoT】STM32 文件系统 fatfs 移植笔记详解
  15. 告别脚本小子系列丨JAVA安全(6)——反序列化利用链(上)
  16. 相似度算法--莱文斯坦距离加入同义词逻辑
  17. Docker各操作系统安装方式及优缺点
  18. 哈工大软件构造2022笔记(持续更新----1)
  19. android7.0计时器代码,iCountTimer Pro(锻炼计时器)
  20. iw在java中什么意思,请问程序里piw和iw有什么区别

热门文章

  1. python量化策略——Fama-French三因子模型(回归获取alpha)阿尔法α策略。
  2. MQTT开源库mosquitto安装和使用(一)
  3. 关于 web service 参数传递的序列化反序列化问题
  4. 如何理解面向对象的封装、继承、多态
  5. 隐函数求导和相关变化率
  6. js前端实现微信支付和支付宝支付
  7. 一款不愿透露姓名的绿色小说软件
  8. 一份标准的软件测试计划文档 | 新手可以拿走
  9. 图书管理系统 数据库实现(oracle)
  10. 避障机器人程序c语言,移动机器人的避障实验设计+源程序+流程图.doc