如何在朴素贝叶斯分类器中使用优势比特征选择

Posted

技术标签:

【中文标题】如何在朴素贝叶斯分类器中使用优势比特征选择【英文标题】:How to use Odds ratio feature selection with Naive bayes Classifier 【发布时间】:2011-12-04 07:54:51 【问题描述】:

我想将文档(由单词组成)分为 3 类(正面、负面、未知/中性)。文档单词的一个子集成为特征。

到目前为止,我已经编写了一个朴素贝叶斯分类器,将其用作特征选择器信息增益和卡方统计。现在,我想看看如果我使用 Odds ratio 作为特征选择器会发生什么。

我的问题是我不知道如何实现赔率。我应该:

1) 计算每个单词 w、每个类别的 Odds Ratio: 例如。为 w:

   Prob of word as positive Pw,p = #positive docs with w/#docs
   Prob of word as negative Pw,n = #negative docs with w/#docs
   Prob of word as unknown Pw,u = #unknown docs with w/#docs

   OR(Wi,P) = log( Pw,p*(1-Pw,p) / (Pw,n + Pw,u)*(1-(Pw,n + Pw,u)) ) 
   OR(Wi,N) ...
   OR(Wi,U) ...

2) 我应该如何决定是否选择这个词作为特征?

提前谢谢...

【问题讨论】:

【参考方案1】:

由于我花了一段时间才独立思考这一切,所以为了人类的利益,让我在这里解释一下我的发现。

使用(对数)优势比是在文本分类之前过滤特征的标准技术。它是一个“单边度量”[Zheng et al., 2004],因为它只发现与特定类别正相关的特征。作为在给定类“c”的情况下看到特征“t”的概率的对数优势比,它被定义为:

LOR(t,c) = log [Pr(t|c) / (1 - Pr(t|c))] : [Pr(t|!c) / (1 - Pr(t|!c))]
= log [Pr(t|c) (1 - Pr(t|!c))] / [Pr(t|!c) (1 - Pr(t|c))]

这里我使用'!c' 来表示类是不是 c 的文档。

但是你如何实际计算 Pr(t|c) 和 Pr(t|!c)?

需要注意的一个微妙之处是,通常在文档事件模型上定义特征选择概率[McCallum & Nigam 1998, Manning et al. 2008],即 Pr(t|c) 是在给定文档类别为 c 的情况下,在文档中看到术语 t 一次或多次的概率(换句话说,给定的 t c) 类。该概率的最大似然估计 (MLE) 将是包含 t 至少一次的 c 类文档的比例。 [从技术上讲,这被称为多元伯努利事件模型,并且与基于单词的多项式事件模型不同,后者将使用整数字数计算 Pr(t|c) - 有关更多详细信息,请参阅 McCallum 论文或 Manning IR 教科书,特别是关于这如何应用于朴素贝叶斯文本分类器。]

有效使用 LOR 的一个关键是平滑这些条件概率估计,因为正如@yura 所指出的,罕见事件在这里是有问题的(例如,Pr(t|!c) 的 MLE为零,导致无限 LOR)。但是我们如何平滑呢?

在文献中,Forman 报告通过“在分母中的任何零计数加一”来平滑 LOR(Forman,2003 年),而 Zheng 等人(2004 年)使用“ELE [预期似然估计] 平滑”,通常相当于每个计数加 0.5。

为了以符合概率论的方式进行平滑,我使用多元伯努利事件模型遵循文本分类的标准做法。本质上,我们假设我们已经看到了每个存在计数和每个缺席计数 B 次。所以我们对 Pr(t|c) 的估计可以写成 #(t,c):我们看到 t 和 c 的次数,以及 #(t,!c):我们看到的次数见过没有c的t,如下:

Pr(t|c) = [#(t,c) + B] / [#(t,c) + #(t,!c) + 2B]
 = [#(t,c) + B] / [#(c) + 2B]

如果B = 0,我们有 MLE。如果B = 0.5,我们有ELE。如果B = 1,我们有拉普拉斯先验。请注意,这看起来与多项事件模型的平滑不同,其中拉普拉斯先验导致您添加 |V|在分母中 [McCallum & Nigam, 1998]

您可以选择0.51 作为您的平滑值,这取决于之前的哪些工作最能激发您的灵感,并将其代入上述LOR(t,c) 的等式,并对所有特征进行评分。

通常,然后您决定要使用多少个特征,比如 N,然后根据得分选择 N 个排名最高的特征。

在多类设置中,人们经常使用 1 vs All 分类器,因此为每个分类器独立进行特征选择,因此每个正类都使用单边度量(Forman,2003)。但是,如果您想找到在多类环境中工作的独特的简化特征集,文献中有一些高级方法(例如,Chapelle & Keerthi,2008)。

参考资料:

郑、吴、斯里哈里,2004

麦卡勒姆和尼甘 1998

Manning、Raghavan 和 Schütze,2008 年

福尔曼,2003 年

Chapelle 和 Keerthi,2008 年

【讨论】:

【参考方案2】:

奇数比不是特征选择的好衡量标准,因为它只显示特征存在时发生的情况,而当它不存在时什么也不显示。因此它不适用于稀有功能,并且几乎所有功能都是稀有的,因此它不适用于几乎所有功能。以 0.0001 存在的具有 100% 置信度的类别为正的示例特征对分类毫无用处。因此,如果您仍想使用奇数比,请在特征频率上添加阈值,例如 5% 的情况下存在的特征。但我会推荐更好的方法 - 使用自动解决这些问题的 Chi 或信息增益指标。

【讨论】:

感谢您的回复。我想我对赔率有一个错误的想法。 OR 似乎对于根据它们与某个类的相关性来提取特征很有用(例如,在正类中具有高 OR 分数的词很可能是正词)。由于我使用单词对文本文档的情绪进行分类,因此某些单词在文档中重复,并且在我的情况下并非所有功能都很少见......对吗? 我的观点是,仅凭胜算比,您不会得到很好的代表。简单的例子,所有只提到一次的单词都将有 1 个奇数比,它们是无用的。如果您对文本中提到至少 15 次的单词进行排序,它将给出有意义的结果。 哦,我明白了,使用出现在某个频率上的单词可以与 OR 一起使用可以带来很好的结果...谢谢

以上是关于如何在朴素贝叶斯分类器中使用优势比特征选择的主要内容,如果未能解决你的问题,请参考以下文章

如何在朴素贝叶斯分类器中使用 k 折交叉验证?

如何在斯坦福分类器中使用朴素贝叶斯分类器、SVM 和最大熵

如何从朴素贝叶斯分类器中的概率密度函数计算概率?

无法在朴素贝叶斯中训练模型

如何在 python 的朴素贝叶斯分类器中对用户输入测试集进行分类?

为 Twitter 情绪分析项目寻找 C# 中的开源朴素贝叶斯分类器 [关闭]