我已经实现了多项朴素的朴素贝叶斯分类器的相当有效的实现,它的工作就像一个魅力。直到分类器遇到很长的消息(大约1万个单词),预测结果就变得毫无意义(例如-0.0),并且在使用Python的math domain error
函数时得到了math.log
。我使用log的原因是,当使用非常小的浮点数时,将它们相乘所得的结果就是非常小的浮点数,并且该对数有助于避免无限小的数字会导致预测失败。
某些上下文
我使用的词袋方法没有任何形式的向量化(例如TF-IDF,因为我无法弄清楚如何正确实现它并平衡出现0的词。对此,您也应该感谢摘录; )),而我使用的是频率计数和拉普拉斯加性平滑处理(基本上为每个频率计数加1,所以永远不会为0)。
我可以直接注销,但这意味着在消息如此长的情况下,引擎无论如何都无法正确检测到它们,所以这不是重点。
我已经实现了多项朴素的朴素贝叶斯分类器的相当有效的实现,它的工作就像一个魅力。直到分类器遇到非常长的消息(大约10k ...
如果您应用log-sum-exp
,则朴素贝叶斯不存在乘法运算,只有加法运算,因此下溢的可能性很小。而且,如果您使用平滑处理(就像您说的那样),您将永远不会获得log
的不确定行为。