如果没有涵盖训练集的所有功能,如何预测新数据集的标签?

时间:2017-12-13 14:35:09

标签: r text-mining

我是文本新手。

我有一个短信数据集,我想知道是否有垃圾邮件。我使用quanteda将我的文本内容转换为单词矩阵。我还删除了停用词,将单词转换为词干,并用

训练了一个模型

rpart.cv.1 <- train(Label ~ ., data = train_tokens_df, method = "rpart", trControl = cv_cntrl, tuneLength = 5)

现在我想预测testdata的标签。我完成了对列车数据所做的所有预处理步骤。问题是,我的列车数据中有测试数据未涵盖的字样。

我的猜测是,下一步应该是添加测试数据中缺少的训练数据的所有列。但是如何以简单有效的方式做到这一点?在我的案例中,训练和测试都是数据框架。

1 个答案:

答案 0 :(得分:0)

data.table可能有一些技巧,但是如果你有两个data.frame并且只想将第二个“子集”到第一个的列名,填写缺少的列,那么你可以做到以下几点:

orig = data.frame(a = 1:3, b = 2:4)  # example data
new  = data.frame(a = 7:9, c = 11:13)  # missing the 'b' column

# first insert new columns that are still missing in 'new':
new[setdiff(colnames(orig), colnames(new))] = 0  # NA, or whatever
# now subset the new dataset to the columns of the old one
new = new[colnames(orig)]

这会给你

> new
  a b
1 7 0
2 8 0
3 9 0

请注意,这仅适用于data.frame,而不适用于matrix,因此如果您有矩阵,则需要执行此操作

new = as.data.frame(new)

第一