我正在尝试将类dgCMatrix的稀疏矩阵子集化到训练和测试集中,然后将这些矩阵转换为xgb.DMatrix对象以运行eXtremeGradientBoosting。我运行以下代码(可重现):
a<-data.frame(replicate(3,sample(1:1000,1000,rep=TRUE)))
b <- cast_sparse(a,X1,X2,X3)
c<-data.frame(replicate(3,sample(1:1000,1000,rep=FALSE)))
sample <- sample.int(n = nrow(c), size = floor(.75*nrow(c)), replace = F)
y.train <- c$X1[sample]
y.test <- c$X1[-sample]
x.train <- as.matrix(as.data.frame(as.matrix(b))[sample,])
x.test <- b[-sample,]
train.xgb <- xgb.DMatrix(x.train, label = y.train)
test.xgb <- xgb.DMatrix(x.test, label = y.test)
当我运行最后一行时,我收到以下错误:
Error in setinfo.xgb.DMatrix(dmat, names(p), p[[1]]) :
The length of labels must equal to the number of rows in the input data
无论出于何种原因,x.test
矩阵的维度仅为2
,而标签的长度为250
。我无法弄清楚为什么会发生这种情况 - 任何建议或想法如何解决这个问题?
答案 0 :(得分:0)
鉴于拆分的目的是针对xgboost,你可以做的不是分割dgCMatrix
而是使用xgb.DMatrix
函数拆分slice
:
total = xgb.DMatrix(as.matrix(b), label = c$X1)
train.xgb = xgboost::slice(total,sample)