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