贝叶斯用于文档分类

from numpy import *def loadDataSet():# 词条切分后的文档集合,列表每一行代表一个文档postingList = [['my', 'dog', 'has', 'flea', 'please'],['not', 'take', 'him', 'to', 'dog', 'stupid'],['my', 'is', 'cute', 'love', 'him'],['stop', 'posting', 'stupid', 'worthless', 'garbage'],['my', 'licks', 'my', 'to', 'stop', 'him'],['quit', 'worthless', 'dog', 'stupid']]# 由人工标注的每篇文档的类标签classVec = [0, 1, 0, 1, 0, 1]return postingList, classVec# 统计所有文档中出现的词条列表
def createVocabList(dataSet):# 新建一个存放词条的集合vocabSet = set([])# 遍历文档集合中的每一篇文档for document in dataSet:# 将文档列表转为集合的形式,保证每个词条的唯一性# 然后与vocabSet取并集,向vocabSet中添加没有出现# 的新的词条vocabSet = vocabSet | set(document)# 再将集合转化为列表,便于接下来的处理return list(vocabSet)# 根据词条列表中的词条是否在文档中出现(出现1,未出现0),将文档转化为词条向量
def setOfWords2Vec(vocabSet, inputSet):# 新建一个长度为vocabSet的列表,并且各维度元素初始化为0returnVec = [0] * len(vocabSet)# 遍历文档中的每一个词条for word in inputSet:# 如果词条在词条列表中出现if word in vocabSet:# 通过列表获取当前word的索引(下标)# 将词条向量中的对应下标的项由0改为1returnVec[vocabSet.index(word)] += 1else:print('the word: %s is not in my vocabulary! ' % 'word')# 返回inputet转化后的词条向量return returnVec# 训练算法,从词向量计算概率p(w0|ci)...及p(ci)
# @trainMatrix:由每篇文档的词条向量组成的文档矩阵
# @trainCategory:每篇文档的类标签组成的向量
def trainNB0(trainMatrix, trainCategory):# 获取文档矩阵中文档的数目numTrainDocs = len(trainMatrix)  # 6# 获取词条向量的长度numWords = len(trainMatrix[0])  # 19# 所有文档中属于类1所占的比例p(c=1)pAbusive = sum(trainCategory) / float(numTrainDocs)  # 3/6=0.5,先验# 创建一个长度为词条向量等长的列表p0Num = zeros(numWords)p1Num = zeros(numWords)p0Denom = 0.0p1Denom = 0.0# 遍历每一篇文档的词条向量for i in range(numTrainDocs):# 如果该词条向量对应的标签为1if trainCategory[i] == 1:# 统计所有类别为1的词条向量中各个词条出现的次数p1Num += trainMatrix[i]# 统计类别为1的词条向量中出现的所有词条的总数# 即统计类1所有文档中出现单词的数目p1Denom += sum(trainMatrix[i])else:# 统计所有类别为0的词条向量中各个词条出现的次数p0Num += trainMatrix[i]# 统计类别为0的词条向量中出现的所有词条的总数# 即统计类0所有文档中出现单词的数目p0Denom += sum(trainMatrix[i])# 利用NumPy数组计算p(wi|c1)p1Vect = p1Num / p1Denom  # 为避免下溢出问题,后面会改为log()# 利用NumPy数组计算p(wi|c0)p0Vect = p0Num / p0Denom  # 为避免下溢出问题,后面会改为log()return p0Vect, p1Vect, pAbusive# 朴素贝叶斯分类函数
# @vec2Classify:待测试分类的词条向量
# @p0Vec:类别0所有文档中各个词条出现的频数p(wi|c0)
# @p0Vec:类别1所有文档中各个词条出现的频数p(wi|c1)
# @pClass1:类别为1的文档占文档总数比例
def classifyNB(vec2Classify, p0Vec, p1Vec, pClass1):# 根据朴素贝叶斯分类函数分别计算待分类文档属于类1和类0的概率print(vec2Classify)p1 = sum(vec2Classify * p1Vec) + log(pClass1)p0 = sum(vec2Classify * p0Vec) + log(1.0 - pClass1)if p1 > p0:return 1else:return 0# 分类测试整体函数
# 由数据集获取文档矩阵和类标签向量
allfile, fileClasses = loadDataSet()
# 统计所有文档中出现的词条,存入词条列表
VocabSet = createVocabList(allfile)
# 创建新的列表
trainMat = []
for singlefile in allfile:# 将每篇文档利用words2Vec函数转为词条向量,存入文档矩阵中trainMat.append(setOfWords2Vec(VocabSet, singlefile))# 将文档矩阵和类标签向量转为NumPy的数组形式,方便接下来的概率计算
# 调用训练函数,得到相应概率值
p0V, p1V, pAb = trainNB0(array(trainMat), array(fileClasses))
# 测试文档
testEntry = ['love', 'my', 'cute']
# 将测试文档转为词条向量,并转为NumPy数组的形式
thisDoc = array(setOfWords2Vec(VocabSet, testEntry))
# 利用贝叶斯分类函数对测试文档进行分类并打印
print(testEntry, 'classified as:', classifyNB(thisDoc, p0V, p1V, pAb))
# 第二个测试文档
testEntry1 = ['stupid', 'garbage']
# 同样转为词条向量,并转为NumPy数组的形式
thisDoc1 = array(setOfWords2Vec(VocabSet, testEntry1))
print(testEntry1, 'classified as:', classifyNB(thisDoc1, p0V, p1V, pAb))

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/491292.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用pt-heartbeat检测主从复制延迟

不要用SECONDS_BEHIND_MASTER来衡量MYSQL主备的延迟时间,原因如下: A:备库Seconds_behand_master值是通过将服务器当前的时间戳与二进制日志中的事件的时间戳对比得到的,所以只有在执行事件时才能报告延迟 B:如果备库复…

麦肯锡报告摘译:未来成功城市的14个特征

来源:TOP产业办公研究院【前言】:本文摘译自麦肯锡发布的一份研究报告。报告来源:McKinsey&Company Report: Thriving amid turbulence: Imagining the cities of the future. Authored by Jonathan Woetzel , Vineet Rajadhyaksha , Joe…

编程关键词介绍...

编程关键词介绍: gcc是GUN compiler Collection (GUN编译器套件),也可以简单理解为编译器,他可以编译多种语言。 GNU是基于Unix开发设计,并且是与Unix兼容的操作系统,该项目由Richard Stallman在1983年创建&#xff…

MATLAB编辑GUI界面

在命令窗口输入:guide 即可进入编辑 若要在GUI界面的一个面板上显示程序中随意给定的字符: 首先创建一个“可编辑文本”(位于左侧工具栏): 双击该面板,弹出该面板的工具栏,设置“string”&am…

单个神经元不可靠!这项新研究推翻以往认知,感知的最大限制在于解码过程...

来源:凹非寺“单个神经元不可靠!”一项关于神经元的研究,让众人看嗨了。这项研究通过在小鼠身上做实验,先展示了神经元“不靠谱”的一面:单个神经元两次对相同视觉刺激的反应,竟然是不一样的。对于神经元的…

(转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在

问题描述:在用vs生成MVC时若使用Internet应用程序为模版,项目建好后重新编译下无法通过,弹出错误: 解决方案:问题出来后,询问了身边很多人都是一头雾水,于是乎各种谷歌和百度,还好功…

QT学习笔记(四):Qt5+MSVC编译 中文字符显示乱码问题解决

QT学习笔记(四):Qt5MSVC编译 中文字符显示乱码问题解决问题:1、解决方法一:2、解决方法二:3、解决方法三:4、解决方法四:结果显示:Qt5MSVC编译 中文字符显示乱码。 现在为…

github单独下载某个文件或文件夹

首先下载tortoiseSVN,安装好之后打开github项目的地址,例如https://github.com/rbgirshick/fast-rcnn 单独下载某个文件夹: 如果只需要下载tools这个文件夹, 点进这个文件夹,复制该页面的网址得到https://github.com/…

技术架构大迁徙时代来临,10个关键点读懂数字化转型

来源:THINKTANK新智囊2月,在旧金山举办的IBM Think 2019大会上,IBM CEO、总裁及董事长Ginni Rometty提出当前正在进入数字化重塑2.0阶段(Digital Reinvention, Chapter II):数字化重塑的第二篇章&#xff0…

QT学习笔记(五):Qt5的8种标准对话框示例

QT学习笔记(五):Qt5的8种标准对话框示例前言实例展示1.颜色对话框2.文件对话框3.字体对话框4.输入对话框5.消息对框6.进度对话框7.错误信息对话框8.向导对话框.前言 QT 提供了常用的对话框类型,他们全部继承自QDialog类&#xff…

桌面SVN检出这一选项消失

进入‪C:\Users\“你的计算机名”\Desktop桌面 这个文件夹,找到隐藏文件夹“.svn”,删除这个隐藏文件夹就OK了

在连续发布版本的情况下 如何做好测试?

在连续发布版本的情况下 如何做好测试?1、跟项目经理协商,确定每一个版本的测试重点。比如,只进行基本功能验证,或者是冒烟测试,挑选重要的功能的测试用例,每次只执行这些。比如,只进行主要流程…

张亚勤、刘慈欣、周鸿祎、王飞跃新书推荐,《崛起的超级智能:互联网大脑如何影响科技未来》...

《崛起的超级智能:互联网大脑如何影响科技未来》2019年7月由中信出版社出版,前沿科技趋势研究专家,计算机博士刘锋著。张亚勤、刘慈欣、周鸿祎、王飞跃、约翰翰兹推荐!吕乃基、石勇、吕本富做序。《崛起的超级智能:互联…

QT学习笔记(六):Qt5主窗口框架示例

QT学习笔记&#xff08;五&#xff09;&#xff1a;Qt5主窗口框架代码示例 一、添加编辑菜单&#xff1a;并在下拉菜单和工具栏中添加“打开文件”动作菜单 #include <QToolButton> #include <QSpinBox> #include <QTextEdit> #include <QMdiSubWindow&…

Pytorch 为什么每一轮batch需要设置optimizer.zero_grad

根据pytorch中的backward()函数的计算&#xff0c;当网络参量进行反馈时&#xff0c;梯度是被积累的而不是被替换掉&#xff1b;但是在每一个batch时毫无疑问并不需要将两个batch的梯度混合起来累积&#xff0c;因此这里就需要每个batch设置一遍zero_grad 了。 其实这里还可以…

ARM与RISC-V之争,后起之秀的优势在哪儿?

来源&#xff1a;朗锐智科从2010年夏天开始&#xff0c;伯克利研究团队大约花了四年的时间&#xff0c;设计和开发了一套完整的新的指令集。这个新的指令集叫做RISC-V&#xff0c;指令集从2014年正式发布之初就受到多方质疑&#xff0c;到2017年印度政府表示将大力资助基于RISC…

QT学习笔记(六):QString::arg()函数用法小结

QT学习笔记&#xff08;五&#xff09;&#xff1a;Qt5的QString的arg用法 在QT的QString中&#xff0c;arg方法类似于C中的printf中使用的格式输出符&#xff08;只是有点类似&#xff09;。 在QT5的帮助文档中&#xff0c;可以看出以下几点&#xff1a; 使用arg(str1, str2,…

RuntimeError: DataLoader worker (pid(s) 13512, 280, 21040) exited unexpectedly

pytorch出现这个错误&#xff0c;是因为正在运行的主程序缺少 if __name__ __main__: 在运行的主程序代码之前加上这一句

第三周总结

在第三周的学习中&#xff0c;我们主要学习了循环语句&#xff08;while&#xff0c;do/while,for循环&#xff09;&#xff0c;数组&#xff0c;方法。而重点就在for循环和方法。而对于for循环我要做的就是多练&#xff0c;深入了。但对于方法这一块&#xff0c;我连有时候该怎…