4

我在 R 中使用 xgboost。

我使用矩阵作为输入很好地创建了 xgb 矩阵,但是当我减少矩阵数据中的列数时,我收到一个错误。

这有效:

> dim(ctt1)

[1] 6401 5901

> xgbmat1 <- xgb.DMatrix(
     Matrix(data.matrix(ctt1)),
     label = as.matrix(as.numeric(data$V2)) - 1
  )

这不会:

> dim(ctt1[,nr])

[1] 6401 1048

xgbmat1 <- xgb.DMatrix(
    Matrix(data.matrix(ctt1[,nr])),
    label = as.matrix(as.numeric(data$V2)) - 1)

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

4

5 回答 5

4

就我而言,我通过更改分配操作来修复此错误:

labels <- df_train$target_feature

于 2017-06-23T13:26:59.697 回答
2

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

于 2016-03-07T20:58:27.907 回答
2

对于稀疏矩阵,xgboost R 接口使用 CSC 格式创建方法。目前的问题是这种方法会自动从现有的非稀疏值中确定行数,并且末尾的任何完全稀疏的行都不计入。 CSR 稀疏可能会发生类似的末尾完全稀疏列的丢失格式。有关更多详细信息,请参阅xgboost 问题 #1223以及有关稀疏矩阵格式的维基百科。

于 2016-07-02T20:35:46.083 回答
1

创建 DBMatrix Like 的正确方法

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

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

于 2019-04-05T10:12:39.580 回答
0

在拆分数据之前,您需要将其转换为数据框。例如:

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

数据 = as.data.frame(数据)

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

于 2020-08-18T14:50:05.230 回答