您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 朴素贝叶斯分类器的应用
朴素贝叶斯分类器的应用作者:阮一峰日期:2013年12月16日生活中很多场合需要用到分类,比如新闻分类、病人分类等等。本文介绍朴素贝叶斯分类器(NaiveBayesclassifier),它是一种简单有效的常用分类算法。一、病人分类的例子让我从一个例子开始讲起,你会看到贝叶斯分类器很好懂,一点都不难。某个医院早上收了六个门诊病人,如下表。症状职业疾病打喷嚏护士感冒打喷嚏农夫过敏头痛建筑工人脑震荡头痛建筑工人感冒打喷嚏教师感冒头痛教师脑震荡现在又来了第七个病人,是一个打喷嚏的建筑工人。请问他患上感冒的概率有多大?根据贝叶斯定理:P(A|B)=P(B|A)P(A)/P(B)可得P(感冒|打喷嚏x建筑工人)=P(打喷嚏x建筑工人|感冒)xP(感冒)/P(打喷嚏x建筑工人)假定打喷嚏和建筑工人这两个特征是独立的,因此,上面的等式就变成了P(感冒|打喷嚏x建筑工人)=P(打喷嚏|感冒)xP(建筑工人|感冒)xP(感冒)/P(打喷嚏)xP(建筑工人)这是可以计算的。P(感冒|打喷嚏x建筑工人)=0.66x0.33x0.5/0.5x0.33=0.66因此,这个打喷嚏的建筑工人,有66%的概率是得了感冒。同理,可以计算这个病人患上过敏或脑震荡的概率。比较这几个概率,就可以知道他最可能得什么病。这就是贝叶斯分类器的基本方法:在统计资料的基础上,依据某些特征,计算各个类别的概率,从而实现分类。二、朴素贝叶斯分类器的公式假设某个体有n项特征(Feature),分别为F1、F2、...、Fn。现有m个类别(Category),分别为C1、C2、...、Cm。贝叶斯分类器就是计算出概率最大的那个分类,也就是求下面这个算式的最大值:P(C|F1F2...Fn)=P(F1F2...Fn|C)P(C)/P(F1F2...Fn)由于P(F1F2...Fn)对于所有的类别都是相同的,可以省略,问题就变成了求P(F1F2...Fn|C)P(C)的最大值。朴素贝叶斯分类器则是更进一步,假设所有特征都彼此独立,因此P(F1F2...Fn|C)P(C)=P(F1|C)P(F2|C)...P(Fn|C)P(C)上式等号右边的每一项,都可以从统计资料中得到,由此就可以计算出每个类别对应的概率,从而找出最大概率的那个类。虽然所有特征彼此独立这个假设,在现实中不太可能成立,但是它可以大大简化计算,而且有研究表明对分类结果的准确性影响不大。下面再通过两个例子,来看如何使用朴素贝叶斯分类器。三、账号分类的例子本例摘自张洋的《算法杂货铺----分类算法之朴素贝叶斯分类》。根据某社区网站的抽样统计,该站10000个账号中有89%为真实账号(设为C0),11%为虚假账号(设为C1)。C0=0.89C1=0.11接下来,就要用统计资料判断一个账号的真实性。假定某一个账号有以下三个特征:F1:日志数量/注册天数F2:好友数量/注册天数F3:是否使用真实头像(真实头像为1,非真实头像为0)F1=0.1F2=0.2F3=0请问该账号是真实账号还是虚假账号?方法是使用朴素贝叶斯分类器,计算下面这个计算式的值。P(F1|C)P(F2|C)P(F3|C)P(C)虽然上面这些值可以从统计资料得到,但是这里有一个问题:F1和F2是连续变量,不适宜按照某个特定值计算概率。一个技巧是将连续值变为离散值,计算区间的概率。比如将F1分解成[0,0.05]、(0.05,0.2)、[0.2,+∞]三个区间,然后计算每个区间的概率。在我们这个例子中,F1等于0.1,落在第二个区间,所以计算的时候,就使用第二个区间的发生概率。根据统计资料,可得:P(F1|C0)=0.5,P(F1|C1)=0.1P(F2|C0)=0.7,P(F2|C1)=0.2P(F3|C0)=0.2,P(F3|C1)=0.9因此,P(F1|C0)P(F2|C0)P(F3|C0)P(C0)=0.5x0.7x0.2x0.89=0.0623P(F1|C1)P(F2|C1)P(F3|C1)P(C1)=0.1x0.2x0.9x0.11=0.00198可以看到,虽然这个用户没有使用真实头像,但是他是真实账号的概率,比虚假账号高出30多倍,因此判断这个账号为真。四、性别分类的例子本例摘自维基百科,关于处理连续变量的另一种方法。下面是一组人类身体特征的统计资料。性别身高(英尺)体重(磅)脚掌(英寸)男618012男5.9219011男5.5817012男5.9216510女51006女5.51508女5.421307女5.751509已知某人身高6英尺、体重130磅,脚掌8英寸,请问该人是男是女?根据朴素贝叶斯分类器,计算下面这个式子的值。P(身高|性别)xP(体重|性别)xP(脚掌|性别)xP(性别)这里的困难在于,由于身高、体重、脚掌都是连续变量,不能采用离散变量的方法计算概率。而且由于样本太少,所以也无法分成区间计算。怎么办?这时,可以假设男性和女性的身高、体重、脚掌都是正态分布,通过样本计算出均值和方差,也就是得到正态分布的密度函数。有了密度函数,就可以把值代入,算出某一点的密度函数的值。比如,男性的身高是均值5.855、方差0.035的正态分布。所以,男性的身高为6英尺的概率的相对值等于1.5789(大于1并没有关系,因为这里是密度函数的值,只用来反映各个值的相对可能性)。“所以,男性的身高为6英尺的概率等于1.5789(大于1并没有关系,因为这里是密度函数的值)”——我理解是不是因为最终只是比较相对大小,做一个判定,所以直接采用密度函数的值作为概率值?因为理论上连续变量取某一个具体值的概率都是无穷小。有了这些数据以后,就可以计算性别的分类了。P(身高=6|男)xP(体重=130|男)xP(脚掌=8|男)xP(男)=6.1984xe-9P(身高=6|女)xP(体重=130|女)xP(脚掌=8|女)xP(女)=5.3778xe-4可以看到,女性的概率比男性要高出将近10000倍,所以判断该人为女性。(完)朴素贝叶斯编辑本词条缺少名片图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧!最为广泛的两种分类模型是决策树模型(DecisionTreeModel)和朴素贝叶斯模型(NaiveBayesianModel,NBM)。中文名朴素贝叶斯外文名NaiveBayesianModel简称NBM属于广泛的分类模型之一目录1定义2详细内容3应用4模型1定义编辑学过概率的同学一定都知道贝叶斯定理:这个在250多年前发明的算法,在信息领域内有着无与伦比的地位。贝叶斯分类是一系列分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。朴素贝叶斯算法(NaiveBayesian)是其中应用最为广泛的分类算法之一。朴素贝叶斯分类器基于一个简单的假定:给定目标值时属性之间相互条件独立。通过以上定理和“朴素”的假定,我们知道:P(Category|Document)=P(Document|Category)*P(Category)/P(Document)[1]2详细内容编辑分类是将一个未知样本分到几个预先已知类的过程。数据分类问题的解决是一个两步过程:第一步,建立一个模型,描述预先的数据集或概念集。通过分析由属性描述的样本(或实例,对象等)来构造模型。假定每一个样本都有一个预先定义的类,由一个被称为类标签的属性确定。为建立模型而被分析的数据元组形成训练数据集,该步也称作有指导的学习。在众多的分类模型中,应用最为广泛的两种分类模型是决策树模型(DecisionTreeModel)和朴素贝叶斯模型(NaiveBayesianModel,NBC)。决策树模型通过构造树来解决分类问题。首先利用训练数据集来构造一棵决策树,一旦树建立起来,它就可为未知样本产生一个分类。在分类问题中使用决策树模型有很多的优点,决策树便于使用,而且高效;根据决策树可以很容易地构造出规则,而规则通常易于解释和理解;决策树可很好地扩展到大型数据库中,同时它的大小独立于数据库的大小;决策树模型的另外一大优点就是可以对有许多属性的数据集构造决策树。决策树模型也有一些缺点,比如处理缺失数据时的困难,过度拟合问题的出现,以及忽略数据集中属性之间的相关性等。3应用编辑和决策树模型相比,朴素贝叶斯分类器(NaiveBayesClassifier,或NBC)发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率。同时,NBC模型所需估计的参数很少,对缺失数据不太敏感,算法也比较简单。理论上,NBC模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为NBC模型假设属性之间相互独立,这个假设在实际应用中往往是不成立的,这给NBC模型的正确分类带来了一定影响。解决这个问题的方法一般是建立一个属性模型,对于不相互独立的属性,把他们单独处理。例如中文文本分类识别的时候,我们可以建立一个字典来处理一些词组。如果发现特定的问题中存在特殊的模式属性,那么就单独处理。这样做也符合贝叶斯概率原理,因为我们把一个词组看作一个单独的模式,例如英文文本处理一些长度不等的单词,也都作为单独独立的模式进行处理,这是自然语言与其他分类识别问题的不同点。实际计算先验概率时候,因为这些模式都是作为概率被程序计算,而不是自然语言被人来理解,所以结果是一样的。在属性个数比较多或者属性之间相关性较大时,NBC模型的分类效率比不上决策树模型。但这点有待验证,因为具体的问题不同,算法得出的结果不同,同一个算法对于同一个问题,只要模式发生变化,也存在不同的识别性能。这点在很多国外论文中已经得到公认,在机器学习一书中也提到过算法对于属性的识别情况决定于很多因素,例如训练样本和测试样本的比例影响算法的性能。决策树对于文本分类识别,要看具体情况。在属性相关性较小时,NBC模型的性能稍微良好。属性相关性较小的时候,其他的算法性能也很好,这是由于信息熵理论决定的。4模型编辑朴素贝叶斯模型:----Vmap=argmaxP(Vj|a1,a2...an)Vj属于V集合其中Vmap是给定一个example,得到的最可能的目标值.其中a1...an是这个example里面的属性.这里面,Vmap目标值,就是后面计算得出的概率最大的一个.所以用max来表示----贝叶斯公式应用到P(Vj|a1,a2...an)中.可得到Vmap=argmaxP(a1,a2...an|Vj)P(Vj)/P(a1,a2...an)又因为朴素贝叶斯分类器默认a1...an他们互相独立的.所以P(a1,a2...an)对于结果没有用处.[因为所有的概率都要除同一个东西之后再比较大小,最后结果也似乎影响不大]可得到Vmap=argmaxP(a1,a2...an|Vj)P(Vj)然后朴素贝叶斯分类器基于一个简单的假定:给定目标值时属性之间相互条件独立。换言之。该假定说明给定实例的目标值情况下。观察到联合的a1,a2...an的概率正好是对每个单独属性的概率乘积:P(a1,a2...an|Vj)=ΠiP(ai|Vj)....朴素贝叶斯分类器:Vnb=argmaxP(Vj)ΠiP(ai|Vj)Vnb=argmaxP(Vj)此处Vj(yes|no),对应天气的例子。算法杂货铺——分类算法之朴素贝叶斯分类(NaiveBayesianclassification)2010-09-1713:09byT2噬菌体,77407阅读,41评论,收藏,编辑0、写在前面的话我个人一直很喜欢算法一类的东西,在我看来算法是人类智慧的精华,其中蕴含着无与伦比的美感。而每次将学过的算法应用到实际中,并解决了实际问题后,那种快感更是我在其它地方体会不到的。一直想写关于算法的博文,也曾写过零散的两篇,但也许是相比于工程性文章来说太小众,并没有引起大家的兴趣。最近面临毕业找工作,为了能给自己增加筹码,决定再次复习算法方面的知识,我决定趁这个机会,写一系列关于算法的文章。这样做,主要是为了加强自己复习的效果,我想,如果能将复习的东西用自己的理解写成文章,势必比单纯的读书做题掌握的更牢固,也更能触发自己的思考。如
本文标题:朴素贝叶斯分类器的应用
链接地址:https://www.777doc.com/doc-2378414 .html