Xgboost 如何学习缺失值的输入?

数据挖掘 xgboost
2021-10-03 04:55:24

因此,从https://arxiv.org/pdf/1603.02754v3.pdf的算法 3 中可以看出,已确定最佳默认方向,缺失值将朝该方向移动。但是,或者我可能误解/错过了文章中的解释,它没有说明输入的确切内容。

例如,我将(父)节点 A(具有 50 个输入)拆分为节点 B 和节点 C。现在,在 50 个输入中,有 7 个缺失值。

其他 43 个输入相应地分为 B 和 C。我似乎理解的是,它将剩余的 7 个分配到 B 和 C 中,并确定哪一个给出更高的增益分数;那将是最佳方向。

但是,鉴于缺少 7 个值(这意味着我不知道这 7 个值是什么),将缺失值分配到任何子节点如何改变增益分数,或者更确切地说最小化损失函数?这似乎表明 Xgboost 正在为缺失值输入一些内容。我似乎无法找出 Xgboost 为这些缺失值输入的内容。我希望这个问题不是太模糊/笼统和简单。

编辑:我认为“缺失值”可能是一个模糊的术语。我的意思是(来自 wiki)“在统计中,缺失数据或缺失值是在没有为观察中的变量存储数据值时发生的。”

来自作者本人(https://github.com/dmlc/xgboost/issues/21),他说“ tqchen 在2014年8月13日评论xgboost自然接受稀疏特征格式,您可以直接将数据作为稀疏矩阵输入,并且仅包含非缺失值。

即未在稀疏特征矩阵中呈现的特征被视为“缺失”。XGBoost 将在内部处理它,您无需对其进行任何操作。”

和,

” tqchen 评论于 2014 年 8 月 13 日 在内部,XGBoost 将自动学习当一个值缺失时的最佳方向。等效地,这可以被视为自动“学习”基于减少的缺失值的最佳插补值是什么关于训练损失。”

1个回答

该过程在他们的论文第 3.4 节:稀疏感知拆分发现中进行了描述。

假设你在你的节点上有 50 个观察值,并且为了简单起见,只有一个分割点是可能的。

例如,您只有一个二元特征 X,您的数据可以分为三组:

  • 团体 : 20 个观察结果,使得 X=,
  • 团体 C: 20 个观察结果,使得 X=C,
  • 团体 : 10 个观察结果,使得 X=?

该算法将根据 X,但不知道将组发送到哪里 . 它会尝试这两个任务,

(,),C,(C,),

使用所有数据计算要分配给每个节点的预测的值,并选择使损失最小的分配。

例如,如果拆分(,),C被选中时,左节点的值将根据所有样品。

这是什么意思

根据训练损失的减少自动“学习”缺失值的最佳插补值。


评论问题

如果我不知道组 M 的值是什么,如何计算它们?

我们计算的value不是基于特征X,我们不知道,但基于样本的已知标签/目标。假设我们正在进行回归并试图最小化均方误差,假设我们有以下内容:

  • 团体用, 目标的均值是5.
  • 团体用C, 目标的均值是10.
  • 对于缺失值组, 目标的均值是0.

请注意,即使值X缺失,我们知道样本的目标值,否则我们不能用它来训练我们的模型。

在这种情况下,拆分将在(,),C,分配给包含样本的右节点的值C将是10,以及分配给包含样本的左节点的值(,)将是整个组的目标的平均值。在我们的示例中,平均值为

||||+||意思是()+||||+||意思是()=10300+20305=3.3¯