想了解一个算法,我们可以从以下几个方面去考虑
- What:它是什么
- How:底层实现逻辑
- Why:为什么这样设计
- Optimize:是否有优化空间
- Application Scene:应用场景
一.什么是xgboost算法
xgboost是由陈天奇博士提出的一种基于Gradient Boosting的集成学习算法,它的前身是GBDT算法,多次在kaggel上取得优秀的成绩。集成学习算法利用多个弱学习器拟合成一个模型,使用残差学习的的方式不断优化目标函数,通俗点讲,集成学习的本质就是三个臭皮匠顶个诸葛亮,xgboost的底层是由多个弱学习器组成的,由多棵CART(分类回归树)树模型组成,既可以用来做分类、也可以用来处理回归任务,相较于GBDT算法,xgboost的改进之处在于以下几点:
- 引进了正则项,具有预剪枝、防止模型过拟合的作用;
- 使用泰勒二次展开项对目标函数近似求解,速度更快,效率更高,同时支持自定义目标函数,只要函数可二阶求导;
- 能自动处理缺失值,xgb处理缺失值的方法是将缺失值单独作为一类处理,在节点分裂时根据提升度大小决定归类于左叶子节点 或者右叶子节点;
- 支持并行化计算,xgb会对特征变量做预排序,并将结果保存为block模块储存在硬盘中,树分裂时调用多线程对多个特征变量做运算,极大的提高了计算速度。另外,不同于GBDT在分裂时使用贪心算法逐个计算信息增益或信息熵,xgb会计算特征变量分位点,并给出特征值对应的分裂权重,使用近似贪心算法在特征分裂时能减少计算量,提升效率;
- 待补充
二.如何实现
在介绍任何一个算法前,我们都逃避不开算法的目的,现阶段的有监督学习算法的目的都是根据已知的特征变量X去拟合一个函数,使得预测结果Y(^) 接近或等于真实标签Y,通常我们使用损失函数衡量预测结果Y(^)与真实标签Y之间的差异(暂时不会用latex编辑数学公式 )。xgboost算法的损失函数有哪些呢,更进一步思考有监督学习算法中常用的损失函数有哪些,它们的优势和差异,以及所适用的场景分别是什么?