Python工程应用—机器学习方法与实践第5章朴素贝叶斯

上传人:sat****105 文档编号:348286628 上传时间:2023-04-02 格式:PPTX 页数:30 大小:2.28MB
返回 下载 相关 举报
Python工程应用—机器学习方法与实践第5章朴素贝叶斯_第1页
第1页 / 共30页
Python工程应用—机器学习方法与实践第5章朴素贝叶斯_第2页
第2页 / 共30页
Python工程应用—机器学习方法与实践第5章朴素贝叶斯_第3页
第3页 / 共30页
Python工程应用—机器学习方法与实践第5章朴素贝叶斯_第4页
第4页 / 共30页
Python工程应用—机器学习方法与实践第5章朴素贝叶斯_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《Python工程应用—机器学习方法与实践第5章朴素贝叶斯》由会员分享,可在线阅读,更多相关《Python工程应用—机器学习方法与实践第5章朴素贝叶斯(30页珍藏版)》请在金锄头文库上搜索。

1、第一章第一章 概论概论西华大学西华大学机器学习第五章 朴素贝叶斯XXX学校XXXXXX20222022目录Contents模型介绍社区留言板文本分类旧金山犯罪分类预测 3 XXXXXXXXXXXXXXXXX 知识引入知识引入3序号症状职业疾病1打喷嚏护士感冒2打喷嚏农夫过敏3头疼建筑工人脑震荡4头疼建筑工人感冒5打喷嚏教师感冒6头疼教师脑震荡某个医院早上收了六个门诊病人,这六个病人的症状和最终诊断的疾病如下表所示:现在又来了一个打喷嚏的建筑工人,请问他有可能患上了什么疾病?4 XXXXXXXXXXXXXXXXX 本章知识图谱本章知识图谱4求是 明德 卓越 模型介绍一 6 XXXXXXXXXXX

2、XXXXXX1.1 1.1 贝叶斯决策理论基础贝叶斯决策理论基础6朴素贝叶斯的理论基础是概率与条件概率。1、概率 概率有很多种定义,简言之就是表征随机事件发生可能性大小的量,是事件本身所固有的、不随人的主观意愿而改变的一种属性。事件A发生的概率通常记为P(A)。2、条件概率 条件概率就是在另外一个事件B已经发生的条件下,事件A发生的概率,表示为P(A|B),读作“在B条件下A的概率”。条件概率可由下式计算:71.1 1.1 贝叶斯决策理论基础贝叶斯决策理论基础73、先验概率和后验概率 先验概率是在缺乏某个事实的情况下描述一个事件发生的可能性,而后验概率是在考虑了一个事实之后的条件概率。4、全概

3、率公式 概率论中经常要从已知的简单事件的概率去求未知的复杂事件的概率,即将复杂事件分解为若干个简单事件,通过这些简单事件的概率来求复杂事件的概率。形成定理就是经常用到的全概率公式。81.1 1.1 贝叶斯决策理论基础贝叶斯决策理论基础85、贝叶斯公式 通常,事件A在事件B发生的条件下发生的概率,与事件B在事件A发生的条件下发生的概率是不一样的,但这两者是有确定关系的,贝叶斯法则就是对这种关系的描述。91.1 1.1 贝叶斯决策理论基础贝叶斯决策理论基础95、贝叶斯公式AB 现在假设“抽出黑球”为事件X,“选择容器A”为事件Y,那么可以计算出:P(X)=(3+4)/10=0.7,P(Y)=0.5

4、,P(X|Y)=3/5=0.6,根据贝叶斯公式可以求出P(Y|X)=P(X|Y)*P(Y)/P(X)=0.43,因此该球来自于容器A的概率为0.43。从这两个容器中任意抽取出一个球,结果发现是一个黑球,我们想知道这个球来自于容器A的概率是多少?101.2 1.2 使用朴素贝叶斯进行分类使用朴素贝叶斯进行分类10将贝叶斯公式换成分类任务表达式为:111.2 1.2 使用朴素贝叶斯进行分类使用朴素贝叶斯进行分类11从已知的六个病人数据中,我们可以得到以下几个数据:P(打喷嚏|感冒)=2/3=0.66,P(建筑工人|感冒)=1/3=0.33,P(感冒)=3/6=0.5,P(打喷嚏)=3/6=0.5,

5、P(建筑工人)=2/6=0.33根据贝叶斯公式有:P(感冒|打喷嚏*建筑工人)=P(打喷嚏*建筑工人|感冒)*P(感冒)/P(打喷嚏*建筑工人)在这个实际案例中,病人的症状和职业显然是独立的,因此:P(打喷嚏*建筑工人)=P(打喷嚏)*P(建筑工人),因此:P(感冒|打喷嚏*建筑工人)=P(打喷嚏|感冒)*P(建筑工人|感冒)*P(感冒)/P(打喷嚏)*P(建筑工人)可以得到:P(感冒|打喷嚏*建筑工人)=0.66*0.33*0.5/(0.5*0.33)=0.66 121.3 1.3 朴素贝叶斯分类特点朴素贝叶斯分类特点12朴素贝叶斯分类器理论基础明确且简单,容易用代码实现,适用性广,具体来说

6、具有以下一些特点:主要优点:拥有稳定的分类效率。对小规模的数据表现很好,能处理多分类任务,适合增量式训练,尤其是数据量超出内存时,可以分批进行增量训练。对缺失数据不太敏感,算法也比较简单,常用于文本分类。131.3 1.3 朴素贝叶斯分类特点朴素贝叶斯分类特点13主要缺点:理论上,朴素贝叶斯模型与其他分类方法相比具有最小的误差率。但实际上并非总是如此。因为朴素贝叶斯模型在给定输出类别的情况下,会自动假设属性之间相互独立,但这个假设在实际应用中往往是不成立的,在属性个数比较多或者属性之间相关性较大时,这会造成分类效果不好。而在属性相关性较小时,朴素贝叶斯性能最为良好。对于这一点,有半朴素贝叶斯之

7、类的算法能通过考虑部分关联性进行算法改进。需要知道先验概率,且先验概率很多时候取决于假设。假设的模型可以有很多种,因此在某些时候由于假设的先验模型不够准确,可能导致预测效果不佳。因为是通过先验的概率和数据来决定后验的概率,再用后验的概率决定分类,所以分类决策将存在一定的错误率。对输入数据的表达形式很敏感。求是 明德 卓越案例:社区留言板文本分类二 152.1 2.1 案例介绍案例介绍15 对此案例中的留言建立两个类别:侮辱类和非侮辱类,分别用 1和 0 来表示。在文本分类问题中:(1)样本为整个文档(2)样本特征由文档的某些元素构成(3)需要根据特征来判断样本所属分类 在针对文档进行特征提取的

8、时候,通常有两种表示特征的方法,分别是词集模型(set-of-words model)和词袋模型(bag-of-words model)。162.2 2.2 数据准备数据准备16 1.实验样本数据创建def loadDataSet():return:return:单词列表postingList,所属类别classVec postingList=my,dog,has,flea,problem,help,please,maybe,not,take,him,to,dog,park,stupid,my,dalmation,is,so,cute,I,love,him,stop,posting,ate,m

9、y,steak,how,to,stop,him,mr,licks,ate,my,steak,how,to,stop,him,quit,buying,worthless,dog,food,stupid classVec=0,1,0,1,0,1#分类标签集合,0表示非侮辱类,1表示侮辱类 return postingList,classVec 172.2 2.2 数据准备数据准备17 2.词条集合创建def createVocabList(dataSet):return:return:所有单词的集合 vocabSet=set()for document in dataSet:vocabSet=vo

10、cabSet|set(document)return list(vocabSet)如图所示代码是将数据中的所有单词不重复得创建一个元素集。182.2 2.2 数据准备数据准备18 3.创建词集def setOfWords2Vec(vocabList,inputSet):“”“:param:param vocabList:已有的单词数据集 :param:param inputSet:输入的需要检测的单词数据列表 :return:return:匹配列表 ”“”returnVec=0*len(vocabList)#创建与已有的单词数据列表等长的向量 for word in inputSet:#将输入

11、的文档单词一一与已有的单词数据集进行比对 if word in vocabList:returnVecvocabList.index(word)=1#在已有的单词列表中存在,找到该单词的索引值,赋值1 else:print(该词:%s不在我的单词列表中%word)return returnVec如下代码所示是将输入的检测数据集与已有的单词集比对,并生成匹配列表 192.2 2.2 数据准备数据准备19 4.创建词袋def bagOfWords2Vec(vocabList,inputSet):“”“:param:param vocabList:已有的单词数据集 :param:param inpu

12、tSet:输入的需要检测的单词数据列表 :return:return:匹配列表 ”“”returnVec=0*len(vocabList)#创建与已有的单词数据列表等长的向量 for word in inputSet:#将输入的单词一一与已有的单词数据集进行比对 if word in vocabList:returnVecvocabList.index(word)+=1#在已有的单词列表中存在,找到该单词的索引值,累加1 else:print(该词:%s不在我的单词列表中%word)return returnVec如图所示代码是将文档中单词出现次数统计出来。202.3 概率计算 训练函数tra

13、inNB(trainMatrix,trainCategory),输入参数分别为文档矩阵和每篇文档类别构成的向量。首先该函数计算文档属于侮辱性言论的(类别为1)的概率,即P(1)。由于只有2个分类,可知非侮辱性言论的概率为:P(0)=1-P(1)。遍历文档判断是否是侮辱性文档是否p1Num和P1Denom分别进行累加处理p0Num和P0Denom分别进行累加处理 212.3 概率计算 计算出在1类别下,每个单词出现的概率p1Vect,用p1Num和p1Denom分别表示侮辱性文件中各词条出现的次数(结果为向量)和所有出现的单词总数(结果为数)。计算出在0类别下,每个单词出现的概率p0Vect,用

14、p0Num和p0Denom分别表示非侮辱性文件中各词条出现的次数(结果为向量)和所有出现的单词总数(结果为数)。计算出侮辱性文件出现的概率pAbusive即侮辱性文档个数除以文档总数。函数返回值:222.4 算法改进1、初始化值修改 利用贝叶斯分类器对文档进行分类时,要计算多个概率的乘积以获得文档属于哪个类别的概率。如果其中一个概率值为0,那么最后乘积也为0,显然这样的结果不正确。为了降低这种影响,可以将所有词出现次数的初始化值设为1,并将分母初始化值设为2。2、数据下溢问题 当计算多个概率的乘积以获得文档属于哪个类别的概率时,由于大部分数据都非常小,所以程序会下溢或者得不出正确答案(四舍五入

15、为0)。针对这种情况,可以采取对乘积取自然对数的方法。通过求对数可以避免下溢出或者浮点数四舍五入导致的错误,且不会有任何损失。232.5 改进后的朴素贝叶斯分类器应用1、创建贝叶斯分类器函数 p1=sum(vec2classify*p1Vec)+log(pClass1)p0=sum(vec2classify*p0Vec)+log(1.0-pClass1)函数classifyNB(vec2classify,p0Vec,p1Vec,pClass1)参数分别为分类向量及函数trainNB()返回的三个结果。函数classifyNB返回值由p1、p0大小关系决定,p1大则返回1,p0大则返回0。242

16、.5 改进后的朴素贝叶斯分类器应用2、创建测试函数 加载数据集创建单词集合创建数据矩阵输出测试结果测试数据测试模型训练数据训练模型求是 明德 卓越案例:旧金山犯罪分类预测三 263.1 案例介绍 对此案例中犯罪报告里面包括日期,描述,星期几,所属警区,处理结果,地址,GPS定位等信息。(1)样本为犯罪记录(2)样本特征由犯罪记录各种元素构成(3)需要根据特征来判断样本所属分类 273.1 数据准备导入数据集数据预处理 283.3 模型实现 朴素贝叶斯分为伯努利型、高斯型、多项式型。伯努利型针对数据符合多元伯努利分布的朴素贝叶斯分类算法。该模型最明显的特点是非常关注每一个特征是否出现而不是出现的次数。多项式型与伯努利型相比,关注的是一个特征出现次数(可类比词集模型和词袋模型)。本案例中的算法使用伯努利型朴素贝叶斯分类器。数据集预处理划分数据集初始化分类器输出测试结果测试数据测试模型训练数据训练模型 29 思考题思考题29思考题 请尝试去统计一下自己身边的朋友的如下信息:身高、体重、穿多大码的鞋子。请至少统计5名男生和5名女生。基于自己统计的数据回答,有一个人,身高165cm,体重55kg

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号