Xgboost与Gbdt的区别

Valarie ·
更新时间:2024-11-11
· 692 次阅读

GBDT以CART作为基分类器,CART以gini指数选择特征,gini指数越小,纯度越高。离散特征会依次将每个取值作为分割点计算gini系数,连续特征会依次将连续两个值的中间值作为分割点,将数据分割为S1和S2两部分,并计算该分割点的gini增益为S1和S2方差之和,随后选取gini增益最小的值作为分割点,并当做离线特征计算该特征的gini系数,最后取gini指数最小的作为最优特征与最优切分点。Xgboost还支持线性分类器,相当于带L1和L2正则化项的LR。 GBDT在优化时只用到一阶导数信息,Xgboost则对代价函数进行了二阶泰勒展开,同时用到了一阶和二阶导数,具有更高的精度。此外,Xgboost工具支持自定义代价函数,只要函数可一阶和二阶求导。 Xgboost在代价函数里加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数、每个叶子节点上输出的score的L2模的平方和。 Xgboost具有学习速率衰减特性,具体为eta参数,在进行完一次迭代后,会将叶子节点的权重乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间。 Xgboost借鉴了随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算量。 对于特征的值有缺失的样本,Xgboost能自动学习出它的分裂方向。 Xgboost工具支持并行,并行是在特征粒度上的。通常来说,决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点) ,Xgboost在训练之前,预先对数据进行了排序,然后保存为block结构,后面的迭代中重复地使用这个结构,大大减小计算量。这个block结构也使得并行成为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行。 可并行的近似直方图算法。树节点在进行分裂时,我们需要计算每个特征的每个分割点对应的增益,即用贪心法枚举所有可能的分割点。当数据无法一次载入内存或者在分布式情况下,贪心算法效率就会变得很低,所以xgboost还提出了一种可并行的近似直方图算法,用于高效地生成候选的分割点。
作者:yz930618



gbdt xgboost

需要 登录 后方可回复, 如果你还没有账号请 注册新账号