[英]R: Missing data causes error with XGBoost / sparse.model.matrix
[英]Does XGBoost distinguish between missing values and 0s in a sparse matrix in R?
有時功能可能有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值相同的位置?
要回答確切的問題:
是的,增益計算不考慮缺失值(不增加增強樹中子項的梯度和粗體的總和),同時考慮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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.