我们有一个具有数据驱动(非分析)损失函数的问题。我们的目标包含 0 到 20 之间的整数(目标本质上是离散的),尽管更大的值是可能的,只是在我们的数据集中不存在。在使用 XGBoost 等算法时,我们有一个非常精确的损失函数这一事实给我们留下了一些严重的问题:
损失函数通常是非凸的。它不容易用凸函数拟合,因为它的形状是数据驱动的,并且可以变化很大。例如,这意味着对于远离拟合良好的函数部分的预测,不可避免地会给予较大的惩罚,而无需较大的惩罚。如果我们用插值代替拟合,粗麻布可能是负数(见附图),这是确定叶子权重的问题(对吧?)。
我们认为我们可以调整类似 XGBoost 算法(我使用这个算法作为例子,因为我对论文和 API 都很熟悉),通过用蛮力方法替换它对梯度 en hessian 的依赖来找到最佳叶重和最佳增益。然而,这将大大减慢算法的速度,也许是严重的。
我的问题是:在现有算法中处理复杂损失函数的默认方法是什么?是适合处理这些问题的算法吗?您还有什么可以解决上述问题的建议吗?
提前致谢。