XGBoost是否区分R中稀疏矩阵中的缺失值和0?

问题描述 投票:1回答:2

有时功能可能有0和缺少值。例如,也许你可以测量一组棒球投手每投手每场比赛的击球数,你最终得到的是一个特征向量

feats <- c(NA, NA, NA, 3.7, 0, 2.2)

在这里,1投手平均每场比赛0次三振,3投手没有记录任何数据,因为他们还没有投球。当我们将其转换为稀疏矩阵时,我们会得到类似的东西

library(Matrix)
sparse1 <- sparseMatrix(i=4:6, j=rep(1, 3), x=c(3.7, 0, 2.2), dims=c(6, 1))
sparse1

[1,] .  
[2,] .  
[3,] .  
[4,] 3.7
[5,] 0.0
[6,] 2.2

在这里,dgCMatrix类清楚地将缺失的数据与0区分开来,但据我所知,dgCMatrix中的缺失数据被假定为取值0。

我想知道的是,当XGBoost试图分割这些数据时,它是否分别处理0和丢失的数据?换句话说,当XGBoost尝试拆分此功能时,它是否遵循NA协议(检查两个拆分方向)以查找丢失的数据,还是将丢失的数据发送到与非稀疏0值相同的位置?

r machine-learning xgboost
2个回答
0
投票

要回答确切的问题:

是的,增益计算不考虑缺失值(不增加增强树中子项的梯度和粗体的总和),同时考虑0值(并添加到子项的梯度和粗体的总和)在一个助推树)

所以,0和缺失值是不一样的。


0
投票

在您的代码中,您明确指定稀疏矩阵的表示。所有其他人都被隐含地假定为零。它们被显示为点,但这并不意味着它们是NA。 as.matrix()将显示这些点实际上是零。

library(Matrix)
sparse1 <- sparseMatrix(i=4:6, j=rep(1, 3), x=c(3.7, 0, 2.2), dims=c(6, 1))
as.matrix(sparse1)
© www.soinside.com 2019 - 2024. All rights reserved.