Answers:
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模型的几个数学偏差为:
到这一点:在这里找到在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编写的一些自定义损失函数进行比较。
考虑以下链接:https : //tech.yandex.com/catboost/doc/dg/concepts/algorithm-main-stages_cat-to-numberic-docpage/#algorithm-main-stages_cat-to-numberic
它们提供了多种方法,可以在使用旧的和众所周知的一站式方法的基础上向分类训练提供分类特征。在不损失太多信息的情况下减小输入空间的尺寸是拟合模型不太适合的可能原因之一。
我做完。我不使用LightGBM,因此无法对其进行任何说明。