科技制作朴素贝叶斯文本分类系统_第1页
科技制作朴素贝叶斯文本分类系统_第2页
科技制作朴素贝叶斯文本分类系统_第3页
科技制作朴素贝叶斯文本分类系统_第4页
科技制作朴素贝叶斯文本分类系统_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、龙原名孑伴故之冬科技制作课程设计报告方案名称基于朴素贝叶斯算法的文本分类系统学 院网络与信息安全学院专 业 网络工程学生姓名*15180*目录 TOC o 1-5 h z HYPERLINK l bookmark4 o Current Document 第一章 方案背景与意义 1 HYPERLINK l bookmark6 o Current Document 方案背景1 HYPERLINK l bookmark10 o Current Document 方案意义2 HYPERLINK l bookmark12 o Current Document 第二章方案原理2 HYPERLINK l b

2、ookmark14 o Current Document 数学原理2 HYPERLINK l bookmark16 o Current Document 朴素贝叶斯算法原理2 HYPERLINK l bookmark18 o Current Document 改进方法3 HYPERLINK l bookmark20 o Current Document 第三章方案基本流程4 HYPERLINK l bookmark22 o Current Document 文本分类的流程4 HYPERLINK l bookmark24 o Current Document 数据清洗4 HYPERLINK l

3、bookmark26 o Current Document 中文切词4 HYPERLINK l bookmark28 o Current Document 删除停用词4 HYPERLINK l bookmark30 o Current Document 文本向量化表小 5 HYPERLINK l bookmark42 o Current Document 文本特征选择 6 HYPERLINK l bookmark44 o Current Document 特征权重计算 6 HYPERLINK l bookmark46 o Current Document 构造分类器模型 7 HYPERLINK

4、 l bookmark48 o Current Document 分类器效果测试7 HYPERLINK l bookmark50 o Current Document 第四章方案实现过程及结果8 HYPERLINK l bookmark52 o Current Document 数据集选择8 HYPERLINK l bookmark54 o Current Document 中文分词9 HYPERLINK l bookmark56 o Current Document 数据集变量表示9 HYPERLINK l bookmark58 o Current Document 结构化表示-向量空间模型

5、 10 HYPERLINK l bookmark60 o Current Document 构建分类器11 HYPERLINK l bookmark62 o Current Document 提升分类器性能12 HYPERLINK l bookmark64 o Current Document 第五章实验总结与收获13 HYPERLINK l bookmark40 o Current Document 附录14第一章方案背景与意义方案背景近现代以来电子信息技术的高速发展以及国家对网络的建设使得越来越多的人可 以接触到互联网,特别是近几年移动互联网的爆发更是使每年产生的数据信息量呈指数 级增长。

6、2004年,全球数据信息总量是 30EB,随后,2005年则达到了 50EB, 2006年 达至IJ了 161EB,到2015年,居然达到了惊人的7900EB,到2020年,将达到44000EB。 信息的存储方法也由过去的纸质存储变为现在的电子信息存储,面对如此海量的信息, 用户如何从海量数据中快速获得目标数据就显得尤为重要。企业将大量数据进行快速精确的分类更有利于获取商业利益。由此诞生了通过算法来自动进行文本分类的方法。全球数据总量-IJVIf1,意味着 先验概率被增强,事件A的发生的可能性变大;如果可能性函数” *乘担魏势厘阿洛现ft连捱始构如闺粕火J*粒*供电控制城佐I图4.1计算机类别

7、下一个文本的分词结果曙身廨魏为嘉善I75 g130175 -TOO-昼分哒露 趣fl曙身廨魏为嘉善I75 g130175 -TOO-昼分哒露 趣fl佛电:第 犍美国泰025 孙75 M125.50 175弘 IdC 10 JOI MO 3t0 捐。 4M、丁一 ,J:,*谴工论z t 美国逐壁轲:魅髓修 殂刑关系.弗. 一改治京体制改革野眄;武衿嬖岩辰& 国泰 型露衣展上/忍惧W即 XO ISO 2X雪 030020400图4.2图4.2军事类文本词云图4.3政治类文本词云数据集变量表示现在为止数据是以一个个txt文本的形式存放在各类别文件夹中,不方便程序使用10因此我们需要将所有的数据表示为

8、变量并保存在一个文件中,这样后续就不用每次都遍历所有文件。我们采用的是 ScikkLearn库中的Bunch数据结构来表示这两个数据集。Bunch相当于Python中的字典,可以将数据一条一条的显示出来。如下图直观表示:fteranivesabcltoncents.artE n_COT IS 5/25 -50 0;25 -50 75 1002&150 175 200 -争时复卬期号:所以军谭兴州 纨一 二5;由心屎刊页号索嚷 .:因此布醵逐思二事? 如J=Fr*h . ,皿中用十.I F- - IF 也 卓:江往,ME :I. g .,J:5UI三其比14川、送链词比2原千期号原刊页号也 文献

9、号刃匾文出处三,但是W器阴疝巷k融,却牌 Td050 1JOO 150200 2SD 3003S0400图4.5 一类文本包含大量无用的词构建分类器构建分类器阶段我使用的朴素贝叶斯分类器,关于朴素贝叶斯算法的原理前文都有论述。MultinomialNB会根据训练集的权重矩阵和标签进行训练,然后根据测试集的权 重矩阵进行预测输出预测标签。将预测后的结果存储在result.csv文件中,并用1表示分类正确,0表示分类错误,部分结果如图 4.6所示。预测出后将预测标签与实际标签 进行对比即可算出精确度、召回率、F值等评估分类器性能的参数。可见第一次分类的 效果并不理想,F值仅为0.910,因此需要对

10、相关参数进行修改,分词的结果和TF-IDF的 阈值等都对分类效果有很大的影响。12文件名实际美机预利类别是杳一隹珅/corpus/iest corojs-Ccmoutef/C19-ConipuierOQDl,cCIS-CompilerCia-ComputsrL,ccrpus/tesL_corp-Computei/C19ConiputerOOOZ.MC19ComputetCl9 com DU 以L/cor pus/ lesLco r d/ J19 -ComDutei/ClS ConiputerOOJ4,(C19ComputerC19-Computer1.corpus/ttsLcofp us_se

11、g/C19 - Compuler/Cl 9- Com pu t-rOD36.txtC19-ComputerCl?Cumputi1.cc r pui. lesLco r dg/ DIS - Cl r 11 p u Le i /Cl 9 - C ui n p u ter 003 8 .LxlC19-CoinpLtt;rC19-Computer1.ccrpus/lesLcor/js_seg/219-CcrnpjteI/C19-ComputerOOL0.:1C19-CompLterCl 9-Computer1.ccrp ji_se-Ccmputer/Cl9- ComputrQQL2.XQ9-Conip

12、utefCl 3-Computer1.corpus/test corp Ji seg/ - Cc mputer/C19- ComnputerOC 14.?xt019-ComputefC19-Computer1/cotpus/tct_corpJ5_seg/C19 Computer/Cl9 Computi:rOCL6.D(t匚 19 Com peterCl3 Cornputcr1.corpustest_conpJj_3tg/C15 Computcr/C19 ComputrOOlO.tCl9 CcmptterCl9 Computer1ycorputest-Corpusjeg/ClQ - Comput

13、er/ClS - Cdmputer0020.txtCl9 ComputerCl9 Computer1.ccrpu&-test_corpjs_seg/ 219 Ccmputmi7C.g-tcmpiJtmr002ZEtCIS CcmpLterC19- Computer1.ccrpu=/ te5t corrj5jeQ/C19 Ccmputer/C 19 - Cemput5rOQ24Cl 9-ComputerCig-Compute1.ccrpus test corojs seg/ J19-Ccmputer/C19-Cornput5r0026.7XtC19-ComputeFC19-Computer1co

14、rpus/test. co rpg /二总-Comp uter/Cl 9-Conn puterOC 2S.o(tC19 -ComputetC19-Computer1corpus. te&t_corpJi_seq/C19-Computer/C19= ComputerOC3D.(tCl S - Cem p uterC13-Computer1.ccrpu邑, teLcomhrg/219-Computer/Cl-CoiTipu恰 1roe32一Cl 9-ComputerC19-Computer1.ccrputest.corpj&_seg/219-Ccmputer/C 19-CcmputrOO3L乂Cl

15、-ComputerC13-Computer./ccypus/te5t_COpu suseg/d-Comp uter/Cl 9 - Corn puterC036-MCl 9-ComputerCl J-Computer17 corpug/tegt_r(Mpu_seg/Cl& Computer/Cl 9 - Camput?rOO38 TxtC19-ComputerCignSmpute1图4.6部分分类结果截图提升分类器性能第一次预测结果的F1值为0.91,准确率为0.921,召回率为0.917,我们可以尝试 通过调试参数进一步提升分类效果。影响准确率的参数主要有分类器部分的alpha值以及tf-id

16、f模型构建阶段的max_df或min_df,分词效果的好坏对结果的影响也很大,因此如果对结果要求很高的话尽量选择自己构建分词库。通常情况下alpha值设置越小,迭代次数越多,精确率越高,通过实验比较,当alpha值设为0.0005, max_df设为0.8时, 分类器表现效果最好,准确率达到 0.932,召回率达到0.931, F值为0.930,表现效果 相比最初要好一些。在TidfVectorizer中配置的n-gram也会提高分类器效果,ngram-range 表示词组切分的长度范围,通过设置ngram-range=(1,2而使得分类效果进一步提升,设置n-gram会使模型参数变得很大,分

17、类速度也会降低,但是会提升一定的准确率。准 确率为0.943,召回率为0.942, F1值为0.939。显然,此时分类器的表现效果良好,分 类结果报告如表4.1所示。除此之外,如果还需要提升分类效果可以自定义分词库。由 结果可以观察出当某一类文本数量较少时,这一类的召回率就偏低,从而导致 F1值偏 低。13表4.1朴素贝叶斯算法分类报告1.precision recall f1-score support2.3.C19-Computer0.9920.9720.98213574.C23-Mine1.0000.2650.419345.C29-Transport0.9230.6100.735596.

18、C31-Enviornment0.9850.9470.96612187.C32-Agriculture0.9130.9580.93510228.C34-Economy0.9020.9490.92516019.C35-Law0.8390.5000.6275210.C36-Medical0.9440.3210.4795311.C37-Military0.8600.5660.6837612.C38-Politics0.9130.9580.935102613.C39-Sports0.9580.9700.964125414.15.avg / total 0.9430.9420.9397752第五章实验总

19、结与收获这次科技制作主要研究了利用朴素贝叶斯算法对中文进行分类,并且对于英文文本 分类和中文文本分类的区别进行了相关介绍。首先对朴素贝叶斯公式进行了推导,阐述 了利用朴素贝叶斯算法进行文本分类的数学原理。 接着第三章详细研究了文本分类的各 个关键技术过程,包括分词方法和向量空间模型以及特征权重的计算方法等。在深入研 究了朴素贝叶斯算法原理和相关的文本分类技术后,用Python语言对复旦大学数据集进行了实验操作,并且对实验进行改进。最终对实验结果进行分析对比,表明在使用朴 素贝叶斯算法进行文本分类时,优点是不仅算法简单,计算复杂度小,而且可以达到很 好的分类效果,缺点是文本必须要满足条件独立性假

20、设,这在实际中是不成立的。本次完成的文本分类系统可以对中文文本进行分类, 可以应用在很多有需求的领域, 因此本次的实验具有很好的实际意义。14附录文本实验部分所用主要代码及结果如下:1.导入训练集和测试集import sys14附录文本实验部分所用主要代码及结果如下:1.导入训练集和测试集import sysimport osdiri = ./corpus/train_corpusdir2 = ./corpus/test_corpusdef getNum(dir):dirs = os.listdir(dir)num = 0for item in dirs:num = num+len(os.li

21、stdir(dir+ /+item)return numprint (训练集文档数:,getNum(dir1)print (测试集文档数:,getNum(dir2)13训练集文档数:773814 测试集文档数:77522.中文分词阶段1.去掉一些停用词、数字、特殊符号def rm_tokens(words, stopword_path):words_list = list(words)stwlist = readfile(stopword_path).decode().splitlines()for i in range(words_list._len_():-1:word = words_l

22、istiif len(word) = 1: #去除单个字符words_list.pop(i)elif word = : # 去除空字符words_list.pop(i)elif word in stwlist: # 去除停用词words_list.pop(i)return words_listdef corpus_segment(corpus_path,seg_path,stopword_path):import recatelist = os.listdir(corpus_path)print(分词中.”)for mydir in catelist:class_path = corpus_p

23、ath+mydir+/seg_dir = seg_path+mydir+/if not os.path.exists(seg_dir):15os.makedirs(seg_dir)file_list = os.listdir(class_path)for file_name in file_list:file_path = class_path+file_name #txt 文件的路径content = readfile(file_path)ri = a-zA-Z0-9 !#$%&()*+,-./:; ; ? () , =。 ?、 ?”“ ! 八|+content=re.sub(r1, , c

24、ontent.decode()content = content.replace(rn , ).strip() #删除换行content_seg = jieba.cut(content)content_seg = rm_tokens(content_seg,stopword_path)savefile(seg_dir+file_name, .join(content_seg).encode(utf-8)print (分词结束)建Bunch对象结构import picklefrom sklearn.datasets.baseimport Bunchdef corpus2Bunch(wordbag

25、_path,seg_path):catelist = os.listdir(seg_path)print(构建文本对象开始.)bunch = Bunch(target_name = ,label = ,filenames = ,contents =)bunch.target_name.extend(catelist)for mydir in catelist:class_path = seg_path + mydir + /file_list = os.listdir(class_path)for file_name in file_list:fullname = class_path + f

26、ile_namebunch.label.append(mydir)bunch.filenames.append(fullname)bunch.contents.append(readfile(fullname)with open(wordbag_path, wb) as file_obj:pickle.dump(bunch,file_obj)print (构建文本对象结束)4.构建TF-IDF模型#向量空间模型from sklearn.feature_extraction.text import TfidfVectorizerdef vector_space(stopword_path,bun

27、ch_path,space_path,train_tfidf_path = None):stpwrdlst = readfile(stopword_path).splitlines()bunch = readbunchobj(bunch_path)tfidfspace = Bunch(target_name =bunch.target_name,label = bunch.label,filenames = bunch.filenames,tdm =,vocab ulary=)16if train_tfidf_path is not None:trainbunch = readbunchobj(train_tfidf_path)tfidfspace.vocabulary = trainbunch.vocabularyvectorizer = TfidfVectorizer(ngram_range=(1,2),stop_words = stpwrdlst,sublinear_tf=True,max_df=0.5,vocabulary = trainbunch.vocabulary)tfi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论