简介
朴素贝叶斯算法 是经典的机器学习算法之一,也是为数不多的基于概率论 的分类算法,即通过考虑特征概率来预测分类。该算法采用了**“特征属性独立性假设”** 的方法,即对已知类别,假设所有特征属性相互独立。换言之,假设每个特征属性独立地对分类结果发生影响。
朴素贝叶斯法是基于贝叶斯定理与特征属性独立假设的分类方法,属于监督学习的生成模型。对于给定的训练数据集,首先基于特征属性独立假设学习输入/输出的联合概率分布,然后基于此模型,对给定的输入,利用贝叶斯定理估计后验概率最大输出。
朴素贝叶斯法由稳定的分类效率,在大量样本下会有比较好的表现,对小规模的数据仍然有效,能处理多分类任务。其次,朴素贝叶斯适合增量式训练,即可以实时对新增样本进行训练。同时,由于朴素贝叶斯法对缺失数据不敏感,通常用于文本分类识别、欺诈检测、垃圾邮件过滤、拼写检查等领域。
贝叶斯分类器的基本原理就是:通过某对象的先验概率,利用贝叶斯公式计算出后验概率,即该对象属于某一类的概率,选择具有最大后验概率的类作为该对象所属的类。
贝叶斯定理
先验概率: 根据以往经验和分析得到的概率
全概率公式: 设试验E的样本空间为S,A为E的事件,B1,B2,...,Bn为样本空间的一个划分,且P(Bi)≥0(i=1,2,...,n),则有:
贝叶斯定理: 设试验E的样本空间为S,A为E的事件,B1,B2,...,Bn为样本空间的一个划分,且P(A)>0, P(Bi)≥0(i=1,2,...,n),则有:
朴素贝叶斯算法流程
朴素贝叶斯算法具体步骤
(1)确定特征属性xj,获取训练样本集合yj;
该步骤的主要工作就是根据具体情况确定特征属性,并对每个特征进行适当划分,然后人工对一部分待分类项进行分类,形成训练样本集合。这一阶段的输入是所有待分类数据,输出是特征属性和训练样本。这一步是整个朴素贝叶斯分类中唯一需要人工完成的阶段。
对于所有待分类数据,确定其特征属性xj,获取训练样本集合yj:
其中m表示m个样本,n表示每个样本有n个特征。yi表示训练样本,取值为{C1,C2,...,Ck}
(2)计算各类别的先验概率P(Y=Ck)
针对训练样本集,可以利用最大似然估计计算出先验概率。但为了弥补最大似然估计中可能出现概率值为0的情况,也就是某个事件出现的次数为0,我们可以使用贝叶斯估计计算先验概率:
其中
(3)计算各类别下各特征属性xj的条件概率P(Xj=xj|Y=Ck)(j=1,2,...,n)
① 如果xj是离散值,可以假设xj符合多项式分布,这样得到的条件概率是在样本类别Ck中特征xj出现的频率, 即:
有些时候,可能某些类别在样本中没有出现,这可能导致条件概率为0,这样会有效后验概率的估计。为了避免出现这样的情况,在这里引入拉普拉斯平滑,即此时有:
② 如果xj是稀疏二项离散值,即各个特征出现概率很低,可以假设xj符合伯努利分布,即特征xj出现记为1,不出现记为0。这里不关注xj出现的次数,这样得到的条件概率是在样本类别Ck中xj出现的频率。此时有:
③ 如果xj是连续值,通常取xj的先验概率为正态分布,即在样本类别Ck中,xj的值符合正态分布。这样得到的条件概率分布是:
其中,μk和σ2是正态分布的期望和方差,可以通过最大似然估计求得,μk为在样本类别Ck中,所有Xj的均值。σ2为在样本类别中,所有Xj的方差,对于一个连续的样本值,代入正态分布的公式,就可以得到概率分布。
(4)计算各类别的后验概率P(Y=Ck|X=x)
由于假设各特征属性是条件独立的,则根据贝叶斯定理,各类别的后验概率有如下的推导:
(5)把后验概率最大项作为样本所属类别
预测的样本所属类别Cresult是使得后验概率P(Y=Ck|X=x)最大化的类别,推导如下:
由于对于所有类别计算后验概率时,分母是一样的,因此预测公式可以进一步简化为:
利用朴素贝叶斯的独立性假设,就可以得到通常意义上的朴素贝叶斯推断公式:
贝叶斯分类器的主要特点
算法的改进与优化
贝叶斯分类器是利用概率论的知识进行分类的算法,该算法利用贝叶斯定理来预测一个未知样本的可能属性,但贝叶斯分类中有一个很强的假设,即要求各样本的属性之间是相互独立的。该假设往往与实际情况不符,大大影响了分类器的效果,为此很多学者提出了些改进的办法。
为了解决这个问题,一些学者提出改进朴素贝叶斯,其改进的途径主要有两个方面:一是放弃条件独立性的假设,在NBC的基础上增加属性间可能存在的依赖关系;另一种是重新构建样本属性集,以新的属性替代原来的属性集,期望在新的属性间存在较好的条件独立关系。
其中最著名的一种改进方法就是TAN算法,TAN算法通过发现属性之间的依赖关系来降低朴素贝叶斯算法任意属性之间的独立性假设,它是在朴素贝叶斯的基础上增加属性之间的关联来实现的。
SKLearn实践(部分)
执行结果:
中文分词项目实践
预测函数:
打分函数:
预 测结果:
推荐阅读:
【机器学习算法】6、K-Means流程结束要不要多问几个为什么呢?
【机器学习算法】9、EM算法与K-Means算法的收敛性证明
公众号回复【朴素贝叶斯算法 】即可获取该文章的PDF文件和项目实践代码
参考:
《Python大战机器学习》——数据科学家的第一个小目标
《Python机器学习算法》
《Python机器学习》
https://github.com/TrustMe5/Naive-Bayes-TextClassifier
声明:转载请说明出处
下方为小生公众号,还望包容接纳和关注,非常期待与您的美好相遇,让我们以梦为马,砥砺前行。
希望技术与灵魂可以一路同行
长按识别二维码关注一下
更多精彩内容可回复关键词
每篇文章的主题即可
