【问题标题】:How to predict label of new dataset, when it does not cover all features of the training set?当新数据集没有覆盖训练集的所有特征时,如何预测新数据集的标签?
【发布时间】:2017-12-13 22:54:45
【问题描述】:

我是文本挖掘的新手。

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

训练了一个模型

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

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

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

【问题讨论】:

  • 您可以使用分层抽样来确保每个单词都有一些训练和测试行。另外,首先考虑你将如何处理只出现一次的单词。这些肯定属于训练数据或测试数据。
  • 我做过分层抽样,但知道我想预测我不知道标签的数据。
  • 如果您的训练数据中没有标签,则无法在这些行上训练模型。如果您的火车数据中没有标签,您将无法检查这些行的准确性。如果我理解正确,标签是您的目标变量,对吗?为什么不排除没有目标变量的行?它们无法使用。

标签: r text-mining


【解决方案1】:

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)

首先。

【讨论】:

    猜你喜欢
    • 2018-08-19
    • 2020-03-09
    • 1970-01-01
    • 1970-01-01
    • 2020-03-03
    • 2017-04-05
    • 2019-01-14
    • 2021-03-20
    • 2020-03-19
    相关资源
    最近更新 更多