我正在执行二进制文本分类。我必须将一条推文分类为 0(如果是中立)和 1(如果是仇恨言论)。
因此,作为一般经验法则,我对数据进行了预处理。创建术语文档频率并删除稀疏术语后,我将数据分为训练和测试。 我使用随机森林和逻辑回归训练我的模型,效果很好。
set.seed(123)
tweetRand = randomForest(label ~ ., data = train_sparse, importance=TRUE, nTree=500 )
randPridct = predict(tweetRand, newdata = test_sparse)
table(test_sparse$label,randPridct >=0.5)
它在从原始内容中划分出的测试数据上运行良好。 但是当我在新的看不见的数据上运行它时,它会抛出异常。
> predicrRand_test=predict(tweetRand, newdata=sparse_4testing)
Error in eval(predvars, data, env) : object 'run' not found
我的理解是,“运行”是训练中存在的一个功能,但不存在于看不见的测试数据中,并且在我的模型训练期间,“运行”包含在 tdm 中。 在 test 的预处理中,run 不在 test tdm 中。
那么我应该如何处理这些情况。我是数据科学的新手。请帮忙。
最佳答案
在这种情况下,通常最好的方法是忽略实时测试数据中的新功能( token )。
您可以通过以下方式实现此目的:
- 构建训练词汇表(创建训练集中使用的所有功能/标记的集合)。
- 过滤所有新测试实例,删除训练词汇表中未包含的所有标记/功能。
关于r - 文本分类-当训练数据和测试数据具有不同特征时该怎么办,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49325181/