我使用scikit-learn来查找文档的Tf-idf权重,然后使用朴素贝叶斯分类器对文本进行分类。但文件中所有单词的Tf-idf权重除少数外均为负数。但据我所知,负值意味着不重要的条款。那么是否有必要将整个Tf-idf值传递给贝叶斯分类器?如果我们只需要通过其中几个,我们该怎么做?与linearSVC相比,贝叶斯分类器有多好还是坏?有没有更好的方式来找到除了使用Tf-idf以外的文本中的标签?使用Python的朴素贝叶斯分类器
谢谢
我使用scikit-learn来查找文档的Tf-idf权重,然后使用朴素贝叶斯分类器对文本进行分类。但文件中所有单词的Tf-idf权重除少数外均为负数。但据我所知,负值意味着不重要的条款。那么是否有必要将整个Tf-idf值传递给贝叶斯分类器?如果我们只需要通过其中几个,我们该怎么做?与linearSVC相比,贝叶斯分类器有多好还是坏?有没有更好的方式来找到除了使用Tf-idf以外的文本中的标签?使用Python的朴素贝叶斯分类器
谢谢
你有很多问题,但我会尽力帮助。
据我所知,TF-IDF不应该是一个负值。 TF是术语频率(术语在特定文档中出现的频率)和逆文档频率(语料库中的文档数量/包含该术语的文档数量)。那通常是日志加权的。我们经常为分母添加一个以避免被零除。因此,唯一一次你会得到一个负面的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库之前,我会首先给出一个。
我可能会错过一些东西,但我不太确定我确切知道你在找什么 - 很高兴能修改我的答案。
我也很喜欢这个主题。 当我使用baes分类(可能是这篇关于baes算法的俄文文章可以帮助你http://habrahabr.ru/blogs/python/120194/)我只用了20个顶级文档。我尝试了很多值。在我的实验前20名获得最佳成绩。 另外我改变通常的TF-IDF这样:
def f(word):
idf = log10(0.5/word.df)
if idf < 0:
idf = 0
return word.tf * idf
在这种情况下“坏词语” wieght等于0
此错误已被固定在主分支。当心text vectorizer API已经改变了一点,以便更容易定制标记。
首先感谢您的快速响应。因此,如果Tf-idf值大于零的单词被采用,那么可以将它用作标签吗? 。 – jvc 2012-03-13 02:58:02
另外你对训练贝叶斯分类器有什么看法。是否需要使用整个文档Tf-idf来完成它,还是只能使用Tf-idf值较高的单词的Tf-idf值来完成。 – jvc 2012-03-13 02:59:30
那么,首先,文档中的大部分单词不应该是负面的。你的语料库有多大?在运行之前显然要删除“the”,“an”等停用词。不知道你的标签是什么意思,但如果你的意思是像特征或类似的标签,那么我认为这是一个好方法。 – Chet 2012-03-13 03:10:03