xgb.setinfo中的错误(dmat,names(p),p [[1]]):标签的长度必须等于输入数据中的行数

时间:2016-03-07 20:02:40

标签: r matrix xgboost

我在R中使用xgboost。我有一个矩阵并且创建了xgb矩阵,但是当我减少数据中的列时,我收到以下错误: xgb.setinfo中的错误(dmat,names(p),p [[1]]):   标签的长度必须等于输入数据中的行数

这是R代码:

xgbmat1 = xgb.DMatrix(基质(data.matrix(CTT1)),标记= as.matrix(as.numeric(数据$ V2)) - 1) xgbmat1 = xgb.DMatrix(基质(data.matrix(CTT1 [,NR])),标记= as.matrix(as.numeric(数据$ V2)) - 1)

第一个工作正常。

  

暗淡(CTT1 [,NR])

[1] 6401 1048

  

暗淡(CTT1)

[1] 6401 5901

5 个答案:

答案 0 :(得分:3)

在我的情况下,我通过更改分配操作来修复此错误:

labels <- df_train$target_feature

答案 1 :(得分:2)

事实证明,通过删除一些列,有些行全部为0,并且无法为模型做贡献。

答案 2 :(得分:2)

对于稀疏矩阵,xgboost R接口使用CSC格式创建方法。目前的问题是该方法自动确定现有非稀疏值的行数,并且不计入末尾的任何完全稀疏行。最后可能会出现类似的完全稀疏列丢失,CSR稀疏格式。有关详细信息,请参阅稀疏矩阵格式的xgboost issue #1223wikipedia

答案 3 :(得分:0)

创建类似DBMatrix的正确方法

    xgtrain <- xgb.DMatrix(data = as.matrix(X_train[,-5]), label = `X_train$item_cnt_month)`

在数据参数中删除标签列,并使用相同的数据集在索引5中创建标签列。我有item_cnt_month,在运行时将其删除,并使用相同的数据集来引用标签列。

答案 4 :(得分:0)

在拆分数据之前,需要将其转换为数据框。 对于示例:

数据<-read.csv(...)

data = as.data.frame(data)

现在,您可以设置火车数据和测试数据以在“ sparse.model.matrix”和“ xgb.DMatrix”中使用。