GBM,XGBoost,LightGBM,CatBoost之间的数学差异?


33

GBDT系列模型有几种实现,例如:

  • GBM
  • XGBoost
  • LightGBM
  • Catboost。

这些不同实现之间的数学区别是什么?

即使根据此基准测试仅使用Catboost的默认参数,Catboost似乎也胜过其他实现,但它仍然非常慢。

我的猜测是,catboost不使用虚拟变量,因此与其他实现相比,赋予每个(分类)变量的权重更加均衡,因此高基数变量的权重不会超过其他实现。它允许弱分类(具有低基数)进入某些树,因此性能更好。除此之外,我没有进一步的解释。


基准是yandex / catboost团队提供的,我们需要独立的基准。
mrgloom

Answers:


27
My guess is that catboost doesn't use the dummified variables, so the weight given to each (categorical) variable is more balanced compared to the other implementations, so the high-cardinality variables don't have more weight than the others.

https://arxiv.org/abs/1706.09516

您想看一下Yandex团队撰写的有关CATBoost数学唯一性的英语论文。

我简要地阅读了一下,在其中我很快就能理解的一个事实是,他们不使用在TRAIN上获得的残差来进行TRAIN,因为这些残差会造成学习质量的乐观偏差。(更新:这种新颖性带来了一种解决过度拟合的方法,这是该算法与类似算法相比能更好地工作的原因之一,此外还有多种预处理分类变量的方法)。

很抱歉没有给您一个具体而完整的答案。

GBM,XGBoost之间的数学差异

首先,我建议您阅读Friedman撰写的有关Gradient Boosting Machine的论文,该论文特别适用于线性回归模型,分类器和决策树。https://statweb.stanford.edu/~jhf/ftp/trebst.pdf

我不会在这里详细介绍。这是一本很好的读物,涵盖了各种类型的损失(L)以及重要性可变的概念。当然,这是在函数空间(低级模型)中实现下降方法而不是追求损耗最小化的参数的里程碑文件。

如果您在这里查看:https : //arxiv.org/pdf/1603.02754.pdf

您可以在Tianqi Chen等人的XGBoost模型中找到数学插图。现在变得有趣了。经典弗里德曼GBM模型的几个数学偏差为:

  • 正则化的(惩罚化的)参数(并且我们记住,增强中的参数是函数,树或线性模型):L1和L2可用。

在此处输入图片说明

  • 使用二阶导数可加快此过程(如果之前已使用过,请更正我)。

到这一点:在这里找到在CATBoost中实现分位数损失的实现,该实现非常方便,并且提供一阶和二阶导数:https : //github.com/catboost/catboost/blob/master/catboost/libs/algo/ error_functions.h

class TQuantileError : public IDerCalcer<TQuantileError, /*StoreExpApproxParam*/ false> { public:
    const double QUANTILE_DER2 = 0.0;

    double Alpha;
    SAVELOAD(Alpha);

    explicit TQuantileError(bool storeExpApprox)
        : Alpha(0.5)
    {
        CB_ENSURE(storeExpApprox == StoreExpApprox, "Approx format does not match");
    }

    TQuantileError(double alpha, bool storeExpApprox)
        : Alpha(alpha)
    {
        Y_ASSERT(Alpha > -1e-6 && Alpha < 1.0 + 1e-6);
        CB_ENSURE(storeExpApprox == StoreExpApprox, "Approx format does not match");
    }

    double CalcDer(double approx, float target) const {
        return (target - approx > 0) ? Alpha : -(1 - Alpha);
    }

    double CalcDer2(double = 0, float = 0) const {
        return QUANTILE_DER2;
    } };

虽然您无法在XGBoost中找到此有用的L1损失函数,但可以尝试将Yandex的实现与为XGB编写的一些自定义损失函数进行比较。

  • 此外,CATBoost具有出色的分类功能,而XGBoost仅接受数字输入。

考虑以下链接:https : //tech.yandex.com/catboost/doc/dg/concepts/algorithm-main-stages_cat-to-numberic-docpage/#algorithm-main-stages_cat-to-numberic

它们提供了多种方法,可以在使用旧的和众所周知的一站式方法的基础上向分类训练提供分类特征。在不损失太多信息的情况下减小输入空间的尺寸是拟合模型不太适合的可能原因之一。

我做完。我不使用LightGBM,因此无法对其进行任何说明。


5
我不知道为什么有人会在没有给出更好答案的情况下投票否决答案?主席先生,欢迎大家登台献上除了匿名投票之外的任何意见。
阿列克谢说莫妮卡(

它完全回答了我关于助推器的问题。您有LightGBM,XGBoost和GBM的补充材料吗?
Metariat

是的,我会回答我的。您是否能很好地应对硬数学,或者更喜欢直观的解释?
阿列克谢说莫妮卡(Monica)恢复职权

谢谢,我可以很好地处理这两种情况,直观的解释会更快,数学细节会花费更多时间,但是对于进一步的理解/实现非常有益。
Metariat

1
答案丰富了。
阿列克谢说莫妮卡(
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.