![](/img/trans.png)
[英]Convert huge sparse matrix into data.table for faster subsetting in 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.