机器学习及应用第6章-贝叶斯分类器课件.pptx
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《机器学习及应用第6章-贝叶斯分类器课件.pptx》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 机器 学习 应用 贝叶斯 分类 课件
- 资源描述:
-
1、第06章 贝叶斯分类器p贝叶斯定理p朴素贝叶斯算法p极大似然估计p贝叶斯网络pEM算法6.1 引言n 计算机科学家和统计学家都会利用样本数据集训练计算机,使之能进行判断和推理。计算机科学家主要关心这些推理方法如何在计算机上有效地实现,而统计学家主要关心如何构建一个使用这些数据进行逻辑推理和判断的数学框架。n 如果对某个过程缺乏先验知识,这时可以将其视作一个随机过程,使用概率理论来分析。例如,投掷硬币就是一个典型的随机过程,因为我们不能预测任意一次投币的结果是正面还是反面,而只能谈论下一次投币是正面或反面的概率。6.1 引言6.1 引言1763年6.1 引言6.1 引言 1|iiiiNjjjP
2、ABP A B P BP BAP AP A BP B6.2 朴素贝叶斯分类n 朴素贝叶斯分类(Naive Bayes Classifier)是基于贝叶斯定理和特征条件独立假设的分类算法。n 朴素贝叶斯分类器源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率。n 朴素贝叶斯模型的参数也不多,对缺失数据不太敏感,算法实现比较简单。n 通俗地讲,朴素贝叶斯分类器可以看作:对于给定的待分类项,求解在该对于给定的待分类项,求解在该分类项出现的条件下,各个类别出现的概率。根据各个类别出现的概率,分类项出现的条件下,各个类别出现的概率。根据各个类别出现的概率,哪个最大,就将其划归为那个类别。哪个最大,
3、就将其划归为那个类别。6.2 朴素贝叶斯分类n假设样本 ,标签 。令x为X上的随机向量,y是Y上的随机向量,P(X,Y)为X和Y的联合概率分布。假定训练数据集 是由P(X,Y)独立同分布产生的,那么朴素贝叶斯算法可从训练数据集T中学习联合概率分布P(X,Y),即n先验概率分布:n条件(似然)概率分布:6.2.1 朴素贝叶斯算法,kP YckK1 2|,kP XYckKx1 2n 朴素贝叶斯算法有一个假设:在分类确定的条件下,要求分类的各个特征是条件独立的。12|,|nknknjjkjP XY=cP XxXxXxY=cP XxY=cx121 T12,nn=xxxXRx,KyYc cc12,NNT
4、=yyyxxx11226.2 朴素贝叶斯分类根据贝叶斯定理,计算后验概率:于是,朴素贝叶斯分类器表示为:考虑分类特征的条件独立假设,有:|,|njkjkjkKjjjP YcP XxY=cP Y=cXkKP XYcP Ycxx111 2|argmax|knjkjkjKcjjjP YcP XxY=cyfP XYcP Yc11xx|argmaxknjkjkcjyfP YcP XxY=c1x由于对所有的 ,上式的分母都相同,因此可简写为:6.2 朴素贝叶斯分类6.2.2 朴素贝叶斯分类算法n准备工作阶段准备工作阶段:这一阶段的输入是所有待分类数据,输出是特征属性和训练样本。这一阶段是整个朴素贝叶斯分类
5、中唯一需要人工完成的阶段,其质量对整个过程将有重要影响,分类器的质量很大程度上由特征属性、特征属性划分及训练样本质量决定。n分类器训练阶段分类器训练阶段:其输入是特征属性和训练样本,输出是分类器。这一阶段是机械性阶段,根据前面讨论的公式可以由程序自动计算完成。n应用应用阶段阶段:其输入是分类器和待分类项,输出是待分类项与类别的映射关系。这一阶段也是机械性阶段,由程序完成。朴素贝叶斯分类算法大致可分为三个阶段:6.2 朴素贝叶斯分类6.2.2 朴素贝叶斯分类算法6.2 朴素贝叶斯分类6.2.2 朴素贝叶斯分类算法例如,使用贝叶斯分类器对垃圾邮件进行分类和过滤。贝叶斯分类器需要依赖历史数据进行学习
6、,假定包含关键词“中奖”的就算作垃圾邮件。先经过人工筛选找出10封邮件,并对包含关键词“中奖”的邮件标注为垃圾邮件(Spam)。序号包含关键词(“中奖”)邮件类别1NoEmail2YesSpam3YesSpam4NoEmail5NoSpam6YesSpam7NoEmail8YesEmail9NoEmail10NoEmail6.2 朴素贝叶斯分类6.2.2 朴素贝叶斯分类算法统计普通邮件和垃圾邮件中出现“中奖”关键词的频率并进行汇总,分别记录普通邮件中出现和未出现该关键词的次数和垃圾邮件中出现和未出现该关键词的次数,并分别进行汇总。EmailSpam频率Yes134No516频率6410Emai
7、lSpam概率Yes1/6 P(Yes|Email)3/4 P(Yes|Spam)0.4 P(Yes)No5/6 P(No|Email)1/4 P(No|Spam)0.6 P(No)0.6 P(Email)0.4 P(Spam)n 根据贝叶斯定理,已知垃圾邮件中出现“中奖”关键词的概率P(Yes),垃圾邮件出现的概率P(Spam),以及垃圾邮件中有“中奖”关键词出现的概率P(Yes|Spam),那么当出现“中奖”关键词时,该邮件是垃圾邮件的概率P(Spam|Yes)为6.2 朴素贝叶斯分类6.2.2 朴素贝叶斯分类算法EmailSpam概率Yes1/6 P(Yes|Email)3/4 P(Ye
8、s|Spam)0.4 P(Yes)No5/6 P(No|Email)1/4 P(No|Spam)0.6 P(No)0.6 P(Email)0.4 P(Spam)附:6.2 朴素贝叶斯分类6.2.3 朴素贝叶斯分类算法的Python实现DayOutlookTempHumidityWindyPlayTennisDay 1SunnyHotHighWeakNoDay 2SunnyHotHighStrongNoDay 3OvercastHotHighWeakYesDay 4RainMildHighWeakYesDay 5RainCoolNormalWeakYesDay 6RainCoolNormalSt
9、rongNoDay 7OvercastCoolNormalStrongYesDay 8SunnyMildHighWeakNoDay 9SunnyCoolNormalWeakYesDay 10RainMildNormalWeakYesDay 11SunnyMildNormalStrongYesDay 12OvercastMildHighStrongYesDay 13OvercastHotNormalWeakYesDay 14RainMildHighStrongNon假定给定了如下表所示的训练样本数据,训练的目的是根据给定的天气状况判定是否去PlayTennis?当给出一个新的实例,如Outloo
10、k=Sunny,Temp=Cool,Humidity=High,Windy=Strong时,那么预测的目标概念PlayTennis的目标值是Yes还是No?6.2 朴素贝叶斯分类6.2.3 朴素贝叶斯分类算法的Python实现对于样本(“Outlook”:”Sunny”,“Temp”:“Cool”,“Humidity”:“High”,“Windy”:“Strong”),计算:n 输入:以字典方式存储的(分类)天气信息,如Outlook:Sunny,Temp:Hot,Humidity:High,Windy:Weak,class:No。n 输出:类别(Yes,No)6.2 朴素贝叶斯分类6.2.3
11、 朴素贝叶斯分类算法的Python实现6.2 朴素贝叶斯分类6.2.3 朴素贝叶斯分类算法的Python实现from numpy import*#训练朴素贝叶斯模型(仅针对属性值为离散型情况)class BayesClassifier():#简单贝叶斯分类器 def _init_(self):pass#分离数据集的属性和标签,并分别保存下来 def getFeatures(self,dataElem,Label):self.Label=Label#数据集的标签名称 self.FLists=cl for cl in dataElem#数据集的属性名称 self.FLists.remove(sel
12、f.Label)return self.FListsn 示例程序如下:6.2 朴素贝叶斯分类6.2.3 朴素贝叶斯分类算法的Python实现#分离数据:数据集和标签 def splitData(self,dataSets):labels=clself.Label for cl in dataSets#标签数据集 features=#属性数据集 for i in range(len(dataSets):feature=for fa in dataSetsi:#处理每一个数据 if fa!=self.Label:#判断是标签,还是属性 featurefa=dataSetsifa print(fea
13、ture)features.append(feature)return features,labels6.2 朴素贝叶斯分类6.2.3 朴素贝叶斯分类算法的Python实现#训练简单贝叶斯分类器 def train(self,features,labels):self.sampleNum=len(features)#样本数目 self.countDic=#统计各个条件概率的出现次数 self.labelSet=set()#集合存放类标,如:Y=1 or Y=0 for i in range(len(labels):#统计类标不同值出现的次数 TempStr=Y=+str(labelsi)sel
14、f.labelSet.add(str(labelsi)if TempStr in self.countDic:self.countDicTempStr+=1 else:self.countDicTempStr=1 for i in range(len(features):#统计各个条件概率组合出现的次数6.2 朴素贝叶斯分类6.2.3 朴素贝叶斯分类算法的Python实现 for fl in self.FLists:TempStr=F+str(fl)+=+str(featuresifl)+|Y=+str(labelsi)if TempStr in self.countDic:self.coun
15、tDicTempStr+=1 else:self.countDicTempStr=1 for key in self.countDic.keys():#遍历次数统计字典计算概率 if key.find(|)!=-1:#计算条件概率P(Fi=a|Y=b)targetStr=keykey.find(|)+1:#类标字符串:Y=1 or Y=-0 self.countDickey/=self.countDictargetStr#计算条件概率P(Fi=a|Y=b)=Count(Fi=a,Y=b)/Count(Y=b)for label in self.labelSet:#计算类标概率P(Y=b)6.2
16、 朴素贝叶斯分类6.2.3 朴素贝叶斯分类算法的Python实现 TempStr=Y=+str(label)self.countDicTempStr/=self.sampleNum def classify(self,feature):#使用训练后的贝叶斯分类器分类新样本#计算后验概率P(Y=b|Sample=feature)probabilityMap=for label in self.labelSet:TempProbability=1.0 for fl in self.FLists:TempStr=F+str(fl)+=+str(featurefl)+|Y=+label if Temp
17、Str not in self.countDic:#遇到新的特征值,导致该概率P(Fi=a|Y=b)为0,将它校正为非0值(1/Count(Y=b)6.2 朴素贝叶斯分类6.2.3 朴素贝叶斯分类算法的Python实现 TempProbability*=(1.0/self.countDicY=+label)/self.sampleNum else:TempProbability*=self.countDicTempStr TempProbability*=self.countDicY=+label probabilityMaplabel=TempProbability maxProbabili
18、ty=0.0 for label in self.labelSet:#选取使后验概率P(Y=b|Sample=feature)最大的类标作为目标类标 if probabilityMaplabel maxProbability:maxProbability=probabilityMaplabel targetLabel=label probabilityMap.clear()return targetLabel6.2 朴素贝叶斯分类6.2.3 朴素贝叶斯分类算法的Python实现 def _del_(self):self.countDic.clear()if _name_=_main_:#dat
19、a data=outlookOutlook:sunnySunny,tempTemp:hotHot,humidityHumidity:highHigh,windWindy:weakWeak,class:noNo,outlookOutlook:sunnySunny,tempTemp:hotHot,humidityHumidity:highHigh,windWindy:strongStrong,class:noNo,outlookOutlook:overcastOvercast,tempTemp:hotHot,humidityHumidity:highHigh,windWindy:weakWeak,
20、class:yesYes,outlookOutlook:rainRain,tempTemp:mildMild,humidityHumidity:highHigh,windWindy:weakWeak,class:yesYes,6.2 朴素贝叶斯分类6.2.3 朴素贝叶斯分类算法的Python实现outlookOutlook:rainRain,tempTemp:coolCool,humidityHumidity:normalNormal,windWindy:weakWeak,class:yesYes,outlookOutlook:rainRain,tempTemp:coolCool,humidi
21、tyHumidity:normalNormal,windWindy:strongStrong,class:noNo,Outlook:Overcast,Temp:Cool,Humidity:Normal,Windy:Strong,class:Yes,Outlook:Sunny,Temp:Mild,Humidity:High,Windy:Weak,class:No,Outlook:Sunny,Temp:Cool,Humidity:Normal,Windy:Weak,class:Yes,Outlook:Rain,Temp:Mild,Humidity:Normal,Windy:Weak,class:Y
22、es,Outlook:Sunny,Temp:Mild,Humidity:Normal,Windy:Strong,class:Yes,Outlook:Overcast,Temp:Mild,Humidity:High,Windy:Strong,class:Yes,Outlook:Overcast,Temp:Hot,Humidity:Normal,Windy:Weak,class:Yes,Outlook:Rain,Temp:Mild,Humidity:High,Windy:Strong,class:No 6.2 朴素贝叶斯分类6.2.3 朴素贝叶斯分类算法的Python实现#calculate NB
23、C=BayesClassifier()NBC.getFeatures(data0,class)features,labels=NBC.splitData(data)NBC.train(features,labels)print(NBC.classify(outlookOutlook:sunnySunny,tempTemp:coolCool,humidityHumidity:highHigh,windWindy:strongStrong),NBC.classify(outlookOutlook:overcastOvercast,tempTemp:coolCool,humidityHumidity
24、:normalNormal,windWindy:strongStrong)运行结果:noNo yesYes6.2 朴素贝叶斯分类6.2.4 sklearn的朴素贝叶斯方法n sklearn提供多个朴素贝叶斯分类器,他们的主要区别在于假设了不同的概率分布,下面介绍三种常用的朴素贝叶斯分类器。高斯朴素贝叶斯分类器(GaussianNB)多项式贝叶斯分类器(MultimomialNB)伯努利贝叶斯分类器(BernoulliNB)n 其函数原型为class sklearn.naive_bayes.GaussianNB(priors=None)n 参数如下:priors:数组,默认参数值为None。类的
25、先验概率,如果指定了先验信息,则不会根据数据进行调整。6.2 朴素贝叶斯分类6.2.4 sklearn的朴素贝叶斯方法在高斯朴素贝叶斯分类器中,假设特征的条件概率分布满足高斯分布,即n 高斯朴素贝叶斯分类器(GaussianNB)6.2 朴素贝叶斯分类6.2.4 sklearn的朴素贝叶斯方法n 高斯朴素贝叶斯分类器(GaussianNB)n 参数如下:priors:数组,默认参数值为None。类的先验概率,如果指定了先验信息,则不会根据数据进行调整。n 属性有:class_prior:数组。每个类别的概率 ,形状为(n_classes,)class_count:数组。每个类别包含的训练样本数
展开阅读全文