统计学习笔记:朴素贝叶斯(Naive Bayes)原理及C++源码实现

朴素贝叶斯(用于分类)

一、概念

朴素贝叶斯法是在假设输入向量x的特征条件独立(即在输入模式所属类别确定时,输入向量x的每个元素取值互不影响)下,通过样本集合学习输入x与输出y的联合概率分布。再用所得到的联合概率分布通过贝叶斯公式计算条件概率(后验概率)。将输入模式分类到后验概率最大的一个类别中。

二、方法

2.1 贝叶斯公式

假设需对n个类别进行分类,按照贝叶斯公式:

式中ck表示输出y的类别,k=1,2,…K依照上式计算条件概率,因为输入向量x是一个n维的向量:

 

 

由于朴素贝叶斯是假设输入向量x的各个特征取值条件独立,因此

其中表示输入向量x的第j个元素将上式代入贝叶斯公式可得:

不管计算属于哪个类别的概率,按照贝叶斯公式,分母大小都是一样,因而只需计算分子的大小就可以判断输入模式属于各个类别的后验概率,所以只需计算分子

可采用极大似然估计或贝叶斯估计法进行计算。

2.2 极大似然估计

1) 先验概率的似然估计法

其中N 是训练样本容量yi是第i个输入模式xi的输出,ck是类别,k = 1,2,…,K是指示函数,表示当i个输入模式xi的输出yick相等时取1。

上式意义在于,先验概率等于训练样本集中属于类别ck 的训练样本频数与训练样本容量N 的比值,即用类别ck 的频率代替概率。

2) 的似然估计法

假设输入向量x的第j个元素的可能取值集合是Sj表示可能取值的个数,则条件概率的似然估计为

其中 j=1,2,…,n; l=1,2,…,Sj; k=1,2,…,K;

上式意义在于,给定一个输入向量x,假设x属于类别ck,并根据该类别计算x每个元素取值的概率。这个概率等于x所属类别ck,第j个元素所有可能取值集合ajl的频数与样本训练集合中属于ck的样本频数之比。

3) 用极大似然估计算法进行分类步骤(例子可参考李航的统计学习方法)

①统计训练样本集合中各个类别的个数,并构建样本子集,该子集样本点为同一个类别的所有样本。

②计算先验概率

③统计样本点第j个元素可能取值个数。

④在每个类别子集中统计与输入点第j个元素相等样本点个数,j=1,2,…,n。

⑤计算条件概率

⑥对于给定实例x,计算后验概率

⑦确定实例所属类别

若有多个最大概率的类别有多个,则随机划分到某这些类别中。

2.3 贝叶斯估计法

用极大似然估计可能会出现所要估计的概率值为0的情况(所给定实例的元素取值样本中不存在),这会影响后验概率的计算结果,使分类产生偏差。解决这一方法是采用贝叶斯估计法。

(1)先验概率的贝叶斯估计

式中K为所要分类的训练样本的类别个数,,是一个引入的变量,等价于在统计的频数上赋予一个正数。当时就是极大似然估计法。通常取,这时称为拉普拉斯平滑。

(2)条件概率的贝叶斯估计

式中Sj是样本点每个元素可能取值集合的个数。

(3)用贝叶斯估计算法进行分类的步骤,同极大似然估计算法步骤相同,只是所用公式如上所示。

总结:

1. 朴素贝叶斯法是典型的生成学习方法,有训练数据生产联合概率,再由联合概率求 后验概率。

2. 朴素贝叶斯的基本假设是条件独立的,这是一个较强的假设,由于这一假设,模型 包含的条件概率的数量大为减少,朴素贝叶斯算法的学习与预测大为简化,因而朴素贝叶斯算法高效,且易于实现。但其分类的性能不一定很高。若不假设条件独立,而是假设输入变量之前存在概率依存关系,那么模型就是贝叶斯网络。

       3. 朴素贝叶斯利用贝叶斯定理与学到的模型将给定实例分类到后验概率最大的一个类别中。

完整源码在我的GitHub上可下载,用C++实现,备注很详细,运行通过,请先看README文件。

网址:https://github.com/FAmorris/NaiveBayes

转载 请说明出处,请支持原创,在不收取他人费用下,可以随便传播学习,我们一起进步!

1. 参考李航《统计学习方法》




你可能感兴趣的:(统计学习笔记:朴素贝叶斯(Naive Bayes)原理及C++源码实现)