版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目录1 .Project内容22 .贝叶斯分类器理论介绍23贝叶斯分类器训练的MapReduce算法设计34源代码清单75 .数据集说明116 .程序运行说明.117 .实验结果分析158源代码清单15Bayes分类器的MapReduce实现I.Project内容1):用MapReduce算法实现贝叶斯分类器的训练过程,并输出训练模型;2):用输出的模型对测试集文档进行分类测试。测试过程可基于单机Java程序,也可以是MapReduce程序。输出每个测试文档的分类结果;3):利用测试文档的真实类别,计算分类模型的Precision,Recall和F1值。2.贝叶斯分类器理论介绍朴素贝叶斯法是基
2、于贝叶斯定理和特征条件独立假设的分类方法。对于给定的训练数据集,首先基于特征条件独立的假设学习输入和输出的联合概率分布;然后基于此模型,对于给定的输入X,利用贝叶斯定理求出后验概率最大的输出y。贝叶斯定理:*表示事件B已经发生的前提下,事件A发生的概率,叫做事件B发生下事件A的条件概率。其基本求解公式为:贝叶斯定理之所以有用,是因为我们在生活中经常遇到这种情况:我们可以很容易直接得出P(A|B),P(B|A)则很难直接得出,但我们更关心P(B|A),贝叶斯定理就为我们打通从P(A|B)获彳导P(B|A)的道路。下面不加证明地直接给出贝叶斯定理:朴素贝叶斯分类:1、设立=町非功,马“为一个待分类
3、项,而每个a为x的一个特征属性。2、有类别集合。=皿,的一、加。3、计算产311):尸3:尸(斯1吐4、如果P(除=(讯初P(重以外则X属于计算第3步中的条件概率方法:1)、找到一个已知分类的待分类项集合,这个集合叫做训练样本集。2)、统计得到在各类别下各个特征属性的条件概率估计。3)、如果各个特征属性是条件独立的,则根据贝叶斯定理有如下推导:小=上警因为分母对于所有类别为常数,因为我们只要将分子最大化皆可。又因为各特征属性是条件独立的,所以有:m用皿阳(加=夕驻)以闻玳)P(%I词&)=尸(%jJJp(质)j=i3贝叶斯分类器训练的MapReduce算法设计3.1 计算每个类内每个词
4、出现的次数fcAPJ%llText.IntWritdble,轲人乂忏fOMapF<c2,n2>cc3Pn3>二"Recude三天:1Mgmt<TextIntWritable/Text,lntWritable><c2r2>Combine<TextPIntWritjble,<TextIntWritable,TextflntWritable>context作业的输出会产生2个文件(取决于Reduce由Text,lntWritable>住0,每个文件里一行的格式为J类名单词出现次教cntext输入的文本文件为训练集内的文本,格
5、式为.txt。Map的key表示的类名和单词名字的结合,具体形式为Text类型的(classnamen"t"+wordnanje,Value表示计数,类型为IntWritable。因为每次读取一行只有一个单词,所以Map里的Value设为值1。Map输出里面的key,Value和Map输入的含义一样。Reduce输出的key的含义和Map输入的key含义一样,Value表示单词i出现在类别j的总数。3.2 计算每个类内单词的总数<LongWritable,T。辕t,«11<c1J><21>vcZJaSC工1><c3j1&g
6、t;context作业的输出会产生多个文件(取决于Redus俅J个数),每个文件里T刑格式为Combine<LongWritdbleText,Text.lntWntable>TextIntWritable,Text,lntWritab(e>cd,n1><c2,n2><c3,n3>“IriiijTFT”j输入的文本文件为3.2章节中的输出文件。Map输入的key为hadoop读入文件的index。Value表示的类名和单词名字的结合,具体形式为Text类型的(classname+“t"+wordname),Value表示计数,类型为Int
7、Writable。Map输出的Key为类名,Value为类内的单词计数。Reduce输出的key表示类名,Value表示相应类内的单词总数。3.3 计算先验概率<7extHintWritable,TextjlntWritable>Recu-de。相11卜cTextJntWritable,ComlDinfi作业的输出会产生多个文件(取决于Reduc巳曲Text.IntWritable个数),每个文件里一行的格式为1r监:m谶统计每个类内文本的总数输入的文本文件为训练集内的文本,格式为.txt。Map输入的key的含义是类名,类型为Text,Value表示计数,类型为IntWritab
8、le。因为每次读取一个文件,所以Map里的Value设为值1。Map输出里面的key,Value和Map输入的含义一样。Reduce输出的key的含义是类名,Value表示的是相应类的总数。3.4 计算条件概率MapI输入文件I<LonaWritablerText><LongWritable,Text,Text,DoubleVWtables51><dJ><c2歪<*1A<ai><d,n1><c2,n2><c3,n3><Text,D0ubleWritabText,DoubleWritabk>
9、;contextRecude*K<d,2><c殆<C32>Cflribine作业的输出会产生多个文件(取决于ReducerM个数),每个文件里一行的格式为类名单同条1牛概率entort输入的文本文件为3.2章节中的输出文件。Map输入的key为hadoop读入文件的index。Value表示的类名和单词名字的结合,具体形式为Text类型的(classname+“t"+wordname),Value表示计数,类型为IntWritable。Map输出的Key表示的类名和单词名字的结合,具体形式为Text类型的(classname+“t"+wordn
10、ame),Value为单词i属于类j的条件概率。Reduce输出的key和Value与Map输出的key,Value的含义一样。3.5预测Map输入文件D<Iext,Text,Text,MapWritable>cdf1><匚2,1><c3r1>context<1111><c2rn2>岛外3>qTextMapWritable.Text,Text>Recude<=<df2><c2,2>>Conbine作业的输出会产生多个文件(取决于Reduce面个数).每个文件里一行的格式为文件标签璐
11、B储果context输入测试集中的文本。Map输入的key表示的文件名和标签名字的结合,具体形式为Text类型的(docname+"t"+label),Value表示当前要预测的文本内容,类型为Text。Map输出的Key和Map输入的key一样,Value为MapWritable类型,里面包含当前文本属于每个类的概率。Reduce输出的key和Map输出的key一样。Value表示预测的类别。4源代码清单1.1 自定义的InputFormat和RecordReader此处的代码是在预测阶段的Map输入:publicbooleannextKeyValue()throwslO
12、Exception,InterruptedException/TODOAuto-generatedmethodstubif(!processed)Pathpath=fileSplit.getPath();/获取文件完整路径StringClassPath=path.toString();System.out.println(ClassPath);Stringstrs=ClassPath.split("/");切割完整路径后的最后一个字符串为文件名Stringdocname=strsstrs.length-1;即该文件所切割完整路径后的倒数第二个字符串为包含此文件的目录名字,属
13、的类名Stringclassname=strsstrs.length-2;将文件名和其所属类名组成成Map输入的keykey.set(newText(docname+"t"+classname);FileSystemfs=path.getFileSystem(conf);FSDataInputStreamfin=fs.open(path);intlen=(int)fileSplit.getLength();bytecontent=newbytelen;读取文件内容,并作为Map的输入ValueIOUtils.readFully(fin,content,0,len);valu
14、e.set(newText(content);fin.close();processed=true;/将是否处理标志设为true,下次调用该方法会返回falsereturntrue;returnfalse;/如果记录处理过,返回false,表示split处理完毕返回自定义的Recoder:.publicRecordReader<Text,Text>createRecordReader(InputSplitsplit,TaskAttemptContextcontext)throwsIOException,InterruptedException/TODOAuto-generatedm
15、ethodstubNBpreRecoderreader=newNBpreRecoder();reader.initialize(split,context);returnreader;其他自定义的InputFormat和RecordReader皆采用此方法。1.2 计算先验概率的Map和ReduceMap不做任何处理,直接输出。publicvoidmap(Textkey,IntWritablevalue,Contextcontext)throwsIOException,InterruptedExceptioncontext.write(key,value);Reduce对属于同一类的文本的个数
16、求和publicvoidreduce(Textkey,Iterable<IntWritable>values,Contextcontext)throwsIOException,InterruptedException/对属于每个类(_ke相同)的文本求和。intsum=0;for(IntWritableval:values)sum+=val.get();context.write(key,newIntWritable(sum);1.3 计算类内每个词出现的次数的Map和Reduce同样的Map不做任何处理,直接输出。Reduce对属于同一个key的value求和。1.4 计算类内词
17、的总数的Map和Reduce输入的是每个类内每个词出现的次数。同样的Map不做任何处理,直接输出Reduce对属于同一个key的value求和。1.5 计算条件概率的Map和Reducepublicvoidmap(LongWritablekey,Textvalue,Contextcontext)throwsIOException,InterruptedExceptionMap<String,Double>classbasePro1=newHashMap<String,Double>();try/获取每个类的基率,即(1/(类内单词总数+类内单词的种类数)classbas
18、ePro1=javaIoUtil.readBase();catch(Exceptione)/TODOAuto-generatedcatchblocke.printStackTrace();Stringstrings=value.toString().split("n");/遍历每行,即为每个词计算相应的条件概率for(Stringstr:strings)Stringstrs=str.split("t");/得到类名+词名的key值Stringkeyname=strs0+"t"+strs1;使用类的基率乘以改词在类内出现的次数,即等于该
19、词属于该类的条件概率Doublepro=(classbasePro1.get(strs0)*(1.0+Integer.parseInt(strs2)*(10000.0);context.write(newText(keyname),newDoubleWritable(pro);Reduce直接输出,不做操作。1.6 预测的Map和Reducepublicvoidmap(Textkey,Textvalue,Contextcontext)throwsIOException,InterruptedExceptionMapWritableres=newMapWritable();Map<Stri
20、ng,Double>mapcountPrior=newHashMap<String,Double>();Hashtable<String,Double>probi=newHashtable<String,Double>();try(/获取条件概率和先验概率mapcountPrior=javaIoUtil.clacuPrior();probi=javaIoUtil.clacuCondi();catch(Exceptione1)/TODOAuto-generatedcatchblocke1.printStackTrace();String口strings=
21、value.toString().split("n");/遍历文本内的每一行for(Stringstr:strings)Stringstrs=str.trim();计算该文本属于每个类的概率for(Map.Entry<String,Double>entry:mapcountPrior.entrySet()if(!res.containsKey(newText(entry.getKey()如果还没有计算过当前文本属于该类,则初始化后验概率为先验概率res.put(newText(entry.getKey(),newDoubleWritable(mapcountPr
22、ior.get(entry.getKey();System.out.println(1111);/获取已经计算过的后验概率,并乘以当前词相应的条件概率DoubleWritableprilocal=(DoubleWritable)res.get(newText(entry.getKey();probi.get("probi:"+(entry.getKey()+""+strs)+probi.get(entry.getKey()+""+strs);如果该词在该类中出现过则乘以相应的条件概率,如果没有出现过,则乘以相应的基率。trydoubl
23、ep=(prilocal.get();prilocal=newDoubleWritable(p*probi.get(entry.getKey()+""+strs);catch(Exceptione)/TODO:handleexceptiondoublep=(prilocal.get();/基率(1/(该类总词数+该类词的种类数)prilocal=newDoubleWritable(p*probi.get(entry.getKey();/更新后验概率res.remove(newText(entry.getKey();res.put(newText(entry.getKey()
24、,prilocal);context.write(key,res);Reduce:publicvoidreduce(Textkey,Iterable<MapWritable>values,Contextcontext)throwsIOException,InterruptedException初始化最大概率和预测的类别doublemaxpri=0.0;Textclassname=newText();for(MapWritableval:values)/遍历预测的文本属于每个类的概率for(Entry<Writable,Writable>entry:val.entrySe
25、t()doublenowkey=(DoubleWritable)entry.getValue().get();Textnowvalue=(Text)entry.getKey();更新预测的最可能类别和相应的概率if(nowkey>maxpri)maxpri=nowkey;classname=nowvalue;context.write(key,classname);5 .数据集说明本次试验选用了两个类别:Country里面的BELG和Industry里面的I010010BELG包含154个文档,其中使用124个作为训练集,30个作为测试集。I01001包含180个文档,其中使用156个作
26、为训练集,36个做测试集。6 .程序运行说明6.1 Map和Reduce任务数说明说明:本文实验的hadoop环境是hadoop2.6的版本。其默认一个块的大小是128M。在一个文件不超过128M的时候,默认为其分配一个块,并使用一个Map任务来执行。1)计算先验概率的job有280个Map任务,1个Reduce任务。因为该job输入280个训练集,且每个大小不超过128M,所以有128个Map任务。2)计算每个类内每个词出现的次数的job有280个Map任务,1个Reduce任务。因为该job输入280个训练集,且每个大小不超过128M,所以有128个Map任务。3)计算每个类内单词总数的j
27、ob有1个Map任务,1个Reduce任务。因为该job输入第二个job的输出文件(总数为1个),且每个大小不超过128M,所以有1个Map任务。4)计算条件概率的job有1个Map任务,1个Reduce任务。因为该job输入第二个job的输出文件(总数为1个),且每个大小不超过128M,所以有1个Map任务。5)预测的job有66个Map任务,1个Reduce任务。因为该job输入66个测试集文本,且每个大小不超过128M,所以有66个Map任务。62基于Web页面的作业监控截图:RImh*CuWJVFSi'faartTirnH包,川惦WTwotMftPflEDUCCTlw.lJ7&
28、gt;erMIT1lr44仙WJ用印UCC14tHwotdw91711nflJMT中谢由皿rihfaJlZffTDwM17Ul4£gWITCCMldiMAFflH?JCE比f"tTlw.B-Det州仃u如06Hiy,flTOrtjQ>171147440UTFrja&faaSuaf专出IEMt1VTldrtN呻H5mThu冷口w3TWOCKKDThy豺Ckn:BUT,1X4tE画ThuATIbtiai7H-4?35WT小IfHOtLtCffiMti.HiEsqThu.QTD±c如HR111FIMsHSSUCCEEDH?-1H3,其中,name为Cond
29、i的job计算每个类内每个词出现的次数。name为allword的job计算每个类内单词的总数。name为CountMain的job计算先验概率。name为PRIOR的job计算条件概率。name为Predic的job进行预测。6.3运行截图(按job顺序截取):eaOxA.ste:1-J?D&doc-p1包e-jartimpr口,告占xnjiszb9C0C19:4O:O«warmuc11.flkziv«-Q=d«L.c*a«T:urn&bi«icolo&diHACive-haciaopiifrary工9sLyearpi
30、azXarK,»,uffxng£>iiiltin-av&cia»a-svh«r«applxca£l«/BB/OUTPVTBaireScore/part-r-0DO0O«txt工srsuccesstrue17/12/0715:40:07IUFOclient.RMProxy:匚QgecmgicoRe与dMUwNanag号ratoas-er/192,168.1,109:803217/12/0719:40:OSWARNmapred.auice.Jch&Siibaj.ter:Uabdoop口cmmaii
31、d-JLiziEapxanparaiiignotperxzznied.lnplenEn:hElo-clml;ez±aceandExecuteyearazpJicat-xaziToolKurjae:Czenedy±lls.17/13/071LH4O2OW17712/071914010617/12/D719i4OiOe125E93:62_001017/12/D7isiio.oe1256593CB2_00-S017/12/D7157*0:08XWEOIMFOIMF©INTOIHFOinput.FxleliiEUtFcntat:!"&!inputpatl
32、ucopXQcesas上后口itapreduce.JobSiibttJLtxcrsniHibcr电工splits2230maprsducc,JobSubnitzcreSbxictingtokensfcrjobsjzb_15trap!.YaznClientInpl:SubnitccdcppliGotionappllcaicnISlEfiDrEducs.Joe:;Thelaxl二口"trackthejob:http:/injaatsi:8Cjob:jQb_i£I2SS9G30£2_0040lS12E6S3£3Dfl2_Cl00Eimr-inqixnutez1
33、7712/0717712/0717/1J/Q717/12/0717/1?/D717/12/D717712/0717712/0717/12/0717/12/0717/12/0717/12/0717/13/0717/l3/s0717/12/0717/13/0717/13/0717/12/D717/1J/D717/12/D713HO51-119:40:2319:0?19;40s3219;40;34923519;40;3619:4053819M0:390孙”19r4OM810:qoyqIQ:司口:3119:40:£315:cg=5315:40:5419::40:5&1U:。19”。:
34、51INFOffiflWddluc芝厂ilofcr;INTOlaapreducsi.JobsINFOjtajireduiGe.Job;TMFGmapr«iuGj.JnrTNFQb口工7ukpJ-gb;TNFGn二口rrdujerJcrt?;TNFQjneprrducPJoi?:I-WFCinepa-ed-iics1PJot1;IWFO岫口1H&dU8.J0i):INTOrdirirwlLiice,Job:TUFCmdpr&du&s.Job2iwrcmreeluce.Jcrta-1INFOjn*pr*du,TWFOMpredqcm,Job:twf(3maprwi
35、unPjab:IMFCnzapTeduea口由1MFCmapTedueeJerti:imrcmap二edca11ncie:工HF心itapreaLice!.Jaesiwrcjtapraciiic«:.jQz:iMt0iJuce0%rut2*Ee*匚e01ru?pareduce01map3<rrdwne0%nap4筌redure0+n0P看与reduce0%nap10%rrducE0=%rwr13%rsducE0=%3U19%retlucegMt-22工出心心廿gixeiip1rlueg0"rup25*reduceD*gpjduua04gprsijce口*ntapJI1
36、5:r&dLce/napwo宰r5dizcB口*naf30%r=d.r:c&1CJfntap31七reduceloloag34Eeaiioelotrtap33ir&tluceillE8proxy/azplxcatlon_lS12565963002_00£0/17/12/C7IS!0:OSIMFOraipr=duG=BJot;Runnj.ng17712/07ISHOsMIJJFOmcprEduc=BJoisJebjob_KLZ'ds:falseF-LltCuLpiiLFlxilciLCouhleraByxeaKxxt*ea*l7E12217712/D7L
37、s42:09INFOclient.RNEroxyaCormsetingreResoureeNanaLg&i:atrtasrer/l09:003217/12/D719:z:D9WARMmspreduce.JobsiiBnux:ter:Haflocpcmmana-lin-optierpar3工ngcolpezfexBieil-Imp工.曰工EcheToolIntelfaceandexcauLe了qu工appllcaLiciii#£ibTcclRunnertoremedythi.17712/D71St42;O917/12/D71972:0917/12/D719;
38、M2:Om12565363082_OO1117/12/D719742:O9125fiS9K308?_GQ4L17/12fD7197-32:09TWFOINFOINFQINFOINFOinpjt.rilBTriputFomatiTotalinpucpatlhtoprocess:1napreduce.JoDSubmittersn'lmbezofmailt鸟;工gpreauce.gDSumii匚曰工;3曲m匚cingL0Ker:s【口ejo&:jol?_15xmpl.YaTnCli.«nitlEqpl:Submittedapplicationapplicaxan15zpre
39、auce«jod:Jheuricotisclctti=eiot:hu匚口:/masuer;3066Zprony/apt1Ica1on1512559«3062D3tl/17/12/D719M2;D317/12/D71915rw#:fal?eINFOINFOrwprcducc«Job;mapzeduce.Job:KumringJobjobjobsjct_151Z5而5兮63。2.。0省115125«5930S20Q41Ewraiiiginwbex17/12/0717/12/D717712/3717712/D7ssfully17/12/3719:2:1519;
40、-32;2119:42s27ig皿n19:2;27INFOINFOINFCINFO1NFCnspreduceJob:raapzeduce-Job;ZLapeducse.Job;mapreduce.Jab:mipmapQ轮reduce口告IDDreduce。舌IS*reduce1。口当Jobjob1S125E963O320041completedsuceeiEtiDKedu.ce.JoD:Councers:39FxleSystien.匕uunturmFILE.:KiHniomrofteyteBFILE:Numberofbyesfile:勘3Htoe上o>上工也&1zead.=129
41、143vnten-463203HVT3S17/12/0719:42:27TKFCclient.RMPr*oxy:ConnectingtoReaourceHanagerarrtaarer/l09:803217/12/0719:42:27WARNjnapreduce.JobSubmitcer:Hadoopcommanc-1ineoptionparsingnot.performed.ImpleiienttheToolinterfaceandexecuteyourapplicationwithToolRunxiextoxsnerdythio.17/12/0719:42:2717/1
42、2/0719H2:2717/12/0719H2;27二765963082-004217/12/0719*42:271256&963082_004217/12/DT19?42:27INFOINFOINFOINFOINFOinput.FileInputFomat:Tocalinputp-nthjtoproceaj:280xapxeduce.JcbSubnitccr:nunberofspliUd:280xopxcducc.JcbSubsiitccr:Subsdctingtekenaforjob:job_15inpl.YaznClienIzipl:Sunnxt*edapplxcacxcnapp
43、lxca*ion_15xapreduce.Jeb:Theurlzotrackthejeb:hetp:/master:B03B/proKy/applicati.on_l!>12b6!>9630e2_0042/2d。:17/12/0719:42:33TKFCjrpreduce.Job:map0上reduceOt17/12/0719:42:43INFOmapreduce.Job:napreduce0%17/12/0719:42:47TXFCjrapreduceJob:nap2*reduce0%17/12/0719:42:50INFOrapreduce.Job:map3%reduce0%1
44、7/12/0719:42:53INFOxapxeduce.Jeb;nap42reduce0%17/12/0719:42:54INFOxApxeduce.Jeb:nap6%reduce0417/12/0719H2:S5INFOxopxeduce.Jeb:nap91reduce0、17/12/0719H2:S6INFOxApxcduccJeb:napIDSreduce0117/12/0719:42;S7INFCxapreduceJeb:nap14%reduce0%17/12/0T19:42:581/,D/CO_1Qd_uQINFOixapreduceJeb:nap21%二reduce。年jeapr
45、educeJeb:RunningwAprduc.Job!JODJOB17/12/0719:42:2717/12/0119:42:33INFOINFOJOD:JOD15125S»6308200421512565963082C042runningmub#rICERROR-。WRCNG_LEN3TM=0WRCNG二MAP=03RCNG二REDUCERFileInputFcraatCounters3ytesRead=OFileOucputFonaacCoxmtexoBytesWxitt.en-2017/12/0719:14:30ikfociienc.RMProxy:connectingtoR
46、esoirceManaaerazlaster/l09:803217/12/0719:44:30KARNmapreduce.JobSuboaitter:Haloopconnand-lineoptionparsingnocpczforxied.IrtplcnencchcToolinterfaceandexecuteyoorapplicationwithTooLRunnertoremedythij.17/12/0719;44;3O17/12/0719H4:3017/12/0719!44:3O17/12/07l»744:3012565S3082_001317/12/071
47、97"3。INFOINFOINFOINFOINFOinpuC.FilelnpuFon&at;TocalInputpazhstoprocess:1maorecluce.JobsaDcnlCLer:nmniDexo£jpllcs:!napreouce.JobSuDmirter:submirringtorensrorjo»:job15imp!.YamClienIxpl:Subsiictedapplicationapplication15xaaprcducceJob;TheuxltocrackthejDb;http;/sxastex;8088/proxv/appl
48、lcaclcn15125659630820043/17/12/0719:4:3017/12/0719:44:36m.oda:falseINFOINFOnapreduce,Job:mapreduce.Job;RunriraJabjeb3OD:or_:5L25659630e2-0043151256S9630320043runninginuber17/12/0717/12/0717/12/0717/12/0719191919INFOINFOINFOIhFOmapreduce.Job:mapreduccJob:maprscluce.Job:mapreauce.jod:xapxapxacmarreduc
49、ereducereducerelucerdTi1-aByletWrlLLter-35445517/12/371&:7IN*9JLienx:.kMProxy:CoimectinacokejcuiceManaasratitaster/192.168.1,109:803217/12/0719:7:£15WARNTaDreamee,JobSulMiitterHadlDODcrmnuind-lineoptionDrsingnoiEperfomedtTHiplemsntth#Toolinterfae#and®x*CTuteyourappiicatienwithToolRimne
50、zt£xenedchiar.17/12/371ft!47EOS17/12/3715141710517/12/37ISr*7;05125G59C30S200417/12737197*7:0512559fi30B2_001ii/iz/'a?is7*7:osINFOIN70INFOINFOinfoinputAFil«InpucFmAt:Totb.1inputp&hsprcduce.JabSLibniHEtcrnumbercfxiplitj?ruaprcducc.Jobijbnilttcx15ub3oittu:gto-kcnjfarjet;j-ob15ixEil.Y
51、fiinClisnLlmpli3ubmi匕匚告dapplication.applicstiQa_15>apreauae.Jobsm吕urntocracKtnenon;ncp:/7BBssr:aoBa/prr>«y/hpt11c:at;1oni5i?55fi3O8?n口中4/17/12/071:47:0517717Z0719:47:10inode:fsul孑3INrOTKTOnapreriuce.Job;TMprFdure,Jon:RurrirjJoibjchjob:jnhM151256S963DB?_0044lS12SS5930a20044mriningla口上昼丁1S;
52、7:1O19:47:18IS:7:20IE;-e7;2L13H7;241S:7:261S:7:;271号:哼了:3QrnroI1JFOINFOINFOINTOIN5DIWTOINFO57nopreduce.Jg;mapreduce.Jon:mapireciuce.Jd£>:mpreduce10'口b:nflLp"reduce*Job;xapixeduce.JoU:jnaEireducs口5:TiarreGuce.job:nzapEnapntapcunpcun匚g|_CEfiEmars-eduzereduceredui3e匚uduxreduz.ereduce11
53、%readies主IE看reaucsHErM7.实验结果分析实验结果:Eytes-sg?FileOutputFomarC03r工序BytesWriTn-192BEELG:presion:0.965517211379310recall:0.9333333333333333fl:0.9491525423726E15ID1001:p匚emion;0*945945945g用59T5grecall:0-9722222222222222fl:O.SSaS041OSSSSO-412esmasCEr-S从实验结果看出,对于本次实验,使用朴素贝叶斯进行文本分类取得了很好地效果。一方面由于朴素贝叶斯良好的分类性能
54、,鉴于此很多学者朴素贝叶斯的实验结果作为baseline另一方面可能由于实验所选类别本就存在很大的差异,所以更容易分类。8源代码清单8.1 入口主函数publicclassPreMainstaticMap<String,Integer>mapcountSum=newHashMap<String,Integer>();staticMap<String,DoubleclassbasePro=newHashMap<String,Double>();publicstaticvoidmain(Stringarg9throwsExceptionStringstrP
55、ath=args0;javaloUtil.makedir();CondiMain.Condimain(strPath);AllwordMain.allword(strPath);CountMain.countmain(strPath);NBPrior.priormain(strPath);NBpredic.predicmain(strPath);Evaluation.evalumain(strPath);)8.2 计算每个类内单词出现的次数(Condi)publicclassCondiMainpublicstaticvoidCondimain(StringstrPath)throwsExcep
56、tionConfigurationconf=newConfiguration();Jobjob=Job.getlnstance(conf,"Condi");Stringinput=strPath+"/"Stringoutput=strPath+"/NB/OUTPUT_CONDI"FileSystemfs=FileSystem.get(newURI(input),conf);Pathpath=newPath("/NB/INPUT");List<Path>paths=getFilesUnderFolder(
57、fs,path);for(Pathpa:paths)FileInputFormat.addInputPath(job,pa);)job.setInputFormatClass(CondiInputFormat.class);job.setJarByClass(CondiMain.class);/TODO:specifyamapperjob.setMapperClass(CondiMapper.class);/TODO:specifyareducerjob.setCombinerClass(CondiCombiner.class);job.setReducerClass(CondiReducer.class);/TODO:specifyoutputtypesjob.setOutputKeyClass(Text.clas
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 酒店大堂的安保措施介绍
- 旅游科普服务合同
- 艺术涂料施工协议
- 市政环卫洒水车租赁合同
- 退休硬件工程师维护合同
- 租赁GPS车辆安全监控系统合同
- 临时检验员聘用合同模板
- 城市规划光纤铺设合同
- 古董家具修复喷漆协议
- 空调维修工程师聘用合同年薪制
- 轻量化材料在航空航天领域的应用
- 《计算机视觉-基于OpenCV的图像处理》全套教学课件
- 2023年10月广东深圳市光明区马田街道办事处招聘一般专干21人笔试历年典型考题及考点剖析附答案带详解
- 《中国噬血细胞综合征诊断与治疗指南(2022年版)》解读
- 2024年社区工作者考试必背1000题题库附完整答案(全优)
- 2024-2030年中国口腔CBCT行业竞争格局分析及市场需求前景报告
- 湖南省建筑工程定额
- 大学生涯发展展示
- 人教版六年级数学上册《全册完整》课件
- 整本书阅读《平凡的世界》教案-2023-2024学年中职高一语文新教材同步教学讲堂(高教版2023·基础模块上册)
- 智慧农业鱼菜共生智能温室大棚项目可行性研究报告
评论
0/150
提交评论