scala - Spark 中的 XGBoost 模型 --> 缺失值处理
问题描述
与 python 不同,其中缺失值由 XGBoost 算法在内部处理,在 SPARK 中构建 XGBoost 模型时,缺失值被隐式转换为 0.0(float?!)。这个可以吗 ?有些实际值可能是 0.0。我们如何确保这不会干扰模型预测能力?
解决方案
您在这里假设 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
推荐阅读
- go - 基于拆分字符串和键值对生成动态嵌套映射
- mysql - 向表中插入数据时如何计算MySQL中的重复记录
- cypress - 如何使用赛普拉斯测试第二个表中的值
- python - 我想从数据框中的行创建一个值列表,并删除前 2 个元素
- c# - 如何远程调试dll
- python-3.x - 按空格分割并添加值 - Python
- java - 如何在 JasperReport 中的 barChart 中的条形上方垂直旋转 itemLabels
- php - 使用流明文档中的示例代码时未定义的变量 $router
- react-native - 反应本机推送通知 onNotification 事件不起作用
- sapui5 - SAPUI5 无法获取表格可编辑单元格值