首页 > 解决方案 > Spark 中的 XGBoost 模型 --> 缺失值处理

问题描述

与 python 不同,其中缺失值由 XGBoost 算法在内部处理,在 SPARK 中构建 XGBoost 模型时,缺失值被隐式转换为 0.0(float?!)。这个可以吗 ?有些实际值可能是 0.0。我们如何确保这不会干扰模型预测能力?

标签: scalaapache-sparkmachine-learningxgboost

解决方案


您在这里假设 xgboost 将缺失值归为 0 是错误的。实际上,在缺失值的情况下,它会在生长树时注意到 NA 朝向更高的增益分割方向。

例如,如果不考虑缺失值的拆分被确定为变量var1的(范围 [0,1])值 0.5,那么它会计算考虑到 var1 缺失值的增益为 < 0.5 和 > 0.5。对于任何拆分方向,它都会获得更多收益,它将缺失值归因于该拆分方向。所以缺失值现在有一个范围 [0,0.5] 或 [0.5,1] 但没有分配给它的实际值(即估算)。

有关此主题的更多详细信息,请参阅论文https://arxiv.org/pdf/1603.02754v3.pdf


推荐阅读