【问题标题】:Understanding splits in xgboost了解 xgboost 中的拆分
【发布时间】:2021-09-06 05:18:06
【问题描述】:

在使用 xgboost 时,我对底层树中的拆分的理解一定是遗漏了一些简单的事情。

如果我使用 model.tree_to_dataframe(),我一直在精神上将给拆分列的数字解释为“如果值大于 X,则为是,否则为否”。因此,当虚拟特征的所有拆分都设置为 1 时,我认为这意味着 1 遵循 Yes 拆分,而 0 遵循 No 拆分。

但是,当我实际绘制树木时,我看到了:

显示的特征是一个虚拟变量。既然它说 current_X

这个虚拟特征对类具有高度预测性。我特别选择了这个,因为我知道它具有高度的预测性。但是,如果我使用 1/(1+exp(leaf)) 转换叶值,则“是”拆分返回的概率比“否”高得多。 (而且我知道你不能真正基于一棵树来做基础,但如果我将此变量的所有叶值相加,我会得到相同的关系。)

因此,根据我对数据的了解,将 yes 拆分表示 1 而 no 表示 0 会更有意义(这对我来说也更直观)。

那么,我是:

  • 误解了树形图;
  • 误解了数据帧输出;或者,
  • 叶值变换计算错误?

知道我错过了什么吗?

【问题讨论】:

    标签: python classification decision-tree xgboost


    【解决方案1】:

    在这里回答我自己的问题。我在逆 logit 变换中缺少一个符号 (source)

    我应该应用 1/(1+exp(-leaf)),这可以解决问题。

    【讨论】:

      猜你喜欢
      • 2016-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-03
      • 2018-09-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多