GBDT和XGBoost区别
-
传统的GBDT以CART树作为基学习器,XGBoost还支持线性分类器,这个时候XGBoost相当于L1和L2正则化的逻辑斯蒂回归(分类)或者线性回归(回归);
-
传统的GBDT在优化的时候只用到一阶导数信息,XGBoost则对代价函数进行了二阶泰勒展开,得到一阶和二阶导数;
-
XGBoost在代价函数中加入了正则项,用于控制模型的复杂度。从权衡方差偏差来看,它降低了模型的方差,使学习出来的模型更加简单,放置过拟合,这也是XGBoost优于传统GBDT的一个特性;
-
shrinkage(缩减),相当于学习速率(XGBoost中的eta)。XGBoost在进行完一次迭代时,会将叶子节点的权值乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间。(GBDT也有学习速率);
-
列抽样。XGBoost借鉴了随机森林的做法,支持列抽样,不仅防止过拟合,还能减少计算;
-
对缺失值的处理。对于特征的值有缺失的样本,XGBoost还可以自动学习出它的分裂方向;通常情况下,我们人为在处理缺失值的时候大多会选用中位数、均值或是二者的融合来对数值型特征进行填补,使用出现次数最多的类别来填补缺失的类别特征。在逻辑实现上,为了保证完备性,会分别处理将missing该特征值的样本分配到左叶子结点和右叶子结点的两种情形,计算增益后选择增益大的方向进行分裂即可。可以为缺失值或者指定的值指定分支的默认方向,这能大大提升算法的效率。如果在训练中没有缺失值而在预测中出现缺失,那么会自动将缺失值的划分方向放到右子树。
-
XGBoost工具支持并行。Boosting不是一种串行的结构吗?怎么并行的?注意XGBoost的并行不是tree粒度的并行,XGBoost也是一次迭代完才能进行下一次迭代的(第t次迭代的代价函数里包含了前面t-1次迭代的预测值)。XGBoost的并行是在特征粒度上的。我们知道,决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点),XGBoost在训练之前,预先对数据进行了排序,然后保存为block结构,后面的迭代中重复地使用这个结构,大大减小计算量。这个block结构也使得并行成为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行。
Xgboost安装
-
CTRL+F 查找 xgboost
-
单击 xgboost,找到如下页面
-
查询Python版本
-
根据Python版本下载安装包
-
下载到了桌面
-
在cmd模式下安装
pip install C:\Users\77777\Desktop\xgboost-0.90-cp36-cp36m-win_amd64.whl
有时候需要升级pip
直接运行命令:python -m pip install --upgrade pip
成功后再安装xgboost即可
Xgboost参数调节指南
-
Xgboost参数 XGBoost作者将参数分为3类: 基本(General)参数:指导整体函数 提升(Booster)参数:在每一步指导每个提升(树或回归) 学习任务(Learning Task Parameters)参数:指导优化模型表现 1.1. 基本参数 1.1.1. booster 默认值:gbtree 含义:在每次迭代中的模型类型,有两种选择: gbtree:树模型 gblinear:线性模型 1.1.2. silent 默认值:0 含义 0=运行时打印running messages 1=不打running messages 1.1.3. nthread 运行时的最大线程数 默认值:占当前计算机的最大线程 1.2. 提升参数 这里仅仅介绍树模型(gbtree)的相关参数。 1.2.1. eta 学习步长 default=0.3 一般调整下限为0.01-0.2 1.2.2. min_child_weight 表示所有孩子节点(all observations required in a child)的最小权重和 一般都用来控制过拟合。 但如果调得太高就会导致欠拟合。 default=1 1.2.3. max_depth default=6 用来控制过拟合 一般在3-10之间 1.2.4. gamma default=0 range: [0,∞] 模型在默认情况下,对于一个节点的划分只有在其损失函数得到结果大于0的情况下才进行,而gamma给定了所需的最低损失函数的值 gamma值使得算法更conservation,且其值依赖于损失函数,在模型中应该进行调参。 1.2.5. max_delta_step default=0 在最大化步长的时候,我们允许每个树的权重去估算它。 当max_delta_step=0时,意味着没有误差 当max_delta_step>0时,意味着结果更保守 一般不需要调参。但当类别及不平衡的逻辑回归时可能会用到。 1.2.6. subsample [默认值=1] 与GBM中的subsample相同。表示每棵树中要随机抽样的观察样本的分数。较低的值使算法更为保守,可以防止过度拟合,但太小的值可能会导致欠拟合。典型值为:0.5-1 1.2.7. colsample_bytree