贝叶斯公式能做很多事情,它的一个典型的应用是解决人工智能中的分类问题。基于贝叶斯公式的分类方法有广泛的应用,包括文本分类、基因筛选、拼写检查、推荐系统、图像识别、投资决策等。本节将介绍一种使用贝叶斯公式的最简单的分类算法,称为朴素贝叶斯分类算法。
朴素贝叶斯分类算法自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={注册信息是否完备}。
A1由发文篇数和注册天数的比值确定,是一个取连续值的变量。对于这种取值,需要先把它转换成离散值,然后计算它取相应的离散值的概率。假设把发文频率划分成(-∞,0.05,(0.05,0.2)和[0.2,+∞)三个区间,然后计算发文频率落在这三个区间的概率。可以把这种划分方式理解成,发文频率落在三个区间中分别对应到发文频率这一特征属性的取值为{-1,0,1}。之所以划分成这样的三个区间,可认为是依据经验,这样三个区间恰好对应到发文频率低、中、高三种情形。A2是一个布尔型取值的特征属性,取值为{0,1},分别对应到注册信息不完备和完备两种情形。
假设通过人工标注的方式获得了10 000条训练数据,并且依据训练数据计算得到如下概率。
P(C1)=0.9,P(C2)=0.1
P(A1=-1|C1)=0.1,P(A1=0|C1)=0.5,P(A1=1|C1)=0.3
P(A2=0|C1)=0.3,P(A2=1|C1)=0.7
P(A1=-1|C2)=0.7,P(A1=0|C2)=0.2,P(A1=1|C2)=0.1
P(A2=0|C2)=0.8,P(A2=1|C2)=0.2
根据对朴素贝叶斯分类算法的描述,有了这些概率就相当于拥有了一个可用的分类器,使用这个分类器可以对未知类别的账号进行分类。例如,现在有两个未知类别的账号,其一记为X1,发文频率为0.07,注册信息不完备;其二记为X2,发文频率为0.8,注册信息完备。利用上述分类器可以计算出,对于X1,可得
P(A|C1)P(C1)=P(A1=0|C1)P(A2=0|C1)P(C1)
=0.5×0.3×0.9=0.0135
P(A|C2)P(C2)=P(A1=0|C2)P(A2=0|C2)P(C2)
=0.2×0.8×0.1=0.016
P(A|C1)P(C1)P(A|C2)P(C2)
所以X2是一个真实账号。
在上述案例中,通过简单的划分把连续取值的特征属性A1转换成了离散取值的特征属性。在具体操作中,根据特征属性取值的不同情况,有三种对应的操作方法,分别称为多项式朴素贝叶斯、高斯朴素贝叶斯和伯努利朴素贝叶斯。下面针对这三种不同的方法做一些简单的说明,内在原理不再详细解释,现阶段只需要关注具体的操作方法就可以了。
多项式朴素贝叶斯:特征属性取值为离散值。此时通过训练数据计算P(Ck)和P(A|Ck)时,有可能出现由于训练数据中没有某些类别的数据,从而导致相应的概率为0的情况,这会极大地干扰分类工作的进行。为了克服这种干扰,通常会引入一个大于0的平滑参数λ。并通过
高斯朴素贝叶斯:当特征属性具有连续取值时,除了可以像前面的案例那样把连续取值离散化,还有另一种处理方式,即假设相应的特征属性服从正态分布(又称为高斯分布)。
伯努利朴素贝叶斯:这种模型同样对应到特征属性取值为离散值的情形。但与多项式模型不同的是,在伯努利模型中,该特征的取值只能是0和1。例如,上述案例中信息是否完备这个特征属性的取值即属于此种情况。在伯努利模型中,特征属性取值为0和1时对应的两个条件概率满足
P(A=1|Ck)+P(A=0|Ck)=1
在可以使用贝叶斯分类的第三方的库中,往往会同时有上述三种处理方式供用户选择,可以通过引用相应的函数或者设置相应的参数来方便地实现这三种不同的方法。