我使用naivebayes进行文本分类这是我如何为指定类别中的每个术语创建初始权重的方法:
术语3:术语3存在的次数/类别中的文档数
术语1:术语1存在的次数/类别b中的文档数
对于新的测试文档,我根据测试文档中是否存在该术语来调整权重:
term3:在测试文档中不存在,因此我使用1-weight for categoryA_term3
term1:存在于测试文档中,因此我对categoryB_term1使用与上述相同的权重
然后我乘以每个类别的权重。 当我创建每个句子都有一个句子的虚拟火车/测试文档时,这是可行的,但是当我为火车/测试文档实现真实文档时,当我把所有文档放在一起时,我总是得到零。这是因为概率很小,在乘以这么多个小数字后,python就收敛到零了吗?? 我被困住了,我总是遇到同样的零问题:(我真的很感谢你的帮助!在
正如EdCottrell评论的那样,您需要考虑如果您遇到一个不在类别文档中的单词会发生什么。使用Laplace smoothing可以避免与0相乘。如果在一个类别的n个文档中看到k中的一个词,则将条件概率(k+1)/(n+2)或(k+a)/(n+2a)赋给该词。在
标准的做法是计算乘积的对数,而不是取许多小数的乘积。在
然后你有一个不是很小的数字的总和。避免使用日志0。如果需要的话,可以在之后进行求幂运算,但通常只需将决策阈值转换为对数上的条件。在
相关问题 更多 >
编程相关推荐