xgboost原理怎么输入学习任务和目标

在学习boosting的过程中,了解了一下R软件的xgboost包,所做笔记如下,文中大部分内容是翻译自&
## xgboost
xgboost的参数可以分为三种类型:一般参数、booster参数、任务参数
xgboost中“.”可以取代“_”,如max.depth可以取代max_depth
一般参数:
1.booster用于设置使用哪种类型的booster参与boosting,默认值为gbtree,可选值为gblinear
2.silent控制是否打印运行信息,可选值为0或1,默认值为0,1代表静音模式
3.nthread用于运行xgboost的并行线程的数目,默认值为可以获得的最大线程数
4.num_pbuffer表示预测缓冲区的数目,用于保存boosting最后一步的预测结果,不用设置,默认值为训练集观测数
5.num_feature设置用于boosting的特征维数,不用设置,默认值为特征的最大维数
booster参数:根据不同的booster有所不同
一、parameters for tree booster
1.eta可取值为[0,1],默认值为0.3,为防止过拟合,用于每一步boosting中的步长收缩率
在每一步boosting结束以后,我们可以直接获得新特征的权重,而eta用于收缩特征的权重以使boosting过程更加保守
2.gamma可取值为[0,无穷],默认值为0,为了对树的叶子节点做进一步的分割而必须设置的损失减少的最小值
该值越大,算法越保守
3.max_depth可取值为[1,无穷],默认值为6,用于设置树的最大深度
4.min_child_weight可取值为[0,无穷],默认值为1,表示子树观测权重之和的最小值
如果树的生长时的某一步所生成的叶子结点,其观测权重之和小于min_child_weight,那么可以放弃该步生长
在线性回归模式中,这仅仅与每个结点所需的最小观测数相对应。该值越大,算法越保守
5.max_delta_step取值为[0,无穷],默认值为0,
如果该值为0,就是没有限制;如果设为一个正数,可以使每一步更新更加保守通常情况下这一参数是不需要设置的
但是在logistic回归的训练集中类极端不平衡的情况下,将这一参数的设置很有用,将该参数设为1-10可以控制每一步更新
6.subsample取值为(0,1],默认值为1,表示观测的子样本的比率
将其设置为0.5意味着xgboost将随机抽取一半观测用于数的生长,这将有助于防止过拟合现象
7.colsample_bytree可取值为(0,1],默认值为1,表示用于构造每棵树时变量的子样本比率
8.lambda默认值为1,用于设置权重的L2正则化项
9.alpha默认值为0,用于设置权重的L1正则化项
二、parameters for linear booster
1.lambda默认值为0,用于设置权重的L2正则化项
2.alpha默认值为0,用于设置权重的l1正则化项
3.lambda_bias默认值为0,用于设置bias的L2正则化项
没有bias的L1正则化项,是因为其并不重要
任务参数:用于设置学习情境,指定学习任务以及相应的学习目标
1.objective默认值为reg:linear,可取值为:
reg:linear——线性回归
reg:logistic——logistic回归
binary:logistic——二分类的logistic回归,输出概率值
binary:logitraw——二分类的logistic回归,输出logistic转换前的得分
count:poisson——计数数据的泊松回归,输出泊松分布的均值(max_delta_step默认设置为0.7)
multi:softmax——设置sgboost以进行多类别分类,还需设置num_class选项
multi:softprob——和softmax相同,但是输出ndata*nclass的向量,可以转化为ndata*nclass的矩阵
输出的结果包括每一个观测属于每一类的预测概率
rank:paiwise——设置xgboost以进行任务排序,通过最小化pairwise loss求解
2.base_score默认值为0.5,表示所有观测、global bias的最初预测得分
3.eval_metric表示验证数据的评价标准,默认值根据学习目标的不同
默认度量标准会不同(如回归采用rmse,分类采用error,秩回归采用平均准确率)
使用者可以添加多个评价指标,可选值罗列如下:
rmse:均方根误差
logloss:负对数似然
error:分类错误率,用误分类观测数/总观测数
merror:多类别分类错误率,用误分类观测数/总观测数
mlogloss:多分类对数似然
auc:秩评价的曲线下面积
ndcg:normalized discounted cumulative gain
map:平均准确率
ndcg@n;map@n;ndcg-;map-;ndcg@n-;map@n-
4.seed表示随机数种子,默认值为0
命令行参数
以下参数仅用于控制台版本的xgboost
1.use_buffer默认值为1,控制是否从文本输出创建双缓冲区,通过此可以加速加载时间
2.num_round表示boosting的循环次数
3.data表示训练数据的路径
4.test:data表示用于预测的测试数据集的路径
5.save_period默认值为0,表示模型保存的周期数
该值设为10表示每进行10次xgboost循环就保存一次模型,设为0表示训练过程中不保存任何模型
6.task默认值为train,可取值如下:
train:使用data进行训练
pred:使用test:data进行预测
eval:计算统计量的值,统计量通过eval[name]=filename
dump:把学习好的模型写成文本格式
7.model_in默认值为NULL,表示输入模型所在的路径
8.model_out默认值为NULL,表示训练结束后输出模型所在的路径
9.model_dir表示训练过程中保存的模型的输出目录
10.fmap:feature map, used for dump model
11.name_dump默认值为dump.txt,表示输出的模型所在文件的名字
12.name_pred默认值为pred.txt,表示预测文件的名字
13.pred_margin默认值为0,表示predict margin而不是转换的概率
xgboost(data = NULL, label = NULL, missing = NULL, params =
& nrounds, verbose = 1, print.every.n = 1L,
early.stop.round = NULL,
& maximize = NULL, ...)
xgb.train(params = list(), data, nrounds, watchlist = list(),
obj = NULL,
& feval = NULL, verbose = 1, print.every.n =
& early.stop.round = NULL, maximize = NULL,
data可以是矩阵、dgCMatrix、本地数据文件或者xgb.DMatrix,默认值为NULL
label如果data是本地数据文件或者xgb.DMatrix,那么用户可以不用设置这一选项,默认值为NULL
missing仅用于当输入的是稠密矩阵时,可以选取一个浮点数值用于代表缺失值,默认值为NULL
有时候会使用0或者其他极端值代表缺失值
params表示参数列表,常用的参数包括objective、eta、max.depth、nthread
更多的参数可以查看/dmlc/xgboost/wiki/Parameters
nrounds表示最大的迭代数目
verbose如果是0,xgboost将处于静音模式;如果是1,xgboost将打印出执行信息;
如果是2,xgboost将打印出执行信息和建模进度信息
当verbose大于0时,print.every.n表示打印每n个进程的信息,默认值为1,表示所有进程的信息都被打印
early.stop.round默认值为NULL,表示停止函数不被触发,如果设置为整数k
如果使用验证数据集所进行的训练将会提早停止,如果连续执行的k次循环的性能都越来越糟
maximize取值为TRUE和FALSE,如果设置了feval和early.stop.round,则maximize也必须设置
如果maximize取值为TRUE,则表示评价分数越高越好
obj表示自定制目标函数
feval表示自定制的评价函数
watchlist用于指定训练模型过程中用于监视的验证数据集
如可以设置watchlist=list(validation1=mat1,validation2=mat2)
以查看验证数据集mat1和mat2在每一轮建模时的表现
1.R帮助文件
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。如何安装xgboost???求教_机器学习吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:7,193贴子:
如何安装xgboost???求教收藏
按网上的教程安装总是出现错误
百度众包平台机器学习提供专业训练数据服务,用采集,标注方式为您提供高质量训练数据!同时提供基于百度机器学习算法库的实用行业大数据解决方案!机器模型训练,就找百度众包
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或关于xgboost的原理网络上的资源很少,大多数还停留在应用层面,本文通过学习陈天奇博士的PPT和xgboost导读和实战&,希望对xgboost原理进行深入理解。
2.xgboost vs gbdt
说到xgboost,不得不说gbdt。了解gbdt可以看我这篇文章&,gbdt无论在理论推导还是在应用场景实践都是相当完美的,但有一个问题:第n颗树训练时,需要用到第n-1颗树的(近似)残差。从这个角度来看,gbdt比较难以实现分布式(ps:虽然难,依然是可以的,换个角度思考就行),而xgboost从下面这个角度着手&注:红色箭头指向的l即为损失函数;红色方框为正则项,包括L1、L2;红色圆圈为常数项。&利用泰勒展开三项,做一个近似,我们可以很清晰地看到,最终的目标函数只依赖于每个数据点的在误差函数上的一阶导数和二阶导数。
(1)定义树的复杂度&对于f的定义做一下细化,把树拆分成结构部分q和叶子权重部分w。下图是一个具体的例子。结构函数q把输入映射到叶子的索引号上面去,而w给定了每个索引号对应的叶子分数是什么。&定义这个复杂度包含了一棵树里面节点的个数,以及每个树叶子节点上面输出分数的L2模平方。当然这不是唯一的一种定义方式,不过这一定义方式学习出的树效果一般都比较不错。下图还给出了复杂度计算的一个例子。&注:方框部分在最终的模型公式中控制这部分的比重&在这种新的定义下,我们可以把目标函数进行如下改写,其中I被定义为每个叶子上面样本集合&
这一个目标包含了TT个相互独立的单变量二次函数。我们可以定义
最终公式可以化简为
通过对求导等于0,可以得到
然后把最优解代入得到:
(2)打分函数计算示例
Obj代表了当我们指定一个树的结构的时候,我们在目标上面最多减少多少。我们可以把它叫做结构分数(structure score)
(3)枚举不同树结构的贪心法
贪心法:每一次尝试去对已有的叶子加入一个分割
对于每次扩展,我们还是要枚举所有可能的分割方案,如何高效地枚举所有的分割呢?我假设我们要枚举所有x & a 这样的条件,对于某个特定的分割a我们要计算a左边和右边的导数和。
我们可以发现对于所有的a,我们只要做一遍从左到右的扫描就可以枚举出所有分割的梯度和GL和GR。然后用上面的公式计算每个分割方案的分数就可以了。
观察这个目标函数,大家会发现第二个值得注意的事情就是引入分割不一定会使得情况变好,因为我们有一个引入新叶子的惩罚项。优化这个目标对应了树的剪枝, 当引入的分割带来的增益小于一个阀值的时候,我们可以剪掉这个分割。大家可以发现,当我们正式地推导目标的时候,像计算分数和剪枝这样的策略都会自然地出现,而不再是一种因为heuristic(启发式)而进行的操作了。
4.自定义损失函数
在实际的业务场景下,我们往往需要自定义损失函数。这里给出一个官方的 链接&
5.Xgboost调参
由于Xgboost的参数过多,使用GridSearch特别费时。这里可以学习下这篇文章,教你如何一步一步去调参。
6.python、R对于xgboost的简单使用
任务:二分类,存在样本不均衡问题(scale_pos_weight可以一定程度上解读此问题)&【】&【R】&
7.xgboost中比较重要的参数介绍
(1)objective [ default=reg:linear ] 定义学习任务及相应的学习目标,可选的目标函数如下:
“reg:linear” –线性回归。
“reg:logistic” –逻辑回归。
“binary:logistic” –二分类的逻辑回归问题,输出为概率。
“binary:logitraw” –二分类的逻辑回归问题,输出的结果为wTx。
“count:poisson” –计数问题的poisson回归,输出结果为poisson分布。 在poisson回归中,max_delta_step的缺省值为0.7。(used to safeguard optimization)
“multi:softmax” –让XGBoost采用softmax目标函数处理多分类问题,同时需要设置参数num_class(类别个数)
“multi:softprob” –和softmax一样,但是输出的是ndata * nclass的向量,可以将该向量reshape成ndata行nclass列的矩阵。没行数据表示样本所属于每个类别的概率。
“rank:pairwise” –set XGBoost to do ranking task by minimizing the pairwise loss
(2)’eval_metric’ The choices are listed below,评估指标:
“rmse”: root mean square error
“logloss”: negative log-likelihood
“error”: Binary classification error rate. It is calculated as #(wrong cases)/#(all cases). For the predictions, the evaluation will regard the instances with prediction value larger than 0.5 as positive instances, and the others as negative instances.
“merror”: Multiclass classification error rate. It is calculated as #(wrong cases)/#(all cases).
“mlogloss”: Multiclass logloss
“auc”: Area under the curve for ranking evaluation.
“ndcg”:Normalized Discounted Cumulative Gain
“map”:Mean average precision
“ndcg@n”,”map@n”: n can be assigned as an integer to cut off the top positions in the lists for evaluation.
“ndcg-“,”map-“,”ndcg@n-“,”map@n-“: In XGBoost, NDCG and MAP will evaluate the score of a list without any positive samples as 1. By adding “-” in the evaluation metric XGBoost will evaluate these score as 0 to be consistent under some conditions.
(3)lambda [default=0]&L2 正则的惩罚系数
(4)alpha [default=0]&L1 正则的惩罚系数
(5)lambda_bias&在偏置上的L2正则。缺省值为0(在L1上没有偏置项的正则,因为L1时偏置不重要)
(6)eta [default=0.3]&为了防止过拟合,更新过程中用到的收缩步长。在每次提升计算之后,会直接获得新特征的权重。 eta通过缩减特征的权重使提升计算过程更加保守。缺省值为0.3&取值范围为:[0,1]
(7)max_depth [default=6]&数的最大深度。缺省值为6 ,取值范围为:[1,∞]
(8)min_child_weight [default=1]&孩子节点中最小的样本权重和。如果一个叶子节点的样本权重和小于min_child_weight则拆分过程结束。在现行回归模型中,这个参数是指建立每个模型所需要的最小样本数。该成熟越大算法越conservative&取值范围为: [0,∞]
更多关于Xgboost学习地址
阅读(...) 评论()XGBoost学习和总结1
1. Bagging与Boosting [7]
(1)Bagging算法:每个分类器都随机从原样本中做有放回的采样,然后分别在这些采样后的样本上训练分类器,然后再把这些分类器组合起来。简单的多数投票一般就可以。其代表算法是随机森林。Bagging主要关注降低方差,因此它在不剪枝的决策树、神经网络等学习器上效用更为明显。
(2)Boosting算法:通过迭代地训练一系列的分类器,每个分类器采用的样本分布都和上一轮的学习结果有关。其代表算法是AdaBoost,GBDT。Boosting主要关注降低偏差,因此Boosting能基于泛化性能相当弱的学习器构建出很强的集成。
2. XGBoost
XGBoost:eXtreme Gradient Boosting,它是Gradient Boosting Machine的一个C++实现。XGBoos最大的特点就是通过OpenMP能够自动利用单机CPU的多核进行并行计算,并且支持&Python,R,Java,Scala,C++等多种编程接口。提起XGBoost,不能不提的是DMLC深盟分布式深度机器学习开源平台,目前该平台已有的组件覆盖三类最常用的机器学习算法,包括被广泛用于排序的GBDT,用于点击预测的稀疏线性模型,以及目前的研究热点深度学习。
3. XGBoost的Python版本编译和安装 [11]
编译和安装工作均在Windows上面进行,需要提前安装Python,easy_install,wheel,Numpy,Scipy,Matplotlib,Scikit-Learn。主要介绍XGBoost的 编译和安装,如下所示:
用VS 2013打开xgboost-master\windows\xgboostl.sln,分别编译工程rabit,xgboost,xgboost_wrapper。
接下来就是Python包的安装了,进入目录xgboost-master\python-package,然后python setup.py install。安装完毕之后就是测试了,自己使用的Spyder这个IDE,如下所示:
导入xgboost类库没有报错,说明该类库安装成功。最后在目录xgboost-master\demo\guide-python下面有很多基于Python学习XGBoost的代码。
如果使用IDLE这个IDE,需要指明wrapper文件夹路径,如下所示:
import sys
sys.path.append('XXX:\\YYY\\xgboost-master\\wrapper')
import xgboost as xgb
4. XGBoost自带例子
参考文献:
[1] xgboost 0.4a30:
[2] 在Python中使用XGBoost:
[3] xgboost速度快效果好的boosting模型:
[4] Scalable and Flexible Gradient Boosting:
[5] xgboost:
[6] San-Francisco-crimes/XGBoost_model.py:
[7]&xgboost/gbdt在调参时为什么树的深度很少就能达到很高的精度:
[8]&64位Windows 10下安装xgboost python包的教程:
[9]&xgboost的使用简析:
[10]&DMLC深盟分布式深度机器学习开源平台解析:
[11]&xgboost在windows上的安装:
本文转载自 行者无疆 , 原文链接: , 转载请保留本声明!
每一个你不满意的现在,都有一个你没有努力的曾经。
Copyright (C) 2015&&
&&Powered by&}

我要回帖

更多关于 xgboost 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信