1. 数据挖掘-朴素贝叶斯算法
朴素贝叶斯算法,主要用于对相互独立的属性的类变量的分类预测。(各个属性/特征之间完全没有关系,叫做相互独立,事实上这很难存在,但是这个方法依然比较有效。)
大学的概率论里一般都学过这个贝叶斯定理,简单阐述如下:
若事件 , ,…构成一个事件且都有正概率,则对任意一个事件Y,有如下公式成立:则有
如果X表示特征/属性,Y表示类变量,如果类变量和属性之间的关系不确定,那么X和Y可以视作随机变量,则 为Y的后验概率, 为Y的先验概率。 以图为例:
我们需要根据身高、体重、鞋码判断是男是女,则Y就是性别,X就是(身高、体重、鞋码)这一组特征。如果我们要先算是男的概率,则先验概率就是 ,而后验概率则是我们未来将要输入的一组特征已知的情况下,Y=男的概率(要预测的分类的概率),这样的话,根据贝叶斯定理,我们就可以用 来求出 ,这就是贝叶斯定理在预测中的应用。
假设Y变量取y值时概率为P(Y=y),X中的各个特征相互独立,则有公式如下: 其中每个特征集X包含d个特征。 根据公式,对比上面的图来说,如果性别是男的时候,身高是高,体重是重,鞋码为大的概率就等于
有了这个公式,结合之前的贝叶斯公式,就能得到给定一组特征值的情况下, 这组特征属于什么样的类别的概率公式: 其中的X代表一组特征, 代表一组中的一个。 对于所有的Y来说,P(X)时固定的,因此只要找出使分子 最大的类别就可以判断预测的类别了。
的概率分为两种情况来区别,一种是对分类特征的概率确定,一种是连续特征的概率确定。
接下来借用《数据挖掘导论》上的例子来说明概率确定的方式。
对于分类的特征,可以首先找到训练集中为y值的个数,然后根据不同的特征类型占这些个数中的比例作为分类特征的概率。 例如上表中求不拖欠贷款的情况下,有房的人数就是 ,不拖欠贷款的有7个,其中有房的是3个。以此类推可以求出婚姻状况的条件概率。 年收入是连续特征,需要区分对待。
根据上述算法,如果要求没有拖欠贷款情况下,年收入是120K的概率,就是
如果要预测测试记录 X =(有房=否,婚姻状况=已婚,年收入=120K)这个样本是否可能拖欠贷款,则需要计算两个概率: 和 则有: 由于 是不变的(对于Y=是和Y=否),则只考虑上面的分子即可,那么抛开P(X)不看,则有: 其中7/10就是P(Y=否),α是P(X) 同理可得P(Y=是|X) = 1 * 0 * 1.2e-1 = 0. 这样一比较,那么分类就是否。
看这个例子中,如果有一个特征的条件概率是0,那么整体的概率就是0,从而后验概率也一定是0,那么如果训练集样本太少,这种方法就不是很准确了。 如果当训练集样本个数比特征还少的时候,就无法分类某些测试集了,因此引入 m估计(m-estimate) 来估计条件概率,公式如下: 其中,n是类 中的样本总数, 是类 中取 的样本数, 是称为等价样本大小的参数, 是用户指定的参数,p可以看作在类 中观察特征值 的先验概率。等价样本大小决定先验概率 和观测概率 之间的平衡。
引入m估计的根本原因是样本数量过小。所以为了避免此问题,最好的方法是等效的扩大样本的数量,即在为观察样本添加m个等效的样本,所以要在该类别中增加的等效的类别的数量就是等效样本数m乘以先验估计p。
在之前的例子中,设m=3,p=1/3(m可以设置为特征数量,p则是倒数)。则: 从而可以重新计算 。从而解决了某个条件概率为0的问题。
面对相互独立的特征比较适用,如果有相关的特征,则会降低其性能。
2. 朴素贝叶斯算法
贝叶斯算法是由英国数学家托马斯·贝叶斯提出的,这个算法的提出是为了解决“逆向概率”的问题。首先我们先来解释下正向概率与逆向概率的含义:
正向概率 :假设一个箱子里有5个黄色球和5个白色球,随机从箱子里拿出一个球,请问取出的是黄球的概率是多少?很容易计算P(黄球)= N(黄球)/N(黄球)+ N(白球) = 5/5+5 = 1/2。 逆向概率 :起初我们并不知道箱子里有多少个球,我们依次从箱子里取出10个球,发现这个10个球中有7个白球,3个黄球,那么我们会根据我们观察到的结果去推测箱子里白球与黄球的分布比例大概是7:3,但是我们无法推测出箱子里的球的个数。
贝叶斯算法是一种基于概率统计的机器学习算法,它会计算出每种情况发生的概率,然后对其进行分类,贝叶斯算法经常用于文本分类问题和垃圾邮件过滤问题。假设有一篇新闻报道news report,我们使用贝叶斯算法来判断它们的类别,结果如下: p(politics|news) = 0.2 p(entertainment|news) = 0.4 p(sports|news) = 0.7 因为p(sports|news)的概率最大,所以我们判断这篇新闻报道为体育类报道。“|”左边为要判断的类别,右边是我们给定的文章。
贝叶斯公式推导 接下来,我们将通过一个例子来推导贝叶斯公式。在一所学校里,男生和女生的比例分别是60%和40%,男生全部穿长裤,女生一半穿长裤,一半穿裙子。现迎面走来一个同学,你只能看清他(她)穿的是长裤,而无法分辨出他(她)的性别,请问他(她)是女生的概率?
下面我们逐步计算这个问题: 假设学校里的学生总数为N。 男生人数:N * P(boys),女生人数:N * P(girls)。 穿长裤的男生人数:N * P(boys) * P(pants|boys),其中P(pants|boys)是条件概率的表达形式,意思是男生中穿长裤的概率。因为男生都穿长裤,所以N * P(boys) * P(pants|boys) = 60% * N。 穿长裤的女生的人数:N * P(girs) * P(pants|girls) = 0.2 * N。 穿长裤的总人数:N * P(boys) * P(pants|boys) + N * P(girs) * P(pants|girls) 穿长裤的同学是女生的概率:P(girl|pants) = N * P(girs) * P(pants|girls) / N * P(boys) * P(pants|boys) + N * P(girs) * P(pants|girls) = P(girs)*P(pants|girls) / P(pants),分母用P(pants)表示穿长裤的概率。 最终结果:P(girl | pants) = P(pants | girl) * P(girl) / P(pants) 其中:P(girl)我们称为先验概率,是已知值,在这个例子中P(girl) = 40%。先验概率:根据以往的经验和分析得到的结果,先验概率和其他条件的影响不受样本影响。 P(girl | pants)我们称为后验概率,根据观察到的结果,去反推是女生的概率。 贝叶斯数学表达式
贝叶斯算法在垃圾邮件过滤中的应用 给定一封邮件,判定它是否属于垃圾邮件?用D 来表示这封邮件,注意D 由N 个单词组成。我们用h+ 来表示垃圾邮件,h-表示正常邮件。 有贝叶斯公式可得: P(h+ | D) = P(D | h+) * P(h+) / P(D) P(h- | D) = P(D | h-) * P(h-) / P(D) 其中P(h+),P(h-)为先验概率,假如我们有1000封邮件,其中有50封是垃圾邮件,其他都是正常邮件,那么P(h+),P(h-)的概率就是已知的。两个式子的分母都是P(D),所以P(D)对于最终结果的比较是没有影响的。接下来就是要求P(D | h+),P(D | h-)垃圾邮件中或正常邮件中是邮件D的概率。 我们都知道一封邮件是由许多词构成的,所以我们将P(D | h+)的表达式转化为P(d1,d2,d3......dn | h+),就是看垃圾邮件中出现d1,d2...dn这些词的概率是多少。 P(d1,d2,d3......dn | h+) = P(d1 | h+) * P(d2 |d1,h+) * P(d3 |d1,d2,h+) ... 这个式子计算起来非常困难,所以在这里我们做一个假设,假设每个词都是独立的并且互不影响,那么这个式子就可以表示为: P(d1,d2,d3......dn | h+) = P(d1 | h+) * P(d2 | h+) * P(d3 | h+) ...P(dn | h+) P(h+ | D) = {P(d1 | h+) * P(d2 | h+) * P(d3 | h+) ...P(dn | h+)}* P(h+) / P(D) 上述这个式子我们就称为朴素贝叶斯公式,朴素贝叶斯公式是对贝叶斯公式的简化,它建立在每个条子互相独立的基础上。 在现实生活中,我们写的每一句话中词与词之间肯定是有相互联系,如果没有联系,那么这句话是读不通的。那么为什么朴素贝叶斯能够在计算中使用,首先是计算简单,其次对最终结果的影响非常小。 参考资料 1.唐宇迪,《机器学习与数据分析实战》课程。 2.Peter,《机器学习实战》。
3. 朴素贝叶斯算法总结
目录
一、贝叶斯定理
二、朴素贝叶斯分类工作原理及流程
三、总结
一、 贝叶斯定理 :是为了解决“逆向概率”问题而写的一篇文章,尝试回答在没有太多可靠证据的情况下,怎样做出更符合数学逻辑的推测。这种推测基于主观的判断的基础上,在事先不知道客观事实的情况下,同样可以先估计一个值,然后根据实际结果不断进行修正。
这个定理解决了现实生活中已知条件概率,如何得到两个事件交换后的概率 。例如:已知P(A|B)的情况下,如何求出P(B|A)的概率问题。贝叶斯定理的出现就是用来打通P(A|B)到P(B|A)之路,通用公式如下:
先验概率 :通过经验来判断事情发生的概率。
条件概率 :P(A|B)表示事件B已经发生的前提下,事件A发生的概率,叫做事件B发生下事件A的条件概率。其基本求解公式为:
后验概率 :发生结果之后,推断原因的概率。它属于条件概率的一种 。
二、 朴素贝叶斯分类原理及流程
朴素贝叶斯法 :是基于贝叶斯定理与特征条件独立假设的分类方法。对于给定的训练集,首先基于特征条件独立假设学习输入/输出的联合概率分布;然后基于此模型,对给定的输入x,利用贝叶斯定理求出后验概率最大的输出y。之所以朴素的思想基础是:对于给定的待分类项,求解在此项出现的特征条件下在各类别出现的概率,哪个最大,就认为此待分类项属于哪个类别。
朴素贝叶斯分类具体定义 :
a、设x={ , , ,...... }为一个待分类项,而每个a为x的一个特征属性。
b、有类别集合C={ , , ,..., }。
c、计算P( | x),P( | x),...,P( | x)。
d、如果P( | x)=max{ P( | x),P( | x),...,P( | x) },则x
那么现在的关键是c中如何计算出各条件概率,如下:
1、找到一个已知分类的待分类项的集合,称为训练样本集。
2、统计得到各类别下各特征属性的 条件概率估计 。即:
P( | ),P( | ),...,P( | );P( | ),P( | ),...,P( | );.......,P( | ),P( | ),...,P( | )。
3、如果各特征属性是条件独立的,则根据贝叶斯公式有如下推导:
P( ) =
因为分母对所有分类均为常数(可忽略),因此我们只需将分子最大化。又因为各特征属性是条件独立的,所以有:
= ..... =
综上所述,朴素贝叶斯分类的流程图:
第一阶段 :准备工作,确定训练样本集和特征属性。
第二阶段 :分类器训练,计算先验概率和各类下各特征的条件概率。输入为样本集和特征属性,输出为分类器。
第三阶段: 分类器应用,输入为分类器和待分类项,输出为待分类项的类。
三、 总结 :
1、朴素贝叶斯法是典型的生成学习方法。生成方法由训练数据学习联合概率分布P(X,Y),然后求得后验概率分布P(Y|X)。具体来说,利用训练数据学习P(X|Y)和P(Y)的估计,得到联合概率分布:P(X,Y)=P(Y)P(X|Y)。概率估计法可以是极大似然估计或者贝叶斯估计。
2、朴素贝叶斯法的基本假设是特征属性的条件独立性,即
这是一个较强的假设,由于这一假设,模型包含的条件概率的数量大为减少,朴素贝叶斯的学习与预测大为简化,因而朴素贝叶斯法高效,且易于实现。缺点是分类的性能不一定很高。
3、朴素贝叶斯法利用贝叶斯定理与学到的联合概率模型进行分类预测。将输入的x分到后验概率最大的类y。后验概率最大等价于0-1损失函数时的期望风险最小化。
4. 数据挖掘十大经典算法(1)——朴素贝叶斯(Naive Bayes)
在此推出一个算法系列的科普文章。我们大家在平时埋头工程类工作之余,也可以抽身对一些常见算法进行了解,这不仅可以帮助我们拓宽思路,从另一个维度加深对计算机技术领域的理解,做到触类旁通,同时也可以让我们搞清楚一些既熟悉又陌生的领域——比如数据挖掘、大数据、机器学习——的基本原理,揭开它们的神秘面纱,了解到其实很多看似高深的领域,其实背后依据的基础和原理也并不复杂。而且,掌握各类算法的特点、优劣和适用场景,是真正从事数据挖掘工作的重中之重。只有熟悉算法,才可能对纷繁复杂的现实问题合理建模,达到最佳预期效果。
本系列文章的目的是力求用最干练而生动的讲述方式,为大家讲解由国际权威的学术组织the IEEE International Conference on Data Mining (ICDM) 于2006年12月评选出的数据挖掘领域的十大经典算法。它们包括:
本文作为本系列的第一篇,在介绍具体算法之前,先简单为大家铺垫几个数据挖掘领域的常见概念:
在数据挖掘领域,按照算法本身的行为模式和使用目的,主要可以分为分类(classification),聚类(clustering)和回归(regression)几种,其中:
打几个不恰当的比方 :
另外,还有一个经常有人问起的问题,就是 数据挖掘 和 机器学习 这两个概念的区别,这里一句话阐明我自己的认识:机器学习是基础,数据挖掘是应用。机器学习研制出各种各样的算法,数据挖掘根据应用场景把这些算法合理运用起来,目的是达到最好的挖掘效果。
当然,以上的简单总结一定不够准确和严谨,更多的是为了方便大家理解打的比方。如果大家有更精当的理解,欢迎补充和交流。
好了,铺垫了这么多,现在终于进入正题! 作为本系列入门的第一篇,先为大家介绍一个容易理解又很有趣的算法—— 朴素贝叶斯 。
先站好队,朴素贝叶斯是一个典型的 有监督的分类算法 。
光从名字也可以想到,要想了解朴素贝叶斯,先要从 贝叶斯定理 说起。 贝叶斯定理是我们高中时代学过的一条概率学基础定理,它描述了条件概率的计算方式。不要怕已经把这些知识还给了体育老师,相信你一看公式就能想起来。
P(A|B)表示事件B已经发生的前提下,事件A发生的概率,叫做事件B发生下事件A的条件概率。其基本求解公式为:
其中,P(AB)表示A和B同时发生的概率,P(B)标识B事件本身的概率。
贝叶斯定理之所以有用,是因为我们在生活中经常遇到这种情况:我们可以很容易直接得出P(A|B),P(B|A)则很难直接得出,但我们更关心P(B|A)。
而贝叶斯定理就为我们打通从P(A|B)获得P(B|A)的道路。 下面不加证明地直接给出贝叶斯定理:
有了贝叶斯定理这个基础,下面来看看朴素贝叶斯算法的基本思路。
你看,其思想就是这么的朴素。那么,属于每个分类的概率该怎么计算呢?下面我们先祭出形式化语言!
那么现在的关键就是如何计算第3步中的各个条件概率。我们可以这么做:
因为分母对于所有类别为常数,因为我们只要将分子最大化皆可。又因为各特征属性是条件独立的,所以有:
如果你也跟我一样,对形式化语言有严重生理反应,不要怕,直接跳过前面这一坨,我们通过一个鲜活的例子,用人类的语言再解释一遍这个过程。
某个医院早上收了六个门诊病人,如下表。
现在又来了第七个病人,是一个打喷嚏的建筑工人。请问他最有可能患有何种疾病?
本质上,这就是一个典型的分类问题, 症状 和 职业 是特征属性, 疾病种类 是目标类别
根据 贝叶斯定理
可得
假定"打喷嚏"和"建筑工人"这两个特征是独立的,因此,上面的等式就变成了
这是可以计算的。
因此,这个打喷嚏的建筑工人,有66%的概率是得了感冒。同理,可以计算这个病人患上过敏或脑震荡的概率。比较这几个概率,就可以知道他最可能得什么病。
接下来,我们再举一个朴素贝叶斯算法在实际中经常被使用的场景的例子—— 文本分类器 ,通常会用来识别垃圾邮件。 首先,我们可以把一封邮件的内容抽象为由若干关键词组成的集合,这样是否包含每种关键词就成了一封邮件的特征值,而目标类别就是 属于垃圾邮件 或 不属于垃圾邮件
假设每个关键词在一封邮件里出现与否的概率相互之间是独立的,那么只要我们有若干已经标记为垃圾邮件和非垃圾邮件的样本作为训练集,那么就可以得出,在全部垃圾邮件(记为Trash)出现某个关键词Wi的概率,即 P(Wi|Trash)
而我们最重要回答的问题是,给定一封邮件内容M,它属于垃圾邮件的概率是多大,即 P(Trash|M)
根据贝叶斯定理,有
我们先来看分子: P(M|Trash) 可以理解为在垃圾邮件这个范畴中遇见邮件M的概率,而一封邮件M是由若干单词Wi独立汇聚组成的,只要我们所掌握的单词样本足够多,因此就可以得到
这些值我们之前已经可以得到了。
再来看分子里的另一部分 P(Trash) ,这个值也就是垃圾邮件的总体概率,这个值显然很容易得到,用训练集中垃圾邮件数除以总数即可。
而对于分母来说,我们虽然也可以去计算它,但实际上已经没有必要了,因为我们要比较的 P(Trash|M) 和 P(non-Trash|M) 的分母都是一样的,因此只需要比较分子大小即可。
这样一来,我们就可以通过简单的计算,比较邮件M属于垃圾还是非垃圾二者谁的概率更大了。
朴素贝叶斯的英文叫做 Naive Bayes ,直译过来其实是 天真的贝叶斯 ,那么他到底天真在哪了呢?
这主要是因为朴素贝叶斯的基本假设是所有特征值之间都是相互独立的,这才使得概率直接相乘这种简单计算方式得以实现。然而在现实生活中,各个特征值之间往往存在一些关联,比如上面的例子,一篇文章中不同单词之间一定是有关联的,比如有些词总是容易同时出现。
因此,在经典朴素贝叶斯的基础上,还有更为灵活的建模方式—— 贝叶斯网络(Bayesian Belief Networks, BBN) ,可以单独指定特征值之间的是否独立。这里就不展开了,有兴趣的同学们可以做进一步了解。
最后我们来对这个经典算法做个点评:
优点:
缺点:
好了,对于 朴素贝叶斯 的介绍就到这里,不知道各位看完之后是否会对数据挖掘这个领域产生了一点兴趣了呢?
5. 分类算法 - 朴素贝叶斯算法
相信很多同学在高中或者大学的时候都学过贝叶斯原理,即条件原理。
现分别有 A、B 两个容器,在容器 A 里分别有 7 个红球和 3 个白球,在容器 B 里有 1 个红球和 9 个白球,现已知从这两个容器里任意抽出了一个红球,问这个球来自容器 A 的概率是多少?
假设已经抽出红球为事件 B,选中容器 A 为事件 A,则有:P(B) = 8/20,P(A) = 1/2,P(B|A) = 7/10,按照公式,则有:P(A|B) = (7/10)*(1/2) / (8/20) = 0.875
之所以称为朴素贝叶斯, 是因为它假设每个输入变量是独立的。 现实生活中这种情况基本不满足,但是这项技术对于绝大部分的复杂问题仍然非常有效。
朴素贝叶斯模型由两种类型的概率组成: 1、每个类别的概率P(Cj); 2、每个属性的条件概率P(Ai|Cj)。
为了训练朴素贝叶斯模型,我们需要先给出训练数据,以及这些数据对应的分类。那么上面这两个概率,也就是类别概率和条件概率。他们都可以从给出的训练数据中计算出来。一旦计算出来,概率模型就可以使用贝叶斯原理对新数据进行预测。
贝叶斯原理、贝叶斯分类和朴素贝叶斯这三者之间是有区别的 贝叶斯原理是最大的概念,它解决了概率论中“逆向概率”的问题,在这个理论基础上,人们设计出了贝叶斯分类器,朴素贝叶斯分类是贝叶斯分类器中的一种,也是最简单,最常用的分类器。朴素贝叶斯之所以朴素是因为它假设属性是相互独立的,因此对实际情况有所约束, 如果属性之间存在关联,分类准确率会降低。
(1) 算法逻辑简单,易于实现 (2)分类过程中时空开销小(假设特征相互独立,只会涉及到二维存储)
(1)理论上,朴素贝叶斯模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为朴素贝叶斯模型假设属性之间相互独立,这个假设在实际应用中往往是不成立的,在属性个数比较多或者属性之间相关性较大时,分类效果不好。 (2)在属性相关性较小时,朴素贝叶斯性能最为良好。对于这一点,有半朴素贝叶斯之类的算法通过考虑部分关联性适度改进。
库有3种算法:GaussianNB、MultinomialNB和BernoulliNB。 这三个类适用的分类场景各不相同,主要根据数据类型来进行模型的选择。一般来说,如果样本特征的分布大部分是连续值,使用GaussianNB会比较好。如果如果样本特征的分大部分是多元离散值,使用MultinomialNB比较合适。而如果样本特征是二元离散值或者很稀疏的多元离散值,应该使用BernoulliNB。
6. 朴素贝叶斯算法是什么?
朴素贝叶斯方法是在贝叶斯算法的基础上进行了相应的简化,即假定给定目标值时属性之间相互条件独立。
也就是说没有哪个属性变量对于决策结果来说占有着较大的比重,也没有哪个属性变量对于决策结果占有着较小的比重。虽然这个简化方式在一定程度上降低了贝叶斯分类算法的分类效果,但是在实际的应用场景中,极大地简化了贝叶斯方法的复杂性。
朴素贝叶斯分类(NBC)是以贝叶斯定理为基础并且假设特征条件之间相互独立的方法,先通过已给定的训练集,以特征词之间独立作为前提假设,学习从输入到输出的联合概率分布,再基于学习到的模型,输入X求出使得后验概率最大的输出Y。
个人贡献:
贝叶斯在数学方面主要研究概率论。他首先将归纳推理法用于概率论基础理论,并创立了贝叶斯统计理论,对于统计决策函数、统计推断、统计的估算等做出了贡献。1763年发表了这方面的论著,对于现代概率论和数理统计都有很重要的作用。贝叶斯的另一著作《机会的学说概论》发表于1758年.贝叶斯所采用的许多术语被沿用至今。
他对统计推理的主要贡献是使用了"逆概率"这个概念,并把它作为一种普遍的推理方法提出来。贝叶斯定理原本是概率论中的一个定理,这一定理可用一个数学公式来表达,这个公式就是著名的贝叶斯公式。
7. 朴素贝叶斯算法的原理是什么?
朴素贝叶斯分类(NBC)是以贝叶斯定理为基础并且假设特征条件之间相互独立的方法,以特征词之间独立作为前提假设,学习从输入到输出的联合概率分布,再基于学习到的模型。
朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法。
最为广泛的两种分类模型是决策树模型(Decision Tree Model)和朴素贝叶斯模型(Naive Bayesian Model,NBM)。和决策树模型相比,朴素贝叶斯分类器(Naive Bayes Classifier 或 NBC)发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率。
同时,NBC模型所需估计的参数很少,对缺失数据不太敏感,算法也比较简单。理论上,NBC模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为NBC模型假设属性之间相互独立,这个假设在实际应用中往往是不成立的,这给NBC模型的正确分类带来了一定影响。
朴素贝叶斯算法(Naive Bayesian algorithm) 是应用最为广泛的分类算法之一。
朴素贝叶斯方法是在贝叶斯算法的基础上进行了相应的简化,即假定给定目标值时属性之间相互条件独立。也就是说没有哪个属性变量对于决策结果来说占有着较大的比重,也没有哪个属性变量对于决策结果占有着较小的比重。
虽然这个简化方式在一定程度上降低了贝叶斯分类算法的分类效果,但是在实际的应用场景中,极大地简化了贝叶斯方法的复杂性。
8. 贝叶斯算法
贝叶斯算法是统计学的一种分类方法,它是一类利用概率统计知识进行分类的算法。
在许多场合,朴素贝叶斯分类算法可以与决策树和神经网络分类算法相媲美,该算法能运用到大型数据库中,而且方法简单、分类准确率高、速度快。
由于贝叶斯定理假设一个属性值对给定类的影响独立于其它属性的值,而此假设在实际情况中经常是不成立的,因此其分类准确率可能会下降。为此,就衍生出许多降低独立性假设的贝叶斯分类算法,如TAN(tree augmented Bayes network)算法。
TAN算法树增强型朴素贝叶斯算法
TAN算法通过发现属性对之间的依赖关系来降低NB中任意属性之间独立的假设。它是在NB网络结构的基础上增加属性对之间的关联来实现的。实现方法是:用结点表示属性,用有向边表示属性之间的依赖关系,把类别属性作为根结点,其余所有属性都作为它的子节点。
通常,用虚线代表NB所需的边,用实线代表新增的边。属性Ai与Aj之间的边意味着属性Ai对类别变量C的影响还取决于属性Aj的取值。这些增加的边需满足下列条件:类别变量没有双亲结点,每个属性有一个类别变量双亲结点和最多另外一个属性作为其双亲结点。
由于在TAN算法中考虑了n个属性中(n-1)个两两属性之间的关联性,该算法对属性之间独立性的假设有了一定程度的降低,但是属性之间可能存在更多其它的关联性仍没有考虑,因此其适用范围仍然受到限制。