最近因为项目需要,临时抱佛脚开始熟悉XGBoost算法和ARIMA算法
真是书到用时方恨少啊(捂脸暴风哭泣
趁着项目准备阶段,索性好好整理一下这一领域的知识,省的等到调参的时候心发慌。虽然都说深度学习领域调参是一门玄学,但必须的理论知识也是需要的,只有深入了解了基础框架,才能够更好的针对实际场景进行优化。
因为时间紧急,这篇文章不会内容应该不会特别多,未来有机会再补充吧。
说到xgboost,不得不说gbdt,两者都是boosting方法,在面试的时候,我就被问到过这两个的区别。
boosting是一种提高任意给定学习算法准确度的方法。这种方法通过构造一个预测函数系列,然后以一定的方式将他们组合成一个预测函数。
说起来,这个方法从1990年被Schapire提出简陋版后,就一直在被各路大牛不断改进,但是作为一名算法工程师,二十多年后我才开始试着学习并使用它。。。真是非常惭愧了。= =
参考链接贴在这里:https://blog.csdn.net/u010159842/article/details/77503930
扯回原话题,有机会我会整理一个gbdt的内容
如果不考虑工程实现、解决问题上的一些差异,xgboost与gbdt比较大的不同就是目标函数的定义
红色箭头指向的l即为损失函数;红色方框为正则项,包括L1、L2;红色圆圈为常数项。xgboost利用泰勒展开三项,做一个近似,我们可以很清晰地看到,最终的目标函数只依赖于每个数据点的在误差函数上的一阶导数和二阶导数。
原理
(1)定义树的复杂度
对于f的定义做一下细化,把树拆分成结构部分q和叶子权重部分w。下图是一个具体的例子。结构函数q把输入映射到叶子的索引号上面去,而w给定了每个索引号对应的叶子分数是什么。
这里,为了调整整个模型,对于正则化的部分,我们时常想要函数包含节点个数和叶节点输出权重的L2模平方。
(这个并不唯一,但是通常的做法)这时有:
这里方框部分就对