矩阵中的错误(unlist(out),ncol = times):创建数据分区时数据太长

时间:2017-04-12 02:24:12

标签: r xgboost

我想训练一个xgboost模型,但是当我创建数据分区时,它有错误:

library(data.table)
library(caret)
library(xgboost)
digit <- fread("train.csv",header=T)
index <- createDataPartition(digit$label,0.75,list=F)

矩阵错误(unlist(out),ncol = times):数据太长

我使用另一种方法来创建数据分区,但这是另一个问题:

dim(digit)
[1] 42000   785
n <- 42000*0.7
index <- sample(1:42000,n)
train <- digit[index]
test <- digit[-index]
xgmat <- xgb.DMatrix(train[,-1],label=train[,1])

xgb.DMatrix中的错误(train [,-1],label = train [,1]):   xgb.DMatrix:不支持从列表构造 另外:警告信息: 在if(class(data)==&#34; dgCMatrix&#34;){:   条件的长度> 1,只使用第一个元素

好的,我首先将data.frame转换为矩阵:

train <- as.matrix(train)
xgmat <- xgb.DMatrix(train[,-1],label=train[,1])

xgb.DMatrix中的错误(train [,-1],label = train [,1]):   REAL()只能应用于&#39;数字&#39;而不是&#39;整数&#39;

地球上有什么问题?任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

您必须使用index <- createDataPartition(digit$label, p=0.75,list=F),否则将0.75视为times=0.75参数。例如,matrix(1:16, ncol=0.75)导致相同的数据太长&#39;错误。

至于&#34; REAL()只能应用于数字&#39;而不是&#39;整数&#39;&#34;&#34;错误,看起来你的矩阵是一个整数矩阵,而xgb.DMatrix期望它是一个数字矩阵。我们将为下一个版本添加一个修复程序,以便它也接受整数矩阵。同时,作为一种变通方法,您可以简单地将矩阵输入强制为数字:

train <- as.matrix(train) * 1
xgmat <- xgb.DMatrix(train[,-1],label=train[,1])