我设计并实现了一个朴素贝叶斯文本分类器(用 Java)。我主要用它来将推文分为 20 类。为了确定文档属于我使用的类别的概率
foreach(class)
{
Probability = (P(bag of words occurring for class) * P(class)) / P(bag of words occurring globally)
}
确定一袋词是否真的不属于任何类别的最佳方法是什么?我知道我可以只发送 P(类出现的词袋)的最小阈值,如果所有类都在该阈值以下,则将文档归类为未分类,但是我意识到这会阻止该分类器变得敏感.
是否可以选择创建一个未分类类并使用我认为不可分类的文档对其进行训练?
谢谢,
标记
--编辑---
我只是想 - 我可以为 P(bag of words occurring globally)*(number of words in document) 设置一个最大阈值。这意味着任何主要由常用词组成的文档(通常是我想过滤掉的推文)例如。 “是的,我同意你的看法”。会被过滤掉。 - 您对此的想法也将不胜感激。
或者也许我应该找到标准偏差,如果它很低,则确定它应该未分类?
最佳答案
我看到了两个不同的选项,将问题视为一组 20 个二元分类问题。
- 您可以计算 P(博士在类里面)/P(博士不在类里面)的可能性。一些朴素贝叶斯实现使用这种方法。
- 假设您有一些评估指标,您可以计算每个类别的阈值并根据交叉验证过程对其进行优化。这是应用文本分类的标准方法。您会使用阈值(每个类(class)一个),但它们将基于您的数据。在您的情况下,SCut 或 ScutFBR 将是最佳选择,如本 paper 中所述。 .
问候,
关于java - 朴素贝叶斯文本分类器 - 确定何时应标记文档 'unclassified',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16479987/