




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
朴素贝叶斯优点:在数据较少的情况下仍然有效,可以处理多类别问题缺点:对于输入数据的准备方式较为敏感适用数据类型:标称型数据贝叶斯准则:使用朴素贝叶斯进行文档分类朴素贝叶斯的一般过程(1)收集数据:可以使用任何方法。本文使用RSS源(2)准备数据:需要数值型或者布尔型数据(3)分析数据:有大量特征时,绘制特征作用不大,此时使用直方图效果更好(4)训练算法:计算不同的独立特征的条件概率(5)测试算法:计算错误率(6)使用算法:一个常见的朴素贝叶斯应用是文档分类。可以在任意的分类场景中使用朴素贝叶斯分类器,不一定非要是文本。准备数据:从文本中构建词向量摘自机器学习实战。my,dog,has,flea,problems,help,please, 0 maybe,not,take,him,to,dog,park,stupid, 1 my,dalmation,is,so,cute,I,love,him, 0 stop,posting,stupid,worthless,garbage, 1 mr,licks,ate,my,steak,how,to,stop,him, 0quit,buying,worthless,dog,food,stupid 1以上是六句话,标记是0句子的表示正常句,标记是1句子的表示为粗口。我们通过分析每个句子中的每个词,在粗口句或是正常句出现的概率,可以找出那些词是粗口。在bayes.py文件中添加如下代码:pythonview plaincopy1. #coding=utf-82. 3. defloadDataSet():4. postingList=my,dog,has,flea,problems,help,please,5. maybe,not,take,him,to,dog,park,stupid,6. my,dalmation,is,so,cute,I,love,him,7. stop,posting,stupid,worthless,garbage,8. mr,licks,ate,my,steak,how,to,stop,him,9. quit,buying,worthless,dog,food,stupid10. classVec=0,1,0,1,0,1#1代表侮辱性文字,0代表正常言论11. returnpostingList,classVec12. 13. defcreateVocabList(dataSet):14. vocabSet=set()15. fordocumentindataSet:16. vocabSet=vocabSet|set(document)17. returnlist(vocabSet)18. 19. defsetOfWords2Vec(vocabList,inputSet):20. returnVec=0*len(vocabList)21. forwordininputSet:22. ifwordinvocabList:23. returnVecvocabList.index(word)=124. else:25. printtheword:%sisnotinmyVocabulary!%word26. returnreturnVec运行结果: 训练算法:从词向量计算概率pythonview plaincopy1. #朴素贝叶斯分类器训练函数2. #trainMatrix:文档矩阵,trainCategory:由每篇文档类别标签所构成的向量3. deftrainNB0(trainMatrix,trainCategory):4. numTrainDocs=len(trainMatrix)5. numWords=len(trainMatrix0)6. pAbusive=sum(trainCategory)/float(numTrainDocs)7. p0Num=zeros(numWords);8. p1Num=zeros(numWords);9. p0Denom=0.0;10. p1Denom=0.0;11. foriinrange(numTrainDocs):12. iftrainCategoryi=1:13. p1Num+=trainMatrixi14. p1Denom+=sum(trainMatrixi)15. else:16. p0Num+=trainMatrixi17. p0Denom+=sum(trainMatrixi)18. p1Vect=p1Num/p1Denom19. p0Vect=p0Num/p1Denom20. returnp0Vect,p1Vect,pAbusive运行结果: 测试算法:根据现实情况修改分类器上一节中的trainNB0函数中修改几处: p0Num=ones(numWords); p1Num=ones(numWords); p0Denom=2.0; p1Denom=2.0; p1Vect=log(p1Num/p1Denom) p0Vect=log(p0Num/p1Denom)pythonview plaincopy1. #朴素贝叶斯分类器训练函数2. #trainMatrix:文档矩阵,trainCategory:由每篇文档类别标签所构成的向量3. deftrainNB0(trainMatrix,trainCategory):4. numTrainDocs=len(trainMatrix)5. numWords=len(trainMatrix0)6. pAbusive=sum(trainCategory)/float(numTrainDocs)7. p0Num=ones(numWords);8. p1Num=ones(numWords);9. p0Denom=2.0;10. p1Denom=2.0;11. foriinrange(numTrainDocs):12. iftrainCategoryi=1:13. p1Num+=trainMatrixi14. p1Denom+=sum(trainMatrixi)15. else:16. p0Num+=trainMatrixi17. p0Denom+=sum(trainMatrixi)18. p1Vect=log(p1Num/p1Denom)19. p0Vect=log(p0Num/p1Denom)20. returnp0Vect,p1Vect,pAbusive21. 22. #朴素贝叶斯分类函数23. defclassifyNB(vec2Classify,p0Vec,p1Vec,pClass1):24. p1=sum(vec2Classify*p1Vec)+log(pClass1)25. p0=sum(vec2Classify*p0Vec)+log(1.0-pClass1)26. ifp1p0:27. return128. else:29. return030. 31. deftestingNB():32. listOPosts,listClasses=loadDataSet()33. myVocabList=createVocabList(listOPosts)34. trainMat=35. forpostinDocinlistOPosts:36. trainMat.append(setOfWords2Vec(myVocabList,postinDoc)37. 38. p0V,p1V,pAb=trainNB0(array(trainMat),array(listClasses)39. 40. testEntry=love,my,dalmation41. thisDoc=array(setOfWords2Vec(myVocabList,testEntry)42. printtestEntry,classifiedas:,classifyNB(thisDoc,p0V,p1V,pAb)43. 44. testEntry=stupid,garbage45. thisDoc=array(setOfWords2Vec(myVocabList,testEntry)46. printtestEntry,classifiedas:,classifyNB(thisDoc,p0V,p1V,pAb)运行结果: 准备数据:文档词袋模型词集模型(set-of-wordsmodel):每个词是否出现,每个词只能出现一次词袋模型(bag-of-wordsmodel):一个词可以出现不止一次pythonview plaincopy1. #朴素贝叶斯词袋模型2. defbagOfWords2VecMN(vocabList,inputSet):3. returnVec=0*len(vocabList)4. forwordininputSet:5. ifwordinvocabList:6. returnVecvocabList.index(word)+=17. returnreturnVec示例:使用朴素贝叶斯过滤垃圾邮件(1)收集数据:提供文本文件(2)准备数据:将文本文件解析成词条向量(3)分析数据:检查词条确保解析的正确性(4)训练算法:使用我们之前建立的trainNB0()函数(5)测试算法:使用classifyNB(),并且构建一个新的测试函数来计算文档集的错误率(6)使用算法:构建一个完整的程序对一组文档进行分类,将错分的文档输出到屏幕上准备数据:切分文本使用正则表达式切分句子 测试算法:使用朴素贝叶斯进行交叉验证pythonview plaincopy1. #该函数接受一个大写字符的字串,将其解析为字符串列表2. #该函数去掉少于两个字符的字符串,并将所有字符串转换为小写3. deftextParse(bigString):4. importre5. listOfTokens=re.split(rW*,bigString)6. returntok.lower()fortokinlistOfTokensiflen(tok)27. 8. #完整的垃圾邮件测试函数9. defspamTest():10. docList=11. classList=12. fullText=13. #导入并解析文本文件14. foriinrange(1,26):15. wordList=textParse(open(email/spam/%d.txt%i).read()16. docList.append(wordList)17. fullText.extend(wordList)18. classList.append(1)19. 20. wordList=textParse(open(email/ham/%d.txt%i).read()21. docList.append(wordList)22. fullText.extend(wordList)23. classList.append(0)24. 25. vocabList=createVocabList(docList)26. trainingSet=range(50)27. testSet=28. #随机构建训练集29. foriinrange(10):30. randIndex=int(random.uniform(0,len(trainingSet)31. testSet.append(trainingSetrandIndex)32. del(trainingSetrandIndex)33. 34. trainMat=35. trainClasses=36. fordocIndexintrainingSet:37. trainMat.append(setOfWords2Vec(vocabList,docListdocIndex)38. trainClasses.append(classListdocIndex)39. 40. p0V,p1V,pSpam=trainNB0(array(trainMat),array(trainClasses)41. errorCount=042. #对测试集分类43. fordocIndexintestSet:44. wordV
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 虚拟现实试衣间创新创业项目商业计划书
- 物联网创新创业项目商业计划书
- 可可制品车间创新创业项目商业计划书
- 2025年甘肃省酒泉老年大学招聘教师考试笔试试题(含答案)
- 制作蔬菜汁与果汁混合的营养饮料创新创业项目商业计划书
- 淡水藻类养殖环保技术创新创业项目商业计划书
- 科技创新产品展示与体验直播创新创业项目商业计划书
- 乡村马拉松赛道创新创业项目商业计划书
- 输卵管结扎操作步骤
- 现场急救知识培训主持词课件
- 水果和蔬菜深加工技术项目可行性研究报告
- 2025新译林版英语八上单词默写表(先鸟版)
- 2025年执业医师考试临床技能试题及答案
- 应急管理局职能介绍
- 2025-2030全球及中国ITSM工具行业市场现状供需分析及市场深度研究发展前景及规划可行性分析研究报告
- 航运基础知识考试题库单选题100道及答案
- 大学生安全教育课件
- 名创优品购销合同协议
- 委托垫资解押及房产买卖过户和二手房抵押贷款协议书
- 2025年统编版小升初语文阅读专项训练:点面结合(含答案)
- T-ZHHX 004-2024 粉苞酸脚杆盆花生产技术规范
评论
0/150
提交评论