0%

贝叶斯算法 Bayesian Classfier

贝叶斯算法是一种分类算法,用于解决逆向概率(逆概)的问题。

首先我们需要了解正向概率和逆向概率的区别。

  • 正向概率:假设袋子里有 个白球, 个黑球,摸一次出黑球的概率。
  • 逆向概率:袋子中黑白球的比例未知,摸出一个(或几个)球,根据取出球的颜色,推测袋子中黑白球的比例。

然后我们先用一个例子来引入和介绍贝叶斯算法。

学生校服问题

假设学校中有 60% 的男生和 40% 的女生,其中男生总穿长裤,女生一半穿长裤一半穿裙子。

一个正向概率的问题可能是:随机选一个学生,TA 穿长裤的概率或穿裙子的概率是多大。而一个逆向概率的问题为:一个学生穿着长裤,TA 是女生的概率是多大。

公式推导

假设学校里总人数为

则穿长裤的男生人数为

其中,

  • 表示男生的概率 = 60%
  • 表示男生穿长裤的概率 = 100%

穿长裤的女生人数为

我们想要知道穿长裤的学生中女生的概率,则需要用穿长裤的女生的人数除以穿长裤的学生的总人数。

穿长裤的学生的总人数为

所以穿长裤的学生中女生的比例为

贝叶斯公式

由上面的例子,我们可以看出贝叶斯公式的一般形式为

即求在 B 的条件下 A 的概率,可以根据在 A 的条件下 B 的概率进行计算。

其中 先验概率

这里我们再用另一个实例来解释和应用贝叶斯。

拼写纠正实例

一个用户输入了一个不在词典中的单词,我们需要猜测他想输入的单词是什么,即计算

我们设用户实际输入单词为 (Data,即观测数据),猜测是某个单词的概率为 ,即 是我们猜测的单词,该输入单词为 的概率为

根据贝叶斯公式,

其中,

  • 因为对于每个猜测 h1,h2,h3…, 的值不变,所以可以忽略它
  • 所以 ,即它俩成正比
    • 这里 表示猜测 本身独立的可能性大小。
      • 比如在词库中有 1w 个单词,其中 有 5000 个,那么
      • 即猜测的单词的_词频_会影响它的可能性的概率。比如,用户输入单词 thaw,我们猜测他可能想输入 that 或者 than,这两个单词生成输入单词的可能性都很大,那么因为 that 的词频比较高,所以我们最后会猜测用户想输入的是 that。
    • 表示猜测 生成输入单词的可能性大小。

模型比较

  • 最大似然估计:最符合观测数据的最有优势(即 最大的最有优势)。
    • 比如,我们先投掷硬币 10w 次,观察每次硬币的正反,得出有 60% 的概率为正,40% 的概率为反,那么在第 10w+1 次投掷硬币时,我们就根据前 10w 次观察的概率判断这次硬币可能为正。
  • 奥卡姆剃刀 较大的模型有较大的优势(即越常见越好)。

最大似然估计应该比较常用。

垃圾邮件过滤

这个应该是贝叶斯分类的经典例子。

我们要判断一封邮件是否为垃圾邮件。

首先,假设这封邮件为 D,D 由 个单词组成。我们用 表示垃圾邮件, 表示正常邮件。

那么 D 是垃圾邮件的概率为

D 不是垃圾邮件的概率为

这里_先验概率_ 可以由一个邮件库中垃圾邮件和正常邮件的比例求得。

因为 D 中包含 个单词 d1,d2,…,dn,则 表示在垃圾邮件中出现与邮件 D 一样的邮件的概率。即

其中, 表示一个垃圾邮件中第一个词为 d1 的概率, 表示一个垃圾邮件中第一个词为 d1 后第二个词恰好为 d2 的概率(其他类推)。

为了方便计算,我们假设 di 与 di-1 相互独立(即完全无关,互不影响),则将其转换为 朴素贝叶斯(Naive Bayes,NB):

于是只需要统计单词 di 在垃圾邮件中出现的频率即可。