Naive_Bayes_0

朴素贝叶斯分类基础

假设某个体有 n 项特征(Feature),分别为 F1、F2、……、Fn。
现有 m 个类别(Category),分别为 C1、C2、……、Cm。
贝叶斯分类器就是计算出概率最大的那个分类,也就是求以下式子的最大值:
$$P(c|F1F2……Fn) = {P(F1F2……Fn|c)P(c) \over P(F1F2……Fn)}$$

由于 P(F1F2…Fn) 对于所有的类别都是相同的,可以省略,问题就变成了求:

$$P(F1F2…Fn|C)P(C)$$

朴素贝叶斯分类器则是更进一步,假设所有特征都彼此独立,因此:
$$P(F1F2……Fn|c)P(c) = P(F1|c) P(F2|c) …… P(Fn|c) P(C)$$

上式等号右边的每一项,都可以从统计资料中得到,由此就可以计算出每个类别对应的概率,从而找出最大概率的那个类。

朴素贝叶斯分类应用

账号分类

问题描述

根据某社区网站的抽样统计,该站10000个账号中有89%为真实账号(设为C0),11%为虚假账号(设为C1):

C0 = 0.89;
C1 = 0.11。

接下来,就要用统计资料判断一个账号的真实性。
假定某一个账号有以下三个特征:

F1: 日志数量/注册天数
F2: 好友数量/注册天数
F3: 是否使用真实头像(真实头像为1,非真实头像为0)
F1 = 0.1
F2 = 0.2
F3 = 0

请问该账号是真实账号还是虚假账号?

问题求解

方法是使用朴素贝叶斯分类器,计算下面这个计算式的值:

$$P(F1|C) P(F2|C) P(F3|C) P(C)$$

虽然上面这些值可以从统计资料得到,但是这里有一个问题:F1和F2是连续变量,不适宜按照某个特定值计算概率。
一个技巧是将连续值变为离散值,计算区间的概率。比如将F1分解成[0, 0.05]、(0.05, 0.2)、[0.2, +∞]三个区间,然后计算每个区间的概率。在我们这个例子中,F1等于0.1,落在第二个区间,所以计算的时候,就使用第二个区间的发生概率。

根据统计资料,可得:

P(F1|C0) = 0.5,P(F1|C1) = 0.1
P(F2|C0) = 0.7,P(F2|C1) = 0.2
P(F3|C0) = 0.2,P(F3|C1) = 0.9

因此:

$$P(F1|C0) P(F2|C0) P(F3|C0) P(C0) = 0.5\times0.7\times0.2\times0.89 = 0.0623$$

$$P(F1|C1) P(F2|C1) P(F3|C1) P(C1) = 0.1\times0.2\times0.9\times0.11 = 0.00198$$

可以看到,虽然这个用户没有使用真实头像,但是他是真实账号的概率,比虚假账号高出30多倍,因此判断这个账号为真。