转载请保留作者信息:
作者:phinecos(洞庭散人)
Blog:http://phinecos.cnblogs.com/
Email:phinecos@163.com
Preface
本文缘起于最近在读的一本书-- Tom M.Mitchell的《机器学习》,书中第6章详细讲解了贝叶斯学习的理论知识,为了将其应用到实际中来,参考了网上许多资料,从而得此文。文章将分为两个部分,第一部分将介绍贝叶斯学习的相关理论(如果你对理论不感兴趣,请直接跳至第二部分<<基于朴素贝叶斯分类器的文本分类算法(下)>>)。第二部分讲如何将贝叶斯分类器应用到中文文本分类,随文附上示例代码。
Introduction
我们在《概率论和数理统计》这门课的第一章都学过贝叶斯公式和全概率公式,先来简单复习下:
条件概率
定义 设A, B是两个事件,且P(A)>0 称P(B∣A)=P(AB)/P(A)为在条件A下发生的条件事件B发生的条件概率。
乘法公式 设P(A)>0 则有P(AB)=P(B∣A)P(A)
全概率公式和贝叶斯公式
定义 设S为试验E的样本空间,B1, B2, …Bn为E的一组事件,若BiBj=Ф, i≠j, i, j=1, 2, …,n; B1∪B2∪…∪Bn=S则称B1, B2, …, Bn为样本空间的一个划分。
定理 设试验E的样本空间为,A为E的事件,B1, B2, …,Bn为的一个划分,且P(Bi)>0 (i=1, 2, …n),则P(A)=P(A∣B1)P(B1)+P(A∣B2)+ …+P(A∣Bn)P(Bn)称为全概率公式。
定理 设试验俄E的样本空间为S,A为E的事件,B1, B2, …,Bn为的一个划分,则
P(Bi∣A)=P(A∣Bi)P(Bi)/∑P(B|Aj)P(Aj)=P(B|Ai)P(Ai)/P(B)
称为贝叶斯公式。说明:i,j均为下标,求和均是1到n
下面我再举个简单的例子来说明下。
示例1
考虑一个医疗诊断问题,有两种可能的假设:(1)病人有癌症。(2)病人无癌症。样本数据来自某化验测试,它也有两种可能的结果:阳性和阴性。假设我们已经有先验知识:在所有人口中只有0.008的人患病。此外,化验测试对有病的患者有98%的可能返回阳性结果,对无病患者有97%的可能返回阴性结果。
上面的数据可以用以下概率式子表示:
P(cancer)=0.008,P(无cancer)=0.992
P(阳性|cancer)=0.98,P(阴性|cancer)=0.02
P(阳性|无cancer)=0.03,P(阴性|无cancer)=0.97
假设现在有一个新病人,化验测试返回阳性,是否将病人断定为有癌症呢?我们可以来计算极大后验假设:
P(阳性|cancer)p(cancer)=0.98*0.008 = 0.0078
P(阳性|无cancer)*p(无cancer)=0.03*0.992 = 0.0298
因此,应该判断为无癌症。
贝叶斯学习理论
贝叶斯是一种基于概率的学习算法,能够用来计算显式的假设概率,它基于假设的先验概率,给定假设下观察到不同数据的概率以及观察到的数据本身(后面我们可以看到,其实就这么三点东西,呵呵)。
我们用P(h)表示没有训练样本数据前假设h拥有的初始概率,也就称为h的先验概率,它反映了我们所拥有的关于h是一个正确假设的机会的背景知识。当然如果没有这个先验知识的话,在实际处理中,我们可以简单地将每一种假设都赋给一个相同的概率。类似,P(D)代表将要观察的训练样本数据D的先验概率(也就是说,在没有确定某一个假设成立时D的概率)。然后是P(D/h),它表示假设h成立时观察到数据D的概率。在机器学习中,我们感兴趣的是P(h/D),也就是给定了一个训练样本数据D,判断假设h成立的概率,这也称之为后验概率,它反映了在看到训练样本数据D后假设h成立的置信度。(注:后验概率p(h/D)反映了训练数据D的影响,而先验概率p(h)是独立于D的)。
P(h|D) = P(D|h)P(h)/p(D),从贝叶斯公式可以看出,后验概率p(h/D)取决于P(D|h)P(h)这个乘积,呵呵,这就是贝叶斯分类算法的核心思想。我们要做的就是要考虑候选假设集合H,并在其中寻找当给定训练数据D时可能性最大的假设h(h属于H)。
简单点说,就是给定了一个训练样本数据(样本数据已经人工分类好了),我们应该如何从这个样本数据集去学习,从而当我们碰到新的数据时,可以将新数据分类到某一个类别中去。那可以看到,上面的贝叶斯理论和这个任务是吻合的。
朴素贝叶斯分类
也许你觉得这理论还不是很懂,那我再举个简单的例子,让大家对这个算法的原理有个快速的认识。(注:这个示例摘抄自《机器学习》这本书的第三章的表3-2.)
假设给定了如下训练样本数据,我们学习的目标是根据给定的天气状况判断你对PlayTennis这个请求的回答是Yes还是No。
Day
|
Outlook
|
Temperature
|
Humidity
|
Wind
|
PlayTennis
|
D1
|
Sunny
|
Hot
|
High
|
Weak
|
No
|
D2
|
Sunny
|
Hot
|
High
|
Strong
|
No
|
D3
|
Overcast
|
Hot
|
High
|
Weak
|
Yes
|
D4
|
Rain
|
Mild
|
High
|
Weak
|
Yes
|
D5
|
Rain
|
Cool
|
Normal
|
Weak
|
Yes
|
D6
|
Rain
|
Cool
|
Normal
|
Strong
|
No
|
D7
|
Overcast
|
Cool
|
Normal
|
Strong
|
Yes
|
D8
|
Sunny
|
Mild
|
High
|
Weak
|
No
|
D9
|
Sunny
|
Cool
|
Normal
|
Weak
|
Yes
|
D10
|
Rain
|
Mild
|
Normal
|
Weak
|
Yes
|
D11
|
Sunny
|
Mild
|
Normal
|
Strong
|
Yes
|
D12
|
Overcast
|
Mild
|
High
|
Strong
|
Yes
|
D13
|
Overcast
|
Hot
|
Normal
|
Weak
|
Yes
|
D14
|
Rain
|
Mild
|
High
|
Strong
|
No
|
可以看到这里样本数据集提供了14个训练样本,我们将使用此表的数据,并结合朴素贝叶斯分类器来分类下面的新实例:
(Outlook = sunny,Temprature = cool,Humidity = high,Wind = strong)
我们的任务就是对此新实例预测目标概念PlayTennis的目标值(yes或no).
由上面的公式可以得到:
可以得到:
P(PlayTennis =yes) = 9/14 = 0.64,P(PlayTennis=no)=5/14 = 0.36
P(Wind=Stong| PlayTennis =yes)=3/9=0.33,p(Wind=Stong| PlayTennis =no)=3/5 = 0.6
其他数据类似可得,代入后得到:
P(yes)P(Sunny|yes)P(Cool|yes)P(high|yes)P(Strong|yes) = 0.0053
P(no)P(Sunny|no)P(Cool|no)P(high|no)P(Strong|no)=0.0206
因此应该分类到no这一类中。
贝叶斯文本分类算法
好了,现在开始进入本文的主旨部分:如何将贝叶斯分类器应用到中文文本的分类上来?
根据联合概率公式(全概率公式)
M——训练文本集合中经过踢出无用词去除文本预处理之后关键字的数量。
分享到:
相关推荐
基于朴素贝叶斯分类器的文本分类算法(C语言).doc
朴素贝叶斯模型是文本分类模型中的一种简单但性能优越的的分类模型。为了简化计算过程,假定各待分类文本特征变量是相互独立的,即“朴素贝叶斯模型的假设”。相互独立表明了所有特征变量之间的表述是没有关联的。
基于朴素贝叶斯分类器的文本分类程序 python
人工智能_项目实践_朴素贝叶斯分类器_朴素贝叶斯文本分类器 **数据:**搜狗文本分类语料库 **分类器:**朴素贝叶斯分类器 NBC(Naive Bayesian Classifier) **编程语言:**Python+jieba分词库+nltk+sklearn
朴素贝叶斯分类器的文本分类算法
基于朴素贝叶斯分类器的文本分类算法(C语言)
基于权重的朴素贝叶斯分类器设计与实现 论文
基于朴素贝叶斯分类器的文本分类算法(C语言).rar
在特征独立性假设的基础上, 讨论了朴素贝叶斯分类器的原理, 以及训练朴素贝叶斯分类器和应用朴素贝叶斯分类器进行分类的问题。
朴素贝叶斯算法文本分类JAVA实现
贝叶斯是一种基于概率的学习算法,能够用来计算显式的假设概率,它基于假设的先验概率,给定假设下观察到不同数据的概率以及观察到的数据本身
该算法用Python实现了朴素贝叶斯分类器,并用于文本分类,实现垃圾邮件的检测。
实验要求 文本类别数:>=10类。 训练集文档数:>=500000篇;每类平均50000篇。...自行实现朴素贝叶斯,训练文本分类器。 对测试集的文本进行分类 对测试集的分类结果利用正确率和召回率进行分析评价。
朴素贝叶斯 分类算法数据集文本挖掘(Text Mining,从文字中获取信息)是一个比较宽泛的概念,这一技术在如今每天都有海量文本数据生成的时代越来越受到关注。目前,在机器学习模型的帮助下,包括情绪分析,文件分类...
代码:Java语言 算法:朴素贝叶斯分类器(中文)适用于情感分析 涉及:条件概率,先验概率计算,中文分词器,停用词处理
使用朴素贝叶斯方法实现的中文文本分类算法
人工智能大作业,文本分类,TF-IDF+手写朴素贝叶斯。本项目利用分类算法实现对文本的数据挖掘,主要包括:1. 语料库的构建,主要从搜狗语料库、复旦大学中文语料库等搜集文章作为...朴素贝叶斯分类器要手动编写完成。
1:用MapReduce算法实现贝叶斯分类器的训练过程,并输出训练模型; 2:用输出的模型对测试集文档进行分类测试。测试过程可基于单机Java程序,也可以是MapReduce程序。输出每个测试文档的分类结果; 3:利用测试...
# 基于Hadoop的朴素贝叶斯分类(MapReduce实现) 该项目为Hadoop课程项目,基于MapReduce设计朴素贝叶斯文本分类器,并评估分类结果。 以下简单介绍项目内容与运行说明: ## 项目内容 1. 用MapReduce算法实现贝叶斯...
基于知识图谱的电影知识问答系统:训练TF-IDF 向量算法和朴素贝叶斯分类器、在 Neo4j 中查询 - 训练 TF-IDF 向量算法和朴素贝叶斯分类器,预测用户文本所属的问题类别 - 使用分词库解析用户文本词性,提取关键词 - ...