文本分类 - 当训练和测试数据具有不同特征时该怎么办

数据挖掘 机器学习 r 文本挖掘 随机森林
2022-02-17 08:00:39

我正在执行二进制文本分类。如果是中性的,我必须将推文分类为 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 中。

那么我应该如何处理这些情况。我是数据科学的新手。请帮忙。

2个回答

在您的训练和测试分区中拥有不同的功能是非常好的。如果这两组是从同一个群体中随机选择的,那么人们会期望,如果有许多可能的特征,就像文本分类中经常出现的情况一样,就会观察到差异。为了解决这个问题,该领域的标准做法是在训练分区上训练您的模型,然后在测试分区上进行评估,并丢弃该分组中的任何新特征。如果在此过程之后遇到没有特征的测试观察的边缘情况,通常的做法是使用启发式对其进行分类,完全绕过模型(例如,没有特征的观察被分类为中性)。

你是对的,这可能是由于看不见的测试数据中的新特性。这是数据科学 101,您应该在测试/训练数据集中具有相同的特征。

我的猜测是,这是由于训练数据中不存在分类变量的新级别,但存在于看不见的测试数据中,这在randomforest评分中出现了错误。为了解决这个问题,您应该从您的总体中选择一个随机样本进行测试/训练,然后使用此处给出的技术来协调分类变量的水平:

协调测试/训练中分类变量的水平