贝叶斯公式能做很多事情,它的一个典型的应用是解决人工智能中的分类问题。基于贝叶斯公式的分类方法有广泛的应用,包括文本分类、基因筛选、拼写检查、推荐系统、图像识别、投资决策等。本节将介绍一种使用贝叶斯公式的最简单的分类算法,称为朴素贝叶斯分类算法。
朴素贝叶斯分类算法自20世纪50年代就已有广泛研究,并被应用于文本分类。这种算法具有收敛速度快、需要的训练数据少、分类准确性高等优点,所以直到现在,依然是在各种分类任务中使用的热门方法。
下面描述如何用这种方法解决多分类问题。令D表示需要处理的分类对象构成的集合,它包含m个类别,分别用C1,C2,…,Cm表示。进行分类前,需要确定分类对象的特征属性。设有n个特征属性,用A1,A2,…,An表示。对于任意的分类对象x∈D,它的特征属性值用一个n维向量(a1,a2,…,an)表示,这表示对于这个元素x,它的属性值分别是A1=a1,A2=a2,…,An=an。有了这些定义,需要实现的任务可以按如下方式描述。
对D中的每一个元素x,使用它特征属性的取值(a1,a2,…,an),从C1,C2,…,Cm中确定它所属的类别。
如何利用贝叶斯公式实现这样的目的呢?简单起见,设x的特征属性值是(a1,a2,…,an),用A表示随机事件(A1,A2,…,An)=(a1,a2,…,an),用Ck表示x属于第k个类别。通过贝叶斯公式计算如下条件概率
P(C1|A),P(C2|A),…,P(Cm|A)
若其中P(Ck|A)=max{P(C1|A),P(C2|A),…,P(Cm|A)},则说明在已知特征属性值的条件下,元素x属于第k个类别的概率是最大的。那么就判定它属于类别Ck,这当然是一种非常合理的选择,朴素贝叶斯分类就是遵循这样的思路来实现预定的分类任务。为了实现这个想法,具体的步骤和技巧如下。
首先准备包含类别标记的训练数据。这可以理解为,训练数据中的每一个元素x对应到一个向量(cx,a1,a2,…,an),其中cx表示它所属的类别,(a1,a2,…,an)表示特征属性的取值,元素x所属的类别通常是通过人工标注来判断的。贝叶斯分类是一种机器学习的方法,学习的含义可以理解为从已有的数据中学习“知识”,通过这种学习来获得对未知类别的数据进行分类的能力。
接下来利用标注数据的信息计算P(C1|A),P(C2|A),…,P(Cm|A)。根据贝叶斯公式可知
在具体操作环节,朴素贝叶斯有一些技巧用来减少计算量。因为朴素贝叶斯只关心这些条件概率的大小关系,而对相同的特征属性取值,上述公式右端的分母是相同的(都是P(A)),它的值并不影响这些条件概率按大小排列的顺序,所以为了减少计算量,只需要计算上述公式右端的分子并对其按大小关系排序即可。
上述表述中出现了分类器的概念。因为这种方法最终将用于数据的分类,所以训练完成后得到的模型又称为分类器。
根据相互独立的随机事件的定义,可以得到在独立性假设下有
P(A|Ck)=P(A1|Ck)P(A2|Ck)…P(An|Ck)
综上所述,朴素贝叶斯的流程如图4-3所示。
图4-3 朴素贝叶斯流程
接下来通过一个简单案例来熟悉上述工作流程中的概念和方法。
某个论坛希望通过程序自动识别账号的真实性,可以使用朴素贝叶斯分类算法来实现这一任务。
在这个问题中需要处理的就是论坛所有的注册账号,首先需要确定类别和特征属性。期望把账号分为C1={真实账号}和C2={虚假账号}两个类别,假设所用的特征属性为A1={发文频率}和A2={注册信息是否完备}。
