http://note.youdao.com/noteshare?id=05a144c93bd1f66d0a25881a5fe5ce65
=============================
0 根据情况决定
silent&booster & objective
-> 1 n_estimator & eta
-> 2 max_depth OR gamma
观察模型处于什么样的状态(过拟合还是欠拟合,处于方差-偏差图像的左边还是右边?)决定是否需要剪枝(对于XGB这种树模型来说一般都是要的)
-> 3 subsample(视情况在使用与否) & 三个树的剪枝参数
“colsample_bytree”
“colsample_bylevel”
“colsample_bynode”
4 alpha OR/AND lambda正则化参数(受最大深度和和gamma影响)
PS:如果是大数据集就只能手动CV调
CV调节方式(P36)
让我们先从最原始的,设定默认参数开始,先观察一下默认参数下,我们的交叉验证曲线长什么样.在这里,我们要使用三组曲线。一组用于展示原始数据上的结果,一组用于展示上一个参数调节完毕后的结果,最后一组用于展示现在我们在调节的参数的结果。
说明:
弱分类器的数量,就是建立多少课树
作用:
n_estimators越大,模型的学习能力就会越强,模型也越容易过拟合
参数推荐:
一般都不会建议一个太大的数目,300以下为佳,如果数据量是几十万甚至百万可以适当调高。
注意点:
1树的数量前期影响模型效果大,后期减小,并且可能因为数量过多导致效果下降或者过拟合
说明:
控制抽样抽出来的样本量大概是多少(通常在样本量大的时候使用)
作用:
让模型更加集中于那些困难样本
参数推荐:
可借助学习曲线一般(0.05,1,20)确定大范围
注意点:
1数据量少时不推荐使用
说明:
迭代决策树时的步长(shrinkage),又叫做学习率(learning rate)。
作用:
越大,迭代的速度越快,算法的极限很快被达到,有可能无法收敛到真正的最佳。
越小,越有可能找到更精确的最佳值,更多的空间被留给了后面建立的树,但迭代速度会比较缓慢。
参数推荐:
一般和n_estimators交互,使用网格交搜索来同时确定两者参数值,一般在0.01~0.2之间
注意点:
1从评估器角度出发,新建的评估器一定是要比之前的好,是当前最优.
说明:
booster"来控制我们究竟使用怎样的弱评估器。
作用:
不同情况下不同的弱评估器的选择对最后模型的效果影响很大。
参数推荐:
gtree:默认
gnlinear:一般数据成线性关系时候使用
dart:比梯度提升树有更好的防过拟合功能
注意点:
1数据量不大时:gbtree和dart效果是相似的。
说明:
objective 来控制我们究竟使用怎样的损失函数
作用:
不同情况下不同的损失函数对最后模型的效果影响很大。
更多详见:
https://xgboost.readthedocs.io/en/latest/parameter.html#general-parameters
注意点:
1分类型的目标函数导入回归类中会直接报错。
说明:
被称为“复杂性控制”(complexity
control),是Gain中的惩罚项,增加的叶子越多,结构分之差Gain会被惩罚越重在树的叶节点上进行进一步分枝所需的最小目标函数减少量,是用来防止过拟合的重要参数。对梯度提升树影响最大的参数之一。
作用:
设定越大,算法就越保守,树的叶子数量就越少,模型的复杂度就越低。
参数推荐:
一般学习曲线,具体需要自己试,如果学习曲线无法看出的话,就用xgboost.cv。
注意点:
1学习曲线运行速度较缓慢并且曲线的效果匪夷所思,推荐使用xgboost.cv。
剪枝参数。
作用:
控制过拟合。
参数推荐:
一般使用max_depth & colsample_bytree & colsample_ bilevel
注意点:
1最大深度的功能与参数gamma相似,因此如果先调节了
,则最大深度可能无法展示出巨大的效果。当然,如果先调整了最大深度,则也有可能无法显示明显的效果。通常来说,这两个参数中我们只使用一个,不过两个都试试也没有坏处。
2学习曲线运行速度较缓慢并且曲线的效果匪夷所思,推荐使用xgboost.cv
说明:
都是控制正则化强度的参数。
作用:
我们可以二选一使用,也可以一起使用加大正则化的力度。当alpha和lambda都为0的时候,目标函数就是普通的梯度提升树的目标函数。
参数推荐:
一般先用L2,效果还不好再加上L1,配合网格搜索。
注意点:
1实际使用防止过拟合还是先考虑剪枝,或者是参数伽马。
说明:
调节样本不平衡的参数。
作用:
正负样本比例。
参数推荐 & 注意点:
官网上说,如果我们只在意模型的整表现,则使用AUC作为模型评估指标,使用scale_pos_weight来处理样本不平衡问题,如果我们在意预测出正确的概率,那我们就无法通过调节scale_pos_weight来减轻样本不平衡问题带来的影响。
这种时候,我们需要考虑另一个参数:max_delta_step。这个参数非常难以理解,它被称之为是“树的权重估计中允许的单次最大增量”,既可以考虑成是影响
的估计的参数。xgboost官网上认为,如果我们在处理样本不均衡问题,并且十分在意得到正确的预测概率,则可以设置
max_delta_step参数为一个有限的数(比如1)来帮助收敛。max_delta_step参数通常不进行使用,二分类下的样本不均衡问题时这个参数唯一的用途。
nthread和n_jobs都是算法运行所使用的线程,与sklearn中规则一样,输入整数表示使用的线程,输入-1表示使用计
算机全部的计算资源。如果我们的数据量很大,则我们可能需要这个参数来为我们调用更多线程。
base_score是一个比较容易被混淆的参数,它被叫做全局偏差,在分类问题中,它是我们希望关注的分类的先验概率。比如说,如果我们有1000个样本,其中300个正样本,700个负样本,则base_score就是0.3。对于回归来说,
这个分数默认0.5,但其实这个分数在这种情况下并不有效。许多使用XGBoost的人已经提出,当使用回归的时候base_score的默认应该是标签的均值,不过现在xgboost库尚未对此做出改进。使用这个参数,我们便是在告诉模型一些我们了解但模型不一定能够从数据中学习到的信息。通常我们不会使用这个参数,但对于严重的样本不均衡问题,设置一个正确的base_score取值是很有必要的。
在xgb库和sklearn中,都存在空值生成树的随机模式的参数random_state。在之前的剪枝中,我们提到可以通过随机抽样样本,随机抽样特征来减轻过拟合的影响,我们可以通过其他参数来影响随机抽样的比例,却无法对随机抽样干涉更多,因此,真正的随机性还是由模型自己生成的。如果希望控制这种随机性,可以在random_state参数中输入固定整数。需要注意的是,xgb库和sklearn库中,在random_state参数中输入同一个整数未必表示同一个随机模
式,不一定会得到相同的结果,因此导致模型的feature_importances也会不一致。
XGBoost被设计成是能够自动处理缺失值的模型,这个设计的初衷其实是为了让XGBoost能够处理稀疏矩阵。我们可以在参数missing中输入一个对象,比如np.nan,或数据的任意取值,表示将所有含有这个对象的数据作为空值处理。XGBoost会将所有的空值当作稀疏矩阵中的0来进行处理,因此在使用XGBoost的时候,我们也可以不处理缺失值。当然,通常来说,如果我们了解业务并且了解缺失值的来源,我们还是希望手动填补缺失值。在GBDT或其他算法中使用1阶是为了求极值在XG中使用2阶是为了简化目标函数,求导为了符合泰勒展开的要求,是为了使目标函数仅仅与树结构ft相关,还并未开始取极值,求极值时也是求一阶
XGBOOST自带importance参数说明:
https://www.cnblogs.com/RainLa/p/11929515.html
https://www.lizenghai.com/archives/77628.html
XGBOOST自带importance实战:
https://blog.csdn.net/weixin_43469047/article/details/100181972
https://blog.csdn.net/weixin_43469047/article/details/101310435
Shap可视化可解释性特征重要性库(推荐先看):
https://zhuanlan.zhihu.com/p/64799119
https://zhuanlan.zhihu.com/p/101352812?utm_source=qq
https://zhuanlan.zhihu.com/p/83412330
树模型的优势之一:能够查看模型的重要性分数,可以使用嵌入法进行特征选择-P9
进化的学习曲线:方差与泛化误差+ 8.细化学习曲线,找出最佳 n estimators-P10
细化学习曲线,找出最佳eta-p16
使用网格搜索来查找最佳的参数组合(alpha和lambda) p25
细化学习曲线,找出最佳 gamma-p31
使用xgboost调节gamma-p32
完整CV调参示例-p36
使用Joblib保存和调用模型 p40
XGB vs GBDT 核心区别1:求解预测值
的方式不同GBDT中预测值是由所有弱分类器上的预测结果的加权求和,其中每个样本上的预测结果就是样本所在的叶子节点的均值。而XGBT中的预测值是所有弱分类器上的叶子权重直接求和得到,计算叶子权重是一个复杂的过程。
XGB vs GBDT 核心区别2:正则项的存在
在普通的梯度提升树GBDT中,我们是不在目标函数中使用正则项的。但XGB借用正则项来修正树模型天生容易
过拟合这个缺陷,在剪枝之前让模型能够尽量不过拟合。
https://blog.csdn.net/u013709270/article/details/78156207