【摘要】:DocOfClassReduce,循环遍历输出,当概率更大时就更新tempClass和tempProbably;Step4.3 GetPriorProbably,计算先验概率,利用该静态函数计算每个类的文档在总类中占的比例;Step4.4 GetConditionProbably,计算条件概率。Step5利用测试文档的真实类别,计算评价指标Step5.1 OriginalDocOfClassMap,读写原本的文档分类,得到文档分类的类别;Reduce,计算得出初始情况下各个类有哪些文档。Step5.3 GetEvaluation,利用所选评价指标评价算法。
1.计算先验概率和条件概率
本节的朴素贝叶斯算法是通过计算先验概率和条件概率实现对药品安全舆情话题的分类。算法中,计算先验概率是通过计算每个类的文档在总训练类中占的比例,即先验概率P(a)=类a下文档总数/整个用来训练模型的样本的文档总数;计算条件概率是通过计算每类文档中各词语在文档中出现的次数统计加和在每类中词语的总统计数与不重复的词语的总统计数之和中占的比例。具体过程如下所示:
Step1 DocOfClassMap,获取训练模型时统计的训练集的样本数量和每个类下单词的数量,输入处理后的测试数据,测试数据格式〈〈class doc〉,wordl word2...〉,构建新的〈类别,概率〉键值对;
Step2 DocOfClassReduce,对数据进行循环遍历并进行输出,对第一次循环先进行赋值,然后再进行比较,当期概率更大时进行更新。
Step3 GetPriorProbably(String docNum),根据上述步骤结果计算先验概率,利用该静态函数计算每个类的文档在总类中占的比例,即先验概率P(a)=类a下文档总数/整个用来训练模型的样本的文档总数。
Step4 GetConditionProbably(String wordCount),根据上述步骤结果计算条件概率,条件概率通过计算每类文档中各词语在文档中出现的次数统计加和,在每类中词语的总统计数与不重复的词语的总统计数之和中占的比例。
2.算法流程
算法执行过程如下:
Step1执行命令
Step2预处理数据
Step3在Hadoop平台利用数据训练的过程,并输出模型
BayesClassify.main(new String[]{trainData,docNum,wordCount});(www.chuimin.cn)
Step3.1 DocNums_Map,它继承Mapper,主要实现对训练集数据各类别名的读写;DocNums_Reduce,继承Reducer,成为自定义的Reducer,主要业务逻辑就是复写其中的reduce函数,实现对训练集各类别下文档遍历并统计每个类对应的文件数量;
Step3.2 WordCount_Map继承Mapper,实现对训练集数据各词语的读写;WordCount_Reduce,继承Reducer,实现对训练集各类别下词语遍历并统计每个类下词语数量。
Step4用输出的模型对测试集文档进行分类测试,输出每个测试文档的分类结果
Step4.1 WordMapper,继承Mapper,实现对测试集数据各文档和词语的读写;WordReducer,继承Reducer,实现对测试集数据各类别下词语遍历并统计每个类下词语数量;
Step4.2 DocOfClassMap,输入处理测试数据,测试数据格式〈〈class_doc〉,word1 word2...〉,设置HashMap〈String,Double〉classProbably为先验概率;HashMap〈String,Double〉wordsProbably,为条件概率。DocOfClassReduce,循环遍历输出,当概率更大时就更新tempClass和tempProbably;
Step4.3 GetPriorProbably(String docNum),计算先验概率,利用该静态函数计算每个类的文档在总类中占的比例;
Step4.4 GetConditionProbably(String wordCount),计算条件概率。
Step5利用测试文档的真实类别,计算评价指标
Step5.1 OriginalDocOfClassMap,读写原本的文档分类,得到文档分类的类别;Reduce,计算得出初始情况下各个类有哪些文档。
Step5.2 ClassifiedDocOfClassMap,读取经贝叶斯分类器分类后的结果文档〈Doc,ClassName概率〉,并将其转化为〈ClassName,Doc〉形式;Reduce,计算得出经贝叶斯分类后各个类有哪些文档。
Step5.3 GetEvaluation,利用所选评价指标评价算法。
相关推荐