在文本分类中,设每个数据样本用一个n维特征向量来描述n个属性的值,即:X={x1,x2,…,xn},假定有m个类,分别用C1, C2,…,Cm表示。给定一个未知的数据样本X(即没有类标号),若朴素贝叶斯分类法将未知的样本X分配给类Ci,则一定是
P(Ci|X)>P(Cj|X) 1≤j≤m,j≠i
根据贝叶斯定理
由于P(X)对于所有类为常数,最大化后验概率P(Ci|X)可转化为最大化先验概率P(X|Ci)P(Ci)。如果训练数据集有许多属性和元组,计算P(X|Ci)的开销可能非常大,为此,通常假设各属性的取值互相独立,这样
先验概率P(x1|Ci),P(x2|Ci),…,P(xn|Ci)可以从训练数据集求得。
根据此方法,对一个未知类别的样本X,可以先分别计算出X属于每一个类别Ci的概率P(X|Ci)P(Ci),然后选择其中概率最大的类别作为其类别。
朴素贝叶斯算法成立的前提是各属性之间互相独立。当数据集满足这种独立性假设时,分类的准确度较高,否则可能较低。另外,该算法没有分类规则输出。
优点和缺点
Strengths and Weaknesses
朴素贝叶斯分类器与其他方法相比最大的优势或许就在于,它在接受大数据量训练和查询时所具备的高速度。即使选用超大规模的训练集,针对每个项目通常也只会有相对较少的特征数,并且对项目的训练和分类也仅仅是针对特征概率的数学运算而已。
尤其当训练量逐渐递增时则更是如此--在不借助任何旧有训练数据的前提下,每一组新的训练数据都有可能会引起概率值的变化。(你会注意到,贝叶斯分类器的算法实现代码允许我们每次只使用一个训练项,而其他方法,比如决策树和支持向量机,则须要我们一次性将整个数据集都传给它们。)对于一个如垃圾邮件过滤这样的应用程序而言,支持增量式训练的能力是非常重要的,因为过滤程序时常要对新到的邮件进行训练,然后必须即刻进行相应的调整;更何况,过滤程序也未必有权访问已经收到的所有邮件信息。
朴素贝叶斯分类器的另一大优势是,对分类器实际学习状况的解释还是相对简单的。由于每个特征的概率值都被保存了起来,因此我们可以在任何时候查看数据库,找到最适合的特征来区分垃圾邮件与非垃圾邮件,或是编程语言与蛇。保存在数据库中的这些信息都很有价值,它们有可能会被用于其他的应用程序,或者作为构筑这些应用程序的一个良好基础。
朴素贝叶斯分类器的最大缺陷就是,它无法处理基于特征组合所产生的变化结果。假设有如下这样一个场景,我们正在尝试从非垃圾邮件中鉴别出垃圾邮件来:假如我们构建的是一个Web应用程序,因而单词"online"时常会出现在你的工作邮件中。而你的好友则在一家药店工作,并且喜欢给你发一些他碰巧在工作中遇到的奇闻趣事。同时,和大多数不善于严密保护自己邮件地址的人一样,偶尔你也会收到一封包含单词"online pharmacy"的垃圾邮件。
也许你已经看出了此处的难点--我们往往会告诉分类器"online"和"pharmacy"是出现在非垃圾邮件中的,因此这些单词相对于非垃圾邮件的概率会更高一些。当我们告诉分类器有一封包含单词"online pharmacy"的邮件属于垃圾邮件时,则这些单词的概率又会进行相应的调整,这就导致了一个经常性的矛盾。由于特征的概率都是单独给出的,因此分类器对于各种组合的情况一无所知。在文档分类中,这通常不是什么大问题,因为一封包含单词"online pharmacy"的邮件中可能还会有其他特征可以说明它是垃圾邮件,但是在面对其他问题时,理解特征的组合可能是至关重要的。
分享到:
相关推荐
实现朴素贝叶斯分类器算法基本功能,代码有注释,还包括一个垃圾邮件过滤的实例。另外我这次用的是python2.7版,如果用python3的可能需要根据提示修改几个语法(sorted函数的参数)。
朴素贝叶斯分类器的代码,还有一些hadoop运行时出现的问题
朴素贝叶斯分类器 MATLAB 源代码,里面含有使用实例,用的是 UCI 的 mushroom 数据集。 分类器详细介绍见: http://blog.csdn.net/yunduanmuxue/article/details/39693917
这个是我自己写的朴素贝叶斯分类器,离散化用的是信息增益率算的!里面有Readme.txt说的还算详细,程序里也有注释!程序写的比较简单,希望高手能指点!这个是个VS工程。 忘说了,如果自己做测试数据集的话,最后...
基于权重的朴素贝叶斯分类器设计与实现基于权重的朴素贝叶斯分类器设计与实现基于权重的朴素贝叶斯分类器设计与实现基于权重的朴素贝叶斯分类器设计与实现基于权重的朴素贝叶斯分类器设计与实现基于权重的朴素贝叶斯...
基于朴素贝叶斯分类器的简单手写体数字识别 .
基于Matlab的朴素贝叶斯分类器,该文件为压缩文件,解压后可用。包含了实验数据。是离散类型的朴素贝叶斯分类器
朴素贝叶斯分类器的构建,陈文成,邢冬丽,本文基于信息几何和Fisher分,提出了一种创建属性集的方法。把原有属性经过Fisher分映射成新的属性集,并在新属性集上构建贝叶斯分类
本人根据模式识别教材写的朴素贝叶斯分类器,用于人脸识别,人脸参数化方式为,把人脸分为9个区域,计算9个区域的黑白对比度,希望能抛砖引玉,人脸库请自己下载
Spring-Boot集成Neo4j并利用Spark的朴素贝叶斯分类器实现基于电影知识图谱的智能问答系统
本系统是C++写的基于机器学习的朴素贝叶斯分类器,系统比较简单,可扩展性强。
C++编写的朴素贝叶斯分类器跟k-means聚类,用于学习机器学习,最好是在Linux上运行,可以运行
基于朴素贝叶斯分类器的文本分类算法(C语言).doc
基于SpringBoot+Neo4j+Spark实现的论文智能分析问答系统(采用朴素贝叶斯分类器) 基于SpringBoot+Neo4j+Spark实现的论文智能分析问答系统(采用朴素贝叶斯分类器) 基于SpringBoot+Neo4j+Spark实现的论文智能分析...
用python写的简单的朴素贝叶斯分类器,一共有两个主文件,nbayes1和nbayes1_run1还有两个训练数据文件,望大家多多指教。
一个实现朴素贝叶斯分类器简单的Python 库
朴素贝叶斯分类器.本例用于识别手写的数字A~J!!!!