请选择 进入手机版 | 继续访问电脑版
楼主: 东西方咨询
2759 2

贝叶斯分类解析(using Mahout) [推广有奖]

  • 0关注
  • 1粉丝

博士生

73%

还不是VIP/贵宾

-

TA的文库  其他...

Research Paper Writing(写作)

OxMetrics NewOccidental

Eviews NewOccidental

威望
0
论坛币
2732 个
通用积分
5.6395
学术水平
48 点
热心指数
19 点
信用等级
46 点
经验
4060 点
帖子
115
精华
4
在线时间
7 小时
注册时间
2014-6-21
最后登录
2016-8-20

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
之前汇聚了 10w 条左右的食品安全相关的新闻网页,但是这里有一部分数据是跟视食品安全不相关的,所以需要用一个分类器训练出一个二分类模型,然后对所有数据进行二分类。
      刚开始用了    fudannlp    提供的分类接口直接对训练集进行训练,然后利用模型测试,测试结果惨不忍睹,怀疑是分类器用错了。然后就打算用    mahout    试一试。  
  Mahout 的中文文档分类的资料比较少,看了几篇网上的博客,差点被坑到死,真是不能多说!接下来把这两天摸索的过程以及出错的环节总结一下,以免以后再用的时候再被坑到死。
  部署环境  1.安装 Hadoop      Mahout 很多算法都是    map-reduce    模型,所以要在 Hadoop 上跑。  
      我用的版本是    Hadoop-1.2.1    ,hadoop 安装过程不要看别的博客,只要参考官方文档就可以    Hadoop Single Node Setup    。  
  2.安装 Maven  Maven 用于编译源代码并构建可执行的程序,对 Maven 没有做深入了解。
      我用的版本是    maven-3.1.1    ,从官网下载    Maven    ,解压之后,在    PATH    环境变量里添加 maven 目录下的    /bin/    目录就安装完成了。  
  3.安装 Mahout      我用的版本是    mahout-0.8    ,根据    Building Mahout    安装。我是在 mahout 根目录下执行的    mvn install    ,跑了很长时间,中间没有出错,不知道出错了会是什么样的情况。  
      可以把 mahout 的    /bin/    目录也添加到    PATH    环境变量里,这样省很多事儿,不用每次都敲路径来执行 mahout。  
  用 Mahout 中文分类      使用 Mahout        mahout 根目录下有个    examples/bin    目录,这里有很多例子。看看这些    shell 脚本    大概就知道如何简单地使用 mahout 了。  
      如果在使用 mahout 的过程中需要用到外部的    jar包    ,可以把 jar包 放到 mahout 根目录下的    /mahout-0.8/examples/target/dependency/    目录里,运行 mahout 的时候自动会把这个目录下的所有 jar包 添加到    CLASSPATH    里。打开 mahout 的执行文件,在 158 行,会有一段代码:  

            123                             for f in $MAHOUT_HOME/examples/target/dependency/*.jar; do  CLASSPATH=${CLASSPATH}:$f;done         

        中文分类    分词      mahout 默认的分词器不支持中文分词,所以要用其他的方法先对中文文档进行分词。网上有人用    庖丁解牛    作为分词器,但是我尝试各种方法,在执行 mahout 时总是会有    ClassNotFound    异常,后来就先用    fudannlp    的分词工具对文档进行分词并输出到文件,然后用这些分词后的作为 mahout 最开始的输入。  
  mahout 最初的样例文件的组织方式是将每一个类别样例文件放到同一个文件夹里,然后多个类别文件夹放在同一个目录下作为输入。
  运行 mahout 的步骤      首先,要确保 Hadoop 已经运行起来。我在    hdfs    上建了一个目录    /home/jfb/mahout-dirs    ,用来存放分类过程中生成的文件。  
  对具体的参数我还不太清楚,所以就不介绍了。
      第一步   
    mahout seqdirectory    :这是把输入的文本文件转换成    sequenceFile    文件,    sequenceFile    是二进制存储的    key-value    形式的文件。  
  完整的执行命令:

            1                             mahout seqdirectory -i ~/mahout-dirs/training-data -o ~/mahout-dirs/seq -ow -xm sequential         

        ~/mahout-dirs/training-data    可以是本地目录,也可以是    hdfs    上的目录,为了不出错,我直接上传到了    hdfs    上,而    ~/mahout-dirs/seq    就是    hdfs    上的目录了。以后的命令用到的输入输出目录都是    hdfs    上的目录。  
      在    hdfs    上    ~/mahout-dirs/seq    目录下会生成一个    chunk-0    的文件,如果没有,就是没执行成功。  
      第二步   
    mahout seq2sparse    :对    sequenceFile    进行向量化。  
  完整的执行命令:

            1                             mahout seq2sparse -i ~/mahout-dirs/seq -o ~/mahout-dirs/vectors -lnorm -nv -wt tfidf -a org.apache.lucene.analysis.core.WhitespaceAnalyzer         

        最后一个参数是修改了默认的分词器,因为之前已经对文档进行过分词,词与词之间是用空格分开的(就像英文是用空格分开的一样),在向量化的时候就用    WhitespaceAnalyzer    ,当然也可以用自定义的    Analyzer    ,但必须是从 lucene 继承过来的。比如:    庖丁解牛  
      第三部   
    mahout split    :把向量化的文件随机分成两部分,一部分用来训练模型,另一部分用来测试。  
  完整的执行命令:

            1                             mahout split -i ~/mahout-dirs/vectors/tfidf-vectors --trainingOutput ~/mahout-dirs/train-vectors --testOutput ~/mahout-dirs/test-vectors --randomSelectionPct 40 --overwrite --sequenceFiles -xm sequential
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:mahout 贝叶斯分类 Using Out ING 食品安全 测试结果 中文 博客 接口

本帖被以下文库推荐

gfpinggu 发表于 2014-8-13 07:19:00 |显示全部楼层 |坛友微信交流群
写得很详细 跟着做一下

使用道具

千载之后 发表于 2014-8-18 17:57:01 |显示全部楼层 |坛友微信交流群
谢谢分享!

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-18 16:15