



为了说明如何利用朴素贝叶斯对数据进行分类,下面我们以西瓜数据集为例来讲解构造朴素贝叶斯分类器的过程,并在此数据集上进行算法实现。西瓜数据集如表3-1所示。
表3-1 西瓜数据集
表3-1所示的西瓜数据集中共17条数据,包含色泽、根蒂、敲声、纹路、脐部、触感等6个特征,最后一列好瓜/坏瓜表示该数据的标签。我们学习贝叶斯分类器的目的,就是要利用这些数据训练一个分类器,根据数据的特征去判断这个西瓜是好瓜还是坏瓜。
假设我们要判断第3条西瓜数据是否为好瓜,即:
判定是好瓜还是坏瓜,要根据先验概率和类条件概率去判定,根据表3-1的西瓜数据集,有好瓜和坏瓜的先验概率:
然后,为每个属性特征估计条件概率 P ( x i | c ),为了便于计算,我们只抽取西瓜数据集的色泽、敲声、纹路3个特征去判定西瓜的好坏。
假设各特征是相互独立的,则:
h (好瓜)= P (好瓜)× P (色泽=乌黑|好瓜)× P (敲声=浊响|好瓜)× P (纹路=清晰|好瓜)
=0.471×0.5×0.75×0.875=0.1545
h (坏瓜)= P (坏瓜)× P (色泽=乌黑|坏瓜)× P (敲声=浊响|坏瓜)× P (纹路=清晰|坏瓜)
=0.529×0.22×0.44×0.22=0.0113
显然有 h (好瓜)> h (坏瓜),因此判断为好瓜。
根据以上分析,利用朴素贝叶斯定理和对样本分类进行模拟,可以很容易实现贝叶斯分类器。
首先加载数据集,统计样本中好瓜和坏瓜的数量,计算这两类样本的先验概率:
为了计算各特征(色泽、敲声、纹路)在好瓜和坏瓜基础上的条件概率,需要分别统计这些特征在好瓜和坏瓜中出现的频率。
根据得到不同特征出现的频率,计算它们在好瓜和坏瓜情况下的条件概率。
由前面计算出各类样本的先验概率和类条件概率,在各类样本相互独立的情况下,根据朴素贝叶斯定理,可以得到 h (好瓜)和 h (坏瓜)。若 h (好瓜)> h (坏瓜),则判定该类样本的标签为“好瓜”,否则该类样本的标签为“坏瓜”。最后对预测结果与真实结果进行比较,得到分类准确率。
程序运行结果如下:
为了验证前面手工计算第3条样本的预测结果,这里输出了前3条记录的颜色、敲声、纹路3个概率值。
在计算属性特征的条件概率时,可能会出现某属性特征在训练集中没有出现过,按照3.2.1节的方法直接计算,会出现概率结果为0。这会导致在对样本分类时直接认为是 h (好瓜)或 h (坏瓜)。这显然是不合理的,不能因为一个事件没有观察到就武断地判断该事件的概率是0。平滑技术就是用来解决在实际数据处理过程中出现零概率的问题,“平滑”处理的基本思想是“劫富济贫”,即提高低概率(零概率),降低高概率,尽量使概率的分布趋于实际水平。
为了解决零概率的问题,法国数学家拉普拉斯最早提出用加1的方法估计没有出现过的现象的概率,因此这种平滑(Smoothing)方法也称为拉普拉斯平滑(Laplacian Smoothing)。
引入拉普拉斯平滑技术后,修正后的类先验概率和类条件概率可表示为:
其中,
T
c
表示类别
c
的训练集,
表示集合的个数,
M
表示训练集
T
中的类别个数,
T
c,
x
i
表示类别
c
中取值为
x
i
的样本个数,
M
i
表示具有第
i
个属性可能的取值数。
例如,该西瓜数据集中好瓜和坏瓜的类先验概率为:
修正后,色泽、敲声、纹路3个特征的类先验概率为:
当训练样本很大时,每个分量 x 的计数加1造成的估计概率变化可以忽略不计,却可以方便有效地避免零概率问题。
提示
朴素贝叶斯分类器的优点:(1)对小规模数据表现很好,能处理多分类任务;(2)算法比较简单,常用于文本分类;(3)有稳定的分类效率,对缺失数据不太敏感;(4)适合增量式训练,当数据量超出内存时,可一批一批读取数据进行增量训练。缺点是:(1)使用朴素贝叶斯算法有一个重要的前提条件:样本的特征属性之间是相互独立的,在满足这一条件的数据集上,其分类效果会非常好,而在不满足独立性条件的数据集上,效果欠佳。虽然在理论上,朴素贝叶斯模型与其他分类方法相比,有最小的误差率,但这一结果仅限于满足独立性条件的数据集上。而在实际应用中,属性特征之间不太可能完全独立,在属性特征个数非常多,且属性之间相关性较大时,朴素贝叶斯分类效果不佳;(2)需要知道先验概率,且先验概率很多时候取决于假设,会由于假设的先验模型的原因导致预测效果不佳。