1、第四章贝叶斯分类器问题的提出KNN?决策树?概率方法?贝叶斯 贝叶斯(约1701-1761)Thomas Bayes,英国数学家。约1701年出生于伦敦,做过神甫。1742年成为英国皇家学会会员。1761年4月7日逝世。贝叶斯在数学方面主要研究概率论。他首先将归纳推理法用于概率论基础理论,并创立了贝叶斯统计理论,对于统计决策函数、统计推断、统计的估算等做出了贡献。他死后,理查德普莱斯(Richard Price)于1763年将他的著作机会问题的解法(An essay towards solving a problem in the doctrine of chances)寄给了英国皇家学会,对
2、于现代概率论和数理统计产生了重要的影响 贝叶斯决策就是在不完全情报下,对部分未知的状态用主观概率估计,然后用贝叶斯公式对发生概率进行修正,最后再利用期望值和修正概率做出最优决策。贝叶斯决策理论方法是统计模型决策中的一个基本方法,其基本思想是:1、已知类条件概率密度参数表达式和先验概率。2、利用贝叶斯公式转换成后验概率。3、根据后验概率大小进行决策分类。贝叶斯 最早的PathFinder系统,该系统是淋巴疾病诊断的医学系统,它可以诊断60多种疾病,涉及100多种症状;后来发展起来的Internist I系统,也是一种医学诊断系统,但它可以诊断多达600多种常见的疾病。1995年,微软推出了第一个
3、基于贝叶斯网的专家系统,一个用于幼儿保健的网站OnParent(),使父母们可以自行诊断。贝叶斯网络的应用(1)故障诊断(diagnose)(2)专家系统(expert system)(3)规划(planning)(4)学习(learning)(5)分类(classifying)贝叶斯网络的应用12001212,1,1,2,;2,.nijnnEB BBEB Bi jnBBBB BB 定义设为试验 的样本空间为的一组事件 若则称为样本空间的一个划分样本空间的划分样本空间的划分1B2B3BnB1nB概率(回顾)全概率公式1211221,()0(1,2,),()(|)()(|)()(|)()()(|
4、)ninnniiEAEB BBP BinP AP A B P BP A B P BP A BP BP B P A B定义 设为试验 的样本空间为 的事件为的一个划分 且则概率(回顾)训练数据集:由X和Y的联合概率分布P(X,Y)独立同分布产生 朴素贝叶斯通过训练数据集学习联合概率分布P(X,Y),即先验概率分布:及条件概率分布:注意:条件概率为指数级别的参数:基本方法 条件独立性假设:“朴素”贝叶斯名字由来,牺牲分类准确性。贝叶斯定理:代入上式:基本方法 贝叶斯分类器:分母对所有ck都相同:基本方法 朴素贝叶斯法将实例分到后验概率最大的类中,等价于期望风险最小化,假设选择0-1损失函数:f(X
5、)为决策函数 期望风险函数:取条件期望:后验概率最大化的含义:只需对X=x逐个极小化,得:推导出后验概率最大化准则:后验概率最大化的含义:应用极大似然估计法估计相应的概率:先验概率P(Y=ck)的极大似然估计是:设第j个特征x(j)可能取值的集合为:条件概率的极大似然估计:朴素贝叶斯法的参数估 学习与分类算法Nave Bayes Algorithm:输入:训练数据集 第i个样本的第j个特征 第j个特征可能取的第l个值 输出:x的分类朴素贝叶斯法的参数估 步骤 1、计算先验概率和条件概率朴素贝叶斯法的参数估 步骤 2、对于给定的实例 计算 3、确定x的类别朴素贝叶斯法的参数估例子 测试例子例子
6、考虑:用极大似然估计可能会出现所要估计的概率值为0的情况,这时会影响到后 验概率的计算结果,使分类产生偏差.解决这一问题的方法是采用贝叶斯估计。条件概率的贝叶斯估计:先验概率的贝叶斯估计:贝叶斯估计 考虑几个问题:1、如果属性之间不相互独立?2、如果属性A和属性B都很重要,但是相关?3、如果属性A,属性B之间独立,但是在属性C下有关?4、属性之间的条件概率究竟有多少个?5、条件概率谬论?朴素贝叶斯网络的缺陷 条件概率的谬论 假设 P(A|B)大致等于 P(B|A)例子:P(disease)=1%=0.01 P(well)=99%=0.99 P(negative|disease)=1%P(pos
7、itive|disease)=99%P(positive|well)=1%P(negative|well)=99%?P(disease|positive)=?Problem:if P(d)=0.1%,P(d|P)=?贝叶斯分类器阻塞:一条路径被结点集 F 阻塞,是指在路径上存在一个结点 Z 满足下面三种情形之一:(1)Z F,并且路径中有一条有向弧指向 Z,另一条有向弧源自 Z;(2)Z F,并且路径中有两条有向弧源自 Z;(3)Z 及 Z 的所有后继结点都不在 F 中,并且路径中有两条有向弧指Z。信息论相关概念阻塞:X=X2和Y=X3被Z=X1所分割。路径X2X1 X3被X1 Z阻塞;同时路
8、径X2 X4 X3也被阻塞,因为X4及它的所有子孙都不在Z中。因此成立d(X2,X1,X3)。然而,X和Y没有被Z=X1,X5所d分割,因为路径X2 X4 X3由于X5的作用而成为活跃,X5在Z 中,是X4的子孙信息论相关概念 d-separation:令 X,Y 和 Z 是一个有向无环图 G 中三个不相交节点的子集,如果在集合 X 和 Y 中所有节点间的所有路径都被集合 Z 所阻塞,则称集合 X 和 Y 被 Z 集合 d-separation,表示为G,也称 Z为 A 和 B 的切割集。否则,称在给定集合 Z 下集合 X 和 Y 图形依赖。I-map:假设 G 是以随机变量 Y1,Y2,Yn
9、 为节点的一个有向无环图,P 是随机变量 Y1,Y2,Yn的联合概率函数,如果从图 G 中得到的每一个独立性假设(Yi在给定其父母节点变量的情况下独立于它的非后代节点)在联合概率 P 的计算中都成立,则称 G 是该概率分布 P 的一个独立映射(Independence-map,I-map)。信息论相关概念朴素贝叶斯网络分类器 半朴素贝叶斯分类器(SNBC:Semi-Naive Bayesian Classifier)选择贝叶斯分类器(SBC:Selective Bayesian Classifier)树增广朴素贝叶斯网络分类器(TAN:Tree Augmented Naive Bayes)平均
10、一依赖估测器(AODE:averaged one dependence estimators)学习算法 加权平均的一依赖估测器(WAODE:weightily averaged one dependence estimators)学习算法 无约束贝叶斯网络分类器(GBN:General Baynes Network)隐藏扩展的朴素贝叶斯分类算法(HANB)朴素贝叶斯网络分类器的改进算法 SNBC:Semi-Naive Bayesian Classifier),SNBC在模型构建过程中,依照一定的标准将关联程度较大的特征属性合并在一起组合成新属性。SNBC的各个组合属性之间相对于类别属性也是相互
11、独立。SNBC除了结构上的差别之外,计算推导过程与朴素贝叶斯相同。半朴素贝叶斯网络分类器 SBC:Selective Bayesian Classifier)SBC设计目标是为了提高朴素贝叶斯在属性冗余情况下的分类精度。SBC只使用属性集的子集作为决策过程中的属性结点,即选择贝叶斯分类器选择初始特征的子集作为属性结点。SBC通过搜索特征空间,去掉特征间具有较强依赖关系的属性。前向(空集到全集),后向(全集到空集)可能的搜索子集2m选择贝叶斯分类器 属性的相互独立性?如何测量?信息论相关概念 设有随机变量(X,Y),其联合概率分布为:条件熵H(Y|X):表示在己知随机变量X的条件下随机变量Y的不
12、确定性,定义为X给定条件下Y的条件概率分布的熵对X的数学期望:信息增益(回顾)定义(信息增益):特征A对训练数据集D的信息增益,g(D,A),定义为集合D的经验熵H(D)与特征A给定条件下D的经验条件熵H(D|A)之差,即 g(D,A)=H(D)-H(D|A)(Information gain)表示得知特征X的信息而使得类Y的信息的不确定性减少的程度.般地,熵H(Y)与条件熵H(Y|X)之差称为互信息(mutual information)决策树学习中的信息增益等价于训练数据集中类与特征的互信息.信息增益(回顾)设信源X为离散随机变量,则用来度量X的不确定性的信息熵H(X)为 设(X,Y)均为
13、离散随机变量,用来度量二元随机变量的不确定性联合信息熵H(X,Y)为信息论相关概念 条件信息熵H(X|Y)用来度量在收到随机变量Y 提供的信息后,随机变量X仍然存在的不确定性 互信息I(X;Y)用来描述随机变量Y 提供的关于X的信息量的大小。信息论相关概念 在已知Y 的前提下,随机变量X和Z之间的条件互信息定义为信息论相关概念 条件独立:对概率模式 M,A,B 和 C 是 U 的三个互不相交的变量子集,如果对 x A,y B和 z C都有 p(x|y,z)=p(x|z),其中 p(y,z)0,称给定 C 时 A 和 B 条件独立,记为 I(A,C,B)M。或:p(x,y|z)=p(x|z)p(
14、y|z)信息论相关概念 贝叶斯网络是由图论和概率论结合而成的描述多元统计关系的模型,它为多个变量之间复杂依赖关系的表示提供了统一的框架,具有紧凑有效、简洁直观的特点。由于贝叶斯网络对大规模复杂系统简约而紧凑的表示能力,使得其成为人工智能、专家系统、模式识别、数据挖掘和软件测试等领域的研究热点。贝叶斯网络基本模型 父节点pa(Vi)子节点ch(Vi)邻居节点nb(Vi)祖先an(vi)有向环 有向无环(directed acyclic Graph)BN二元组贝叶斯网络基本模型贝叶斯网络基本模型 N个变量的BN,变量xi有ri个取值 父节点pa(xi)的取值qi 网络参数:贝叶斯网络基本模型 表示
15、所有参数组成的向量 ij*表示 子向量 i*表示 子向量贝叶斯估计 P()的三个假设:(全局独立)关于不同变量xi的参数相互独立。(局部独立)给定一个变量xi对应于pa(xi)的不同取值的参数相互独立。贝叶斯估计 给定数据集D的条件下,即:的后验概率分布 P(|D)服从 Dirichlet 分布 结合贝叶斯网络的可分解性得到参数估计值贝叶斯估计 Beta distribution 在,两个值的控制下x的概率分布,即控制Beta分布的性质 阶乘在实数域和复数域的扩展贝叶斯估计 BN 结构学习就是在给定一个数据样本集合 D 的前提下,寻找一个与训练样本集D匹配最好的网络结构,而搜索最优的网络结构是
16、一个 NP 难问题,因此,从数据中学习贝叶斯网络结构一直是研究的热点。基于评分搜索的方法 Robinson 等证明了包含n个节点可能的 BN 结构数目 K2 评分(又称 CH 评分),BD 评分,MDL(Minimum Description Length)评分,BIC(Bayesian Information Criterion)评分,AIC(Akaike Information Criterion)评分贝叶斯网络结构学习 基于信息理论的评分函数主要是利用编码理论和信息论中的最小描述长度(Minimum Description Length,MDL)原理来实现的 其基本思想源自对数据的存储假
17、设D是一组给定的实例数据,如果要对其进行保存,为了节省存储空间,一般采用某种模型对其进行编码压缩,然后再保存压缩后的数据;为了在需要的时候可以完全恢复这些实例数据,要求对所使用的模型进行保存;因此,需要保存的数据长度等于压缩后的数据长度加上模型的描述长度,该长度称为总的描述长度。基于信息理论的评分函数 MDL评分准则趋向于寻找一个结构较简单的网络,实现网络精度与复杂度之间的均衡。利用参数个数作为网络结构复杂度的惩罚函数 采用海明码表示压缩后的数据长度,即就是关于数据D和模型的对数似然 得MDL得分基于信息理论的评分函数 简化:基于信息理论的评分函数 树增广朴素贝叶斯网络分类器(TAN:Tree
18、 Augmented Naive Bayes)在属性之间增添连接弧,以消除朴素贝叶斯分类器关于条件独立的假设,称为扩展弧。从结点Xi到Xj的扩展弧表示属性Xj对分类的影响也取决于Xi的取值。可能有这样的情况:待分类样本的属性值Xi和Xj对分类的影响都不大,P(xi|c)和P(xj|c)的值比较低,但是P(xj|xi,c)的值却很高,这时朴素贝叶斯分类器会过度降低样本属于类c概率,而扩展的朴素贝叶斯网络分类器却可以避免这一点。树增广朴素贝叶斯网络分类器树增广朴素贝叶斯网络分类器 TAN的构造过程:步骤1.通过训练集计算属性对之间的条件互信息I(Xi,Xj|C)(i j)。步骤2.建立一个以X1,
19、X2,Xn为结点的加权完全无向图,结点Xi,Xj之间的权重为I(Xi,Xj|C)(i j)。步骤3.利用求最大权生成树算法,建立该无向图最大权重跨度树。首先把边按权重由大到小排序,之后遵照被选择的边不能构成回路的原则,按照边的权重由大到小的顺序选择边,这样由所选择的边构成的树便是最大权重跨度树。树增广朴素贝叶斯网络分类器 步骤4.指定一个属性结点作为根结点,将所有边的方向设置成由根结点指向外,把无向图转换成有向图。步骤5.加入类结点C,并添加从C指向每个属性结点Xi的弧。树增广朴素贝叶斯网络分类器 平均一依赖估测器(averaged one dependence estimators,简记为A
20、ODE)的学习算法。AODE首先针对每一个属性结点学习一个“特殊”的树扩展的朴素贝叶斯分类器,之所以特殊,是因为它直接把该属性结点当成是其他所有属性结点的父亲结点。然后,把这些树扩展的朴素贝叶斯分类器进行平均。平均一依赖估测器平均一依赖估测器 在AODE模型中,所有的树扩展的朴素贝叶斯分类器对最终分类的贡献是一样的,这似乎不太合理平均依赖估测器 加权平均的一依赖估测器(weightily averaged one dependence estimators,简记WAODE)加权平均一依赖估测器 加权平均的一依赖估测器(weightily averaged one dependence esti
21、mators,简记WAODE)加权平均-依赖估测器贝叶斯算法处理流程:def loadDataSet():postingList=my,dog,has,flea,problems,help,please,maybe,not,take,him,to,dog,park,stupid,my,dalmation,is,so,cute,I,love,him,stop,posting,stupid,worthless,garbage,mr,licks,ate,my,steak,how,to,stop,him,quit,buying,worthless,dog,food,stupid classVec=0,
22、1,0,1,0,1#1 is abusive,0 not return postingList,classVec使用Python 进行文本分类 def createVocabList(dataSet):vocabSet=set()#create empty set for document in dataSet:vocabSet=vocabSet|set(document)#union of the two sets return list(vocabSet)使用Python 进行文本分类 def trainNB0(trainMatrix,trainCategory):numTrainDocs
23、=len(trainMatrix)numWords=len(trainMatrix0)pAbusive=sum(trainCategory)/float(numTrainDocs)p0Num=ones(numWords);p1Num=ones(numWords)#change to ones()p0Denom=2.0;p1Denom=2.0#change to 2.0训练算法:从词向量计算概率 for i in range(numTrainDocs):if trainCategoryi=1:p1Num+=trainMatrixi p1Denom+=sum(trainMatrixi)else:p
24、0Num+=trainMatrixi p0Denom+=sum(trainMatrixi)p1Vect=log(p1Num/p1Denom)#change to log()p0Vect=log(p0Num/p0Denom)#change to log()return p0Vect,p1Vect,pAbusive训练算法:从词向量计算概率 def classifyNB(vec2Classify,p0Vec,p1Vec,pClass1):p1=sum(vec2Classify*p1Vec)+log(pClass1)#element-wise mult p0=sum(vec2Classify*p0V
25、ec)+log(1.0-pClass1)if p1 p0:return 1 else:return 0测试和使用算法 def classifyNB(vec2Classify,p0Vec,p1Vec,pClass1):p1=sum(vec2Classify*p1Vec)+log(pClass1)#element-wise mult p0=sum(vec2Classify*p0Vec)+log(1.0-pClass1)if p1 p0:return 1 else:return 0测试算法和修改分类器 def testingNB():listOPosts,listClasses=loadDataSe
26、t()myVocabList=createVocabList(listOPosts)trainMat=for postinDoc in listOPosts:trainMat.append(setOfWords2Vec(myVocabList,postinDoc)p0V,p1V,pAb=trainNB0(array(trainMat),array(listClasses)testEntry=love,my,dalmation thisDoc=array(setOfWords2Vec(myVocabList,testEntry)print testEntry,classified as:,cla
27、ssifyNB(thisDoc,p0V,p1V,pAb)testEntry=stupid,garbage thisDoc=array(setOfWords2Vec(myVocabList,testEntry)print testEntry,classified as:,classifyNB(thisDoc,p0V,p1V,pAb)测试算法和修改分类器文档词袋模型切分文本 Def spamTest():docList=;classList=;fullText=for i in range(1,26):wordList=textParse(open(email/spam/%d.txt%i).rea
28、d()docList.append(wordList)fullText.extend(wordList)classList.append(1)wordList=textParse(open(email/ham/%d.txt%i).read()docList.append(wordList)fullText.extend(wordList)classList.append(0)vocabList=createVocabList(docList)#create vocabulary trainingSet=range(50);testSet=#create test set使用朴素贝叶斯方法进行交叉验证使用朴素贝叶斯方法进行交叉验证 Feedparser的安装 下载 网络学堂 安装:python setup.py installRSS的使用:从RSS源收集数据 高频词去除RSS的使用:从RSS源收集数据 两个RSS源作为参数RSS的使用:从RSS源收集数据RSS的使用:从RSS源收集数据RSS的使用:从RSS源收集数据 问题:高频次设定的阈值对正确率的影响 消除各种语言的高频词RSS的使用:从RSS源收集数据分析数据:显示地域相关的用词 见参考文献。实验作业三 Q&A?