贝叶斯算法是一种分类算法,用于解决逆向概率(逆概)的问题。
首先我们需要了解正向概率和逆向概率的区别。
- 正向概率:假设袋子里有 个白球, 个黑球,摸一次出黑球的概率。
- 逆向概率:袋子中黑白球的比例未知,摸出一个(或几个)球,根据取出球的颜色,推测袋子中黑白球的比例。
然后我们先用一个例子来引入和介绍贝叶斯算法。
学生校服问题
假设学校中有 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 在垃圾邮件中出现的频率即可。