计算互信息

机器算法验证 机器学习 信息论 互信息
2022-04-11 17:53:55

我正在为一项作业制作垃圾邮件过滤器。我读过的一篇论文中概述的步骤之一是找到文本中所有单词的互信息,然后选择具有最高 MI 的 500 左右。

论文(和其他地方)中给出的等式是:

MI(Xi,C)=P(Xi,C)logP(Xi,C)P(Xi)P(C)

在哪里Xi是一个特征并且C是一类。

论文中并不清楚,但Xi将是一个词和C将是垃圾邮件或非垃圾邮件。

我可以清楚我应该做的计算吗?我认为“伟哥”一词如下:

P(Xi,C)在这种情况下,要么是“伟哥”一词在所有垃圾邮件中出现的频率除以垃圾邮件中的字数,要么是非垃圾邮件中的相同。

P(Xi)是该词在垃圾邮件和火腿电子邮件中出现的概率。

P(C)是类的先验。

所以基本上我们正在做两次计算(一个用于垃圾邮件,一个用于火腿)并将它们加在一起。

你认为这是对的吗?

我的理解是,互信息就像为一个特征找到信息增益。这是正确的吗?

希望这是有道理的。提前谢谢了。

1个回答

更明确地说,您真正在做的是执行双重求和,您正在迭代所有可能的特征状态Xi以及所有可能的状态C. 在您的特定情况下C恰好是二进制的;也就是说,它只有两种状态(垃圾邮件和火腿)。

至于Xi,有点不清楚,但我猜这也是一个二进制特征,表示单词的存在或不存在i. 因此,您的总结中确实有 4 个术语:字i存在于垃圾邮件、单词中i垃圾邮件中不存在,单词i存在于火腿中,而单词i火腿中不存在。

所以P(Xi)部分真的是:

  • P(字i存在)
  • P(字i缺席)

P(C)部分真的是:

  • P(类是垃圾邮件)
  • P(类是火腿)

然后P(Xi,C)位真的是:

  • P(字i存在并且类是垃圾邮件)
  • P(字i缺席并且课程是垃圾邮件)
  • P(字i存在并且类是火腿)
  • P(字i缺席,班级是火腿)

然后,您可以将这些值相应地插入总和。