一般来说,TF-IDF何时会降低准确度?

问题描述 投票:0回答:3

我正在使用朴素贝叶斯模型训练一个包含200000条评论的正文和负面评论的语料库,我注意到执行TF-IDF实际上降低了准确性(在50000评论的测试集上测试时)约2%。所以我想知道TF-IDF是否对其使用的数据或模型有任何基本假设,即任何通过使用它来降低准确性的情况?

sentiment-analysis tf-idf text-classification naivebayes
3个回答
5
投票

在某些情况下,TF * IDF的IDF组件可能会损害您的分类准确性。

让我们假设以下人为的,简单的分类任务,为了说明而做:

  • A类:包含“玉米”一词的文字
  • B类:不包含“玉米”一词的文字

现在假设在A类中,您有100 000个示例,而在B类中,有1000个示例。

TFIDF会怎样?玉米的逆文档频率将非常低(因为它几乎存在于所有文档中),并且特征“玉米”将获得非常小的TFIDF,这是分类器使用的特征的权重。显然,'玉米'是这项分类任务的最佳特征。这是TFIDF可能降低分类准确性的示例。更笼统地说:

  • 当有阶级不平衡时。如果你在一个班级中有更多的实例,频繁类别的好词特征具有较低的IDF,因此它们的最佳特征将具有较低的权重
  • 当你有高频率的词语时,可以预测其中一个类(在该类的大多数文档中找到的词)

1
投票

您可以通过适当地执行网格搜索来启发性地确定训练数据上IDF的使用是否会降低您的预测准确性。例如,如果您正在使用sklearn,并且想要确定IDF是否会降低模型的预测准确性,则可以对TfidfVectorizer的use_idf参数执行网格搜索。例如,此代码将在选择IDF时实现gridsearch算法,以便使用SGDClassifier进行分类(您必须首先导入所有被实例化的对象):

# import all objects first
X = # your training data
y = # your labels

pipeline = Pipeline([('tfidf',TfidfVectorizer()),
                     ('sgd',SGDClassifier())])
params = {'tfidf__use_idf':(False,True)}
gridsearch = GridSearch(pipeline,params)
gridsearch.fit(X,y)
print(gridsearch.best_params_)

输出将是:

Parameters selected as the best fit:
{'tfidf__use_idf': False}

要么

{'tfidf__use_idf': True}

0
投票

据我所知,TF-IDF是一个功能。 TF是术语频率,即文档中出现的频率。 IDF是逆文档频率,即术语出现的文档的频率。

这里,模型使用训练语料库中的TF-IDF信息来估计新文档。举一个非常简单的例子,说一个带有单词bad的文件在训练集中有相当高的单词频率,将情绪标签视为否定。因此,任何包含不良内容的新文档都更有可能是负面的。

为了准确,您可以手动选择包含大多数使用的否定词或正词的训练语料库。这将提高准确性。

© www.soinside.com 2019 - 2024. All rights reserved.