Boosting

GBM、XGBoost、LightGBM、CatBoost 之間的數學差異?

  • October 12, 2017

GBDT 系列模型有幾種實現,例如:

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

這些不同實現之間的數學差異是什麼?

根據這個基準,即使僅使用其默認參數,Catboost 似乎也優於其他實現,但它仍然非常慢。

我的猜測是 catboost 不使用虛擬變量,因此與其他實現相比,賦予每個(分類)變量的權重更加平衡,因此高基數變量的權重並不比其他變量大。它允許弱分類(具有低基數)進入一些樹,因此性能更好。除此之外,我沒有進一步的解釋。

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,所以無法解釋它。

引用自:https://stats.stackexchange.com/questions/307555

comments powered by Disqus

相關問答