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

机器算法验证 助推
2022-02-10 19:53:50

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

  • GBM
  • XGBoost
  • 光GBM
  • 猫助推器。

这些不同实现之间的数学差异是什么?

根据这个基准,即使仅使用其默认参数,Catboost 似乎也优于其他实现,但它仍然非常慢。

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

1个回答
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

除了使用旧的和众所周知的 one-hot 方法之外,它们还提供了多种方法来将分类特征提供给模型训练。在不丢失太多信息的情况下减小输入空间的维度是拟合模型不太过拟合的可能原因之一。

我做完。我不使用 LightGBM,所以无法解释它。