朴素贝叶斯和半朴素贝叶斯(华南地区)分类器Python实现

  

一、概述

  

机器学习最后一次实验,要求实现朴素贝叶斯和华南地区的半朴素贝叶斯分类器。由于老师说可以调用现成的相关机器学习的库,所以我一开始在做朴素贝叶斯分类器的时候,直接调用了sklearn库,很方便,可是问题来了,在做奥德半朴素贝叶斯分类器的时候,并没有找到集成好的方法,所以就想着自己把半朴素贝叶斯分类器实现了,朴素贝叶斯分类就直接调用库算了。可是让人头大的是,上来就直接实现华南地区分类器还是不太科学,还得从基本的贝叶斯原理到朴素贝叶斯开始,所以我又从头看,主要看的这篇博客   西瓜书读书笔记——第七章:贝叶斯分类器,写的非常好,看完之后就基本弄懂了。我感觉实现起来,朴素贝叶斯和半朴素贝叶斯有很多相似之处,索性就先把朴素贝叶斯实现了,正好也能加深一下理解,然后再实现奥德半朴素贝叶斯分类器就会容易些了。

  

二、贝叶斯分类器

  

2.1朴素贝叶斯分类器

  

(1)贝叶斯分类基本思想简单解释

  

首先,贝叶斯分类的思想很简单,假设数据一共有某某种类别,即标签={L1、L2 ? ?, Ln}标签=\ {L1、L2 \ cdots L_n \}标签={L1、L2、?、Ln},给定一个样本数据x={x1, x2, ? ?, xm} x=\ {x_1、x_2 \ cdots x_m \} x={x1, x2, ?, xm},注意,这里的xxx是一个样本数据,x1, x2, ? ?, xmx_1, x_2, \ cdots x_mx1, x2, ?, xm表示这个数据有嗯维特征,当知道了样本数据xxx,根据xxx计算出来这个数据属于每一种类别的概率p={PL1 PL2, ? ?, PLn} p=\ {P_ {L1}, P_ {L2}, \ cdots P_ {L_n} \} p={PL1, PL2 ?, PLn},最后将这个数据xxx划分为最大概率对应的类别。比如,如果argmax {PL1 PL2, ? ?, PLn}=L2argmax \ {P_ {L1}, P_ {L2}, \ cdots P_ {L_n} \}=L_2argmax {PL1, PL2 ?, PLn}=L2,那么xxx就被划分为L2L_2L2。

  

(2)贝叶斯分类基本原理

  

其次,贝叶斯分类的实现也很简单。现在已经知道了基本原理,设xxx所属的类别为ccc, xix_ixi代表样本xxx的第三世个属性值(第三世个维度的值),那么上面所说的要求样本xxx属于每种类别的概率就记为p (c∣x) p (c | x) p (c∣x),根据贝叶斯模型和极大似然估计原理,那么就有:

  c∣

p (x)=p (x∣c) (c) p (x)=p (c) p (x)∏i=1议员(ξ∣c)

  c |

p (x)=\压裂{p (x | c) (c)} {p (x)}=\压裂{p (c)} {p (x)} \ prod_ {i=1} ^议员(x_i | c)

  c∣

p (x)=p (x) p (x∣c) p (c)=p (x) (c) i=1∏议员(ξ∣c)

  

其中p (x)=莍=1议员(xi) p (x)=\ prod_ {i=1} ^议员(x_i) p (x)=莍=1议员(xi),对于数据xxx来说,计算对应的每一种类别的概率时,p (x) p (x) p (x)是相同的,所以为了计算方便,可以省略掉,记为:

  

p (c∣x)∝p (c)∏i=1议员(ξ∣c)

  c |

p (x) \ propto p (c) \ prod_ {i=1} ^议员(x_i | c)

  

p (c∣x)∝p (c) i=1∏议员(ξ∣c)(注:在实现时,为了防止概率连乘导致趋近于0,将∏i=1议员(ξ∣c) \ prod_ {i=1} ^议员(x_i | c)∏i=1议员(ξ∣c)取对数变成连加)所以最终计算xxx所对应的类别就有:

  

L (x)=argmaxP (c)∏i=1议员(ξ∣c)

  

L (x)=argmax p (c) \ prod_ {i=1} ^议员(x_i | c)

  

L (x)=argmaxP (c) i=1∏议员(ξ∣c)这里c是所要求的值。根据这个公式就知道,要求xxx所属的类别,只要求出p (c) p (c) p (c)和p(ξ∣c) p (x_i | c) p(ξ∣c)就行了。

  

设整个样本数据集为DDD,当∣D∣D | |∣D∣足够大时(即样本数量足够多),就可以利用频率估计概率(大数定律)来计算出先验概率p (c) (c) p (c),

  

p (c)=∣直流∣∣D∣

  

p (c)=\压裂{| D_c |} {D | |}

  

p (c)=∣D∣∣直流∣∣D∣D | |∣D∣代表所有数据的数量,∣直流∣| D_c |∣直流∣表示类别为ccc的样本的数量。现在p (c) p (c) p (c)很容易的求出来了,然后就是p(ξ∣c) p (x_i | c) p(ξ∣c)了。

  

然而,对于样本属性xix_ixi来说,其可分为连续性样本属性和离散型样本属性。先理解一下什么是“离散型样本属性”,那么”连续型”就比较容易理解了。

  

"离散型样本属性”:比如,对于西瓜AAA来说,AAA就是整个西瓜家族里面的一个样本,那么AAA的属性就会有{外皮颜色,敲击声音,触摸手感,? ?}\{外皮颜色,敲击声音,触摸手感,\ cdots \}{外皮颜色,敲击声音,触摸手感,?},而对于“外皮颜色”这个属性来说,它的取值可能有{黄色,绿色,青绿色,? ?}\{黄色,绿色,青绿色,\ cdots \}{黄色,绿色,青绿色,?},这个属性的取值是离散的,有限的,那么这个属性就是“离散型”属性了,另外两个属性也是一样。对于离散型样本属性的条件概率计算公式也是根据频率估计概率得到:

朴素贝叶斯和半朴素贝叶斯(华南地区)分类器Python实现