如何解决将xgb.DMatrix转换为数据框或矩阵
我有一个xgb.Dmatrix,我想将其转换为数据帧或矩阵格式,我想知道是否可以转换。
data(agaricus.train,package='xgboost')
train <- agaricus.train
dtrain <- xgb.DMatrix(train$data,label=train$label)
class(dtrain)
当我尝试将dtrain转换为矩阵或数据帧时出现错误,有人可以建议可以做什么
我需要将应变设为矩阵或数据框格式
解决方法
这似乎是将数据导出到Cpp的问题。 xgboost作者没有实现消气剂的地方。至少可以检索dimnames和dim。 实现的方法:
> methods(class="xgb.DMatrix")
[1] [ dim dimnames dimnames<- getinfo print setinfo
[8] slice
see '?methods' for accessing help and source code
colnames
也可以
示例:
> dd <- xgb.DMatrix(cbind(a = 1:10,b = 1:10))
> colnames(dd)
[1] "a" "b"
> dim(dd)
[1] 10 2
> dimnames(dd)
[[1]]
NULL
[[2]]
[1] "a" "b"
> slice(dd,1L)
xgb.DMatrix dim: 1 x 2 info: NA colnames: no
这是代码(xgb.DMatrix主体)的一部分,其中数据被导出到Cpp:
if (length(data) > 1)
stop("'data' has class 'character' and length ",length(data),".\n 'data' accepts either a numeric matrix or a single filename.")
handle <- .Call(XGDMatrixCreateFromFile_R,data,as.integer(silent))
}
else if (is.matrix(data)) {
handle <- .Call(XGDMatrixCreateFromMat_R,missing)
cnames <- colnames(data)
}
else if (inherits(data,"dgCMatrix")) {
handle <- .Call(XGDMatrixCreateFromCSC_R,data@p,data@i,data@x,nrow(data))
cnames <- colnames(data)
}
else {
stop("xgb.DMatrix does not support construction from ",typeof(data))
}
,
这是不可能的,得到了Xgboost库的主要维护者的响应
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。