今天爱分享给大家带来xgboost要用泰勒展开的原因是什么【机器学习面试题】,希望能够帮助到大家。
xgboost使用了一阶和二阶偏导, 二阶导数有利于梯度下降的更快更准. 使用泰勒展开取得函数做自变量的二阶导数形式, 可以在不选定损失函数具体形式的情况下, 仅仅依靠输入数据的值就可以进行叶子分裂优化计算, 本质上也就把损失函数的选取和模型算法优化/参数选择分开了. 这种去耦合增加了xgboost的适用性, 使得它按需选取损失函数, 可以用于分类, 也可以用于回归。
更进一步,引用的知乎答主宋佳慧的话,说:
实际上使用二阶泰勒展开是为了xgboost能够自定义loss function,如果按照最小二乘法的损失函数直接推导,同样能够得到xgboost最终的推导式子:
二阶泰勒展开实际不是 约等于 最小二乘法,平方损失函数的二阶泰勒展开=最小二乘法。但为何想用二阶泰勒展开呢,一方面是为了xgboost库的可扩展性,因为任何损失函数只要二阶可导即能复用xgboost所做的关于最小二乘法的任何推导。而且泰勒的本质是尽量去模仿一个函数,毕竟二阶泰勒展开已经足以近似大量损失函数了,典型的还有基于分类的对数似然损失函数。
这样同一套代码就能完成回归或者分类了,而不是每次都推导一番,重写训练代码。
此外,Xgboost官网上有说,当目标函数是MSE时,展开是一阶项(残差)+二阶项的形式(官网说这是一个nice form),而其他目标函数,如log loss的展开式就没有这样的形式。为了能有个统一的形式,所以采用泰勒展开来得到二阶项,这样就能把MSE推导的那套直接复用到其他自定义损失函数上。简短来说,就是为了统一损失函数求导的形式以支持自定义损失函数。当然,这是从为什么会想到引入泰勒二阶的角度来说的。