繁体   English   中英

在R中子集稀疏矩阵

[英]Subsetting A Sparse Matrix in R

我正在尝试将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 我不知道为什么会这样-有什么建议或想法可以解决此问题?

鉴于分裂的目的是为了xgboost,你可以做的,而不是一个劈裂什么dgCMatrix是拆分xgb.DMatrix使用slice功能:

total = xgb.DMatrix(as.matrix(b), label = c$X1)
train.xgb = xgboost::slice(total,sample)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM