• 【甘道夫】通过Mahout构建贝叶斯文本分类器案例具体解释


    背景&目标:
    1、sport.tar 是体育类的文章,一共同拥有10个类别。
       用这些原始材料构造一个体育类的文本分类器,并測试对照bayes和cbayes的效果;
       记录分类器的构造过程和測试结果。

    2、user-sport.tar 是用户浏览的文章,每一个目录相应一个用户。
       利用上题构造的文本分类器,计算每一个用户浏览各类文章的占比。
       记录计算过程和结果。


    实验环境:
    Hadoop-1.2.1
    Mahout0.6
    Pig0.12.1
    Ubuntu12
    Jdk1.7


    原理&流程
    建立文本分类器
    1.分类体系的确定
    2.文本样本的积累
    3.文本的预处理(分词)
    4.划分训练集,測试集
    5.对模型的训练
    6.对模型准确性測试

    測试分类器模型时,假设认为模型效果不够惬意,能够对过程进行调整,然后又一次生成模型。
    可调整的方面包含:
    1. 积累很多其它,更有具代表性的样本;
    2. 在文本预处理阶段选择更好的分词算法;
    3. 在训练分类器时,对训练參数进行调整。
    不断反复以上过程。直到得到惬意的模型为止。

    对文本进行分类:
    建立完文本分类器以后。就能够输入一个文本,输出一个分类。


    Step1:将所需用到的原始数据sport和user-sport目录上传到hdfs

    sport目录:
    • 用于训练文本分类器
    • 包括了多个子目录,每一个子目录都是一个分类的文章
    • 在现实项目中。该原始数据须要人工收集
    user-sport:
    • 待分类的文本





    注意:user-sport目录下的子目录名称是用户id。子目录内包括了多个文本文件。都是该用户浏览过的文章。


    step2:对sport目录进行分词
    用到MRTokenize.jar中的tokenize.TokenizeDriver









    到此为止,原始数据已经分好词,而且已经处理成Mahout训练文本分类器要求的输入格式:
    • 每行一篇文章
    • 每行的格式为:分类名称 文章分词结果


    Step3:划分训练集和測试集
    我们把经过分词处理的原始数据划分为训练集和測试集。训练集用于训练模型,測试集用于測试模型效果。

    该过程通过pig实现:
    grunt> processed = load'/dataguru/hadoopdev/week8/fenciout/part-r-00000' as (category:chararray,doc:chararray);
    grunt> test = sample processed 0.2;
    grunt> jnt = join processed by (category,doc) left outer, test by (category,doc);
    grunt> filt_test = filter jnt by test::category is null;
    grunt> train = foreach filt_test generate processed::category as category,processed::doc as doc;
    grunt> store test into '/dataguru/hadoopdev/week8/test';

    grunt> store train into '/dataguru/hadoopdev/week8/train';

    结果截图:
     


    Step4:训练贝叶斯模型
    我们分别训练bayes模型和cbayes模型,后面測试两者的效果做对照。


    首先训练bayes模型:
    casliyang@singlehadoop:~$ mahout trainclassifier -i /dataguru/hadoopdev/week8/train -o /dataguru/hadoopdev/week8/model-bayes -type bayes -ng 1 -source hdfs

     
    然后训练cbayes模型:
    casliyang@singlehadoop:~$ mahout trainclassifier -i /dataguru/hadoopdev/week8/train -o /dataguru/hadoopdev/week8/model-cbayes -type cbayes -ng 1 -source hdfs

    训练结果:
     


    Step5:測试模型
    測试贝叶斯模型命令例如以下:
    casliyang@singlehadoop:~$ mahout testclassifier -d /dataguru/hadoopdev/week8/test -m /dataguru/hadoopdev/week8/model-bayes -type bayes -ng 1 -source hdfs -method mapreduce

    測试结果:
     

    測试C贝叶斯模型命令例如以下:
    casliyang@singlehadoop:~$ mahout testclassifier -d /dataguru/hadoopdev/week8/test -m /dataguru/hadoopdev/week8/model-cbayes -type cbayes -ng 1 -source hdfs -method mapreduce

    測试结果:
     


    Step5:处理待分类数据
    我们的待分类数据全存储在user-sport目录下。每一个子目录都存储了一个用户浏览过的文章,子目录的名称就是用户id:
     



    Mahout的文本分类器要求输入数据为分词后的文章,我们直接使用训练分类器时用到的MRTokenize.jar中的tokenize.TokenizeDriver来对文章进行分词。输出格式为:
    • 每行一篇文章
    • 每行的格式为:用户ID 文章分词结果

    运行命令对待分类数据进行分词:
    casliyang@singlehadoop:~/Myfiles$ hadoop jar MRTokenize.jar tokenize.TokenizeDriver /dataguru/hadoopdev/week8/user-sport /dataguru/hadoopdev/week8/user-sport-fenciout

    结果:
     


    Step6:Hadoop环境下。对待分类数据进行分类。并统计每一个用户浏览每一个分类的次数
    Hadoop环境下调用Mahout分类器的程序细节參见:
    第八周(4)文本挖掘-贝叶斯-Mahout
    将程序打jar包后复制到集群上运行。

    运行命令对待分类数据进行分类:
    casliyang@singlehadoop:~/Myfiles$ hadoop jar MRClassify.jar classifier.ClassifierDriver /dataguru/hadoopdev/week8/user-sport-fenciout /dataguru/hadoopdev/week8/user-sport-bayesout /dataguru/hadoopdev/week8/model-bayes bayes

    说明:
    參数1:输入路径。即上一步分词处理好的待分类的文章存储路径
    參数2:输出路径,即统计好的用户浏览各个分类的数量
    參数3:模型所在路径
    參数4:模型的算法



    分类并统计的结果:
     
    结果的每行格式:用户ID | 分类 | 浏览次数



    Step6:处理上一步的输出数据。得到每一个用户訪问次数最多的分类
    使用pig处理:
    grunt> u_ct = load'/dataguru/hadoopdev/week8/user-sport-bayesout' using PigStorage('|') as (user:chararray, category:chararray, times:int);
    grunt> u_stat = foreach(group u_ct by user)
    >> {
    >> sorted = order u_ct by times desc;
    >> top = limit sorted 1;
    >> generate flatten(top),SUM(u_ct.times);
    >> };
    grunt> store u_stat into '/dataguru/hadoopdev/week8/user-sport-pigout'; 

    结果(第一列是用户id,第二列是浏览量最多的类别,第三列是该类别的浏览次数,第四列是该用户总共的浏览量):
     
  • 相关阅读:
    Git的环境搭建
    AmazeUI HTML元素
    AmazeUI布局
    AmazeUI基本样式
    Bash简介
    Linux下拷贝目录和删除
    linux下的定时任务
    缓存
    隔离
    DEDECMS使用SQL命令批量替换语句
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/6763695.html
Copyright © 2020-2023  润新知