我使用scikit-learn来计算文档的Tf-idf权重,然后使用朴素贝叶斯分类器对文本进行分类。但是,除了少数几个词外,文档中所有词的Tf-idf权重都是负值。但据我所知,负值意味着不重要的术语。那么,有必要将所有的Tf-idf值传递给贝叶斯分类器吗?如果我们只需要传递其中的一部分,该如何操作?此外,与线性SVC相比,贝叶斯分类器的表现如何?除了使用Tf-idf之外,还有没有更好的方法来查找文本中的标签?
谢谢
回答:
你提出了很多问题,但我会尽力帮助你。
据我所知,TF-IDF不应该是负值。TF是术语频率(某个术语在特定文档中出现的频率),而逆文档频率是(语料库中文档总数 / 包含该术语的文档数)。通常还会进行对数加权。我们通常会在分母上加1,以避免除以零。因此,只有当术语出现在语料库的每一个文档中时,你才会得到负的tf*idf值(正如你所说,这对于搜索没有帮助,因为它不增加信息)。我建议你重新检查你的算法。
给定术语t,文档d,语料库c:
tfidf = term freq * log(document count / (document frequency + 1))tfidf = [# of t in d] * log([#d in c] / ([#d with t in c] + 1))
在机器学习中,朴素贝叶斯和SVM都是很好的工具——它们的质量会因应用而异,我做过一些项目,它们的准确性结果相当。朴素贝叶斯通常很容易手动拼凑——我建议你先尝试这个,然后再去尝试SVM库。
我可能遗漏了一些东西,但我不是很确定我完全明白你想要什么——很乐意修改我的回答。