我在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
答案 0 :(得分:3)
在我的情况下,我通过更改分配操作来修复此错误:
labels <- df_train$target_feature
答案 1 :(得分:2)
事实证明,通过删除一些列,有些行全部为0,并且无法为模型做贡献。
答案 2 :(得分:2)
对于稀疏矩阵,xgboost R接口使用CSC格式创建方法。目前的问题是该方法自动确定现有非稀疏值的行数,并且不计入末尾的任何完全稀疏行。最后可能会出现类似的完全稀疏列丢失,CSR稀疏格式。有关详细信息,请参阅稀疏矩阵格式的xgboost issue #1223和wikipedia。
答案 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”中使用。