将数据转换为R中xgboost的格式?

将数据转换为R中xgboost的格式?,r,xgboost,R,Xgboost,是否有人有一个解释得很好的例子,说明如何将数据转换为xgboost在R中可用的格式 这对我没有帮助。数据(agaricus.train和agaricus.test)已采用专门格式(dgCMatrix): 我看到了它的用途,但我仍然很难将相当简单的数据整合到xgboost需要的格式中 例如,假设我有两个数据帧:单词和标签 单词数据框具有句子id和单词id,每个句子有一个或多个单词 data\u标签数据框有一个句子id和标签(例如,对于二进制分类任务为0或1) 我如何将这些数据转换成一种格式来预测一

是否有人有一个解释得很好的例子,说明如何将数据转换为xgboost在R中可用的格式

这对我没有帮助。数据(
agaricus.train
agaricus.test
)已采用专门格式(
dgCMatrix
):

我看到了它的用途,但我仍然很难将相当简单的数据整合到xgboost需要的格式中

例如,假设我有两个数据帧:
单词
标签

单词
数据框具有
句子id
单词id
,每个句子有一个或多个单词

data\u标签
数据框有一个句子id和标签(例如,对于二进制分类任务为0或1)

我如何将这些数据转换成一种格式来预测一个句子的标签

我可以分训练和测试

编辑:单词和数据标签的最简单版本:

words <- data.frame(sentence_id=c(1, 1, 2, 2, 2),
                    word_id=c(1, 2, 1, 3, 4))
data_label <- data.frame(sentence_id=c(1, 2), label=c(0, 1))

words输入到
xgb.DMatrix
可以是密集的
matrix
,也可以是稀疏的
dgCMatrix
,或者是以LibSVM格式存储在文件中的稀疏数据。因为您处理的是文本数据,所以稀疏表示是最合适的。 下面是如何将示例数据转换为dgCMatrix的示例。 在这里,我假设一个完美的情况,从1开始的连续整数组在两个表中都是相同的。如果实际情况并非如此,那么您就需要更多的数据

library(Matrix)

words <- data.frame(sentence_id=c(1, 1, 2, 2, 2),
                    word_id=c(1, 2, 1, 3, 4))
data_label <- data.frame(sentence_id=c(1, 2), label=c(0, 1))

# quick check of assumptions about sentence_id
stopifnot(min(words$sentence_id) == 1 &&
          max(words$sentence_id) == length(unique(words$sentence_id)))

# sparse matrix construction from "triplet" data
# (rows are sentences, columns are words, and the value is always 1)
smat <- sparseMatrix(i = words$sentence_id, j = words$word_id, x = 1)

# make sure sentence_id are in proper order in data_label:
data_label <- data_label[order(data_label$sentence_id)]
stopifnot(all.equal(data_label$sentence_id, 1:nrow(smat)))

xmat <- xgb.DMatrix(smat, label = data_label$label)
库(矩阵)

单词需要开始编码。我猜您知道如何将数据帧转换为矩阵格式,这对于xgboost非常重要,并且所有数据都是数字格式。你能发布你的数据和你正在使用的代码的一个小样本吗?否则就不清楚问题出在哪里。@Course_pete我把单词和数据标签的代码放在上面。@42-我把单词和数据标签的代码放在上面。@Course_pete不要假设我知道如何转换为矩阵格式。有几种不同的转换函数,我不知道xgboost想要哪种。
library(Matrix)

words <- data.frame(sentence_id=c(1, 1, 2, 2, 2),
                    word_id=c(1, 2, 1, 3, 4))
data_label <- data.frame(sentence_id=c(1, 2), label=c(0, 1))

# quick check of assumptions about sentence_id
stopifnot(min(words$sentence_id) == 1 &&
          max(words$sentence_id) == length(unique(words$sentence_id)))

# sparse matrix construction from "triplet" data
# (rows are sentences, columns are words, and the value is always 1)
smat <- sparseMatrix(i = words$sentence_id, j = words$word_id, x = 1)

# make sure sentence_id are in proper order in data_label:
data_label <- data_label[order(data_label$sentence_id)]
stopifnot(all.equal(data_label$sentence_id, 1:nrow(smat)))

xmat <- xgb.DMatrix(smat, label = data_label$label)