机器学习之xgboost的优缺点
机器学习之xgboost的优缺点
XGBoost 的优点
1.正则化
XGBoost 在代价函数里加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数、每个叶子节点上输出的 score 的 L2 模的平方和。从 Bias-variancetradeoff 角度来
讲,正则项降低了模型的 variance,使学习出来的模型更加简单,防止过拟合,这也是XGBoost 优于传统 GBDT 的一个特性。
2.并行处理
XGBoost 工具支持并行。Boosting 不是一种串行的结构吗?怎么并行的?注意 XGBoost 的并行不是 tree 粒度的并行,XGBoost 也是一次迭代完才能进行下一次迭代的(第 t 次迭代的代价函数里包含了前面 t-1 次迭代的预测值)。XGBoost 的并行是在特征粒度上的。我们知道,决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点),XGBoost 在训练之前,预先对数据进行了排序,然后保存为block结构,后面的迭代中重复地使用这个结构,大大减小计算量。这个 block 结构也使得并行成为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行。
3.灵活性
XGBoost 支持用户自定义目标函数和评估函数,只要目标函数二阶可导就行。
4.缺失值的处理
对于特征的值有缺失的样本,XGBoost 可以自动学习出它的分裂方向。
5.剪枝
XGBoost 先从顶到底建立所有可以建立的子树,再从底到顶反向进行剪枝。比起 GBM,这样不容易陷入局部最优解。
6.内置交叉验证
XGBoost 允许在每一轮 Boosting 迭代中使用交叉验证。因此,可以方便地获得最优Boosting 迭代次数。而 GBM 使用网格搜索,只能检测有限个值。
缺点或不足
虽然说 XGBoost 在 Kaggle 比赛中获得了不错的成绩,但并不代表 XGBoost 是一个完美的算法,它当然也有自己的缺点和不足之处:
1.算法参数过多
调参复杂,需要对 XGBoost 原理十分清楚才能很好的使用 XGBoost。
2.只适合处理结构化数据
相对于深度学习算法来说,XGBoost 算法只适合处理结构化的特征数据,而对于类似图像中的目标检测等任务重的非结构化数据没有很好的处理能力。
3.不适合处理超高维特征数据
XGBoost 算法对于中低维数据具有很好的处理速度和精度,但是对于例如大规模图像物体识别,或者是推荐算法的某些场景中会出现的超高维特征的数据就无能为力了,这时候我们就需要借助于深度学习等算法。
- 点赞
- 收藏
- 关注作者
评论(0)