贝叶斯分类算法示例

摘要: 贝叶斯分类器的分类原理发源于古典概率理论,是通过某对象的先验概率,利用贝叶斯公式计算出其后验概率,即该对象属于某一类的概率,选择具有最大后验概率 的类作为该对象所属的类。朴素贝叶斯分类器(Naive Bayes Classifier)做了一个简单的假定:给定目标值时属性之间相互条件独立,即给定元组的类标号,假定属性值有条件地相互独立,即在属性间不存在依赖 关系。朴素贝叶斯分类模型所需估计的参数很少,对缺失数据不太敏感,算法也比较简单。
一.简介
      贝叶斯分类器的分类原理发源于古典概率理论,是通过某对象的先验概率,利用贝叶斯公式计算出其后验概率,即该对象属于某一类的概率,选择具有最大后验概率 的类作为该对象所属的类。朴素贝叶斯分类器(Naive Bayes Classifier)做了一个简单的假定:给定目标值时属性之间相互条件独立,即给定元组的类标号,假定属性值有条件地相互独立,即在属性间不存在依赖 关系。朴素贝叶斯分类模型所需估计的参数很少,对缺失数据不太敏感,算法也比较简单。

      Mahout 实现了Traditional Naive Bayes 和Complementary Naive Bayes,后者是在前者的基础上增加了结果分析功能(Result Analyzer).
      主要相关的Mahout类:
      org.apache.mahout.classifier.naivebayes.NaiveBayesModel
      org.apache.mahout.classifier.naivebayes.StandardNaiveBayesClassifier
      org.apache.mahout.classifier.naivebayes.ComplementaryNaiveBayesClassifier


二.数据
      使用20 newsgroups data (http://people.csail.mit.edu/jren ... 0news-bydate.tar.gz) ,数据集按时间分为训练数据和测试数据,总大小约为85MB,每个数据文件为一条信息,文件头部几行指定消息的发送者、长度、类型、使用软件,以及主题 等,然后用空行将期与正文隔开,正文没有固定的格式。


三.目标
      根据新闻文档内容,将其分到不同的文档类型中。


四.程序
      使用Mahout自带示例程序,主要的训练类和测试类分别为TrainNaiveBayesJob.java和 TestNaiveBayesDriver.java,JAR包为mahout-core-0.7-job.jar,详细代码见(mahout- distribution-0.7/core/src/main/java/org/apache/mahout/classifier/naivebayes/trainning,mahout-distribution-0.7/core/src/main/java/org/apache/mahout/classifier/naivebayes/test).


五.步骤
      1. 数据准备
      a.将20news-bydate.tar.gz解压,并将20news-bydate中的所有子文夹中的内容复制到20news-all中,该步骤已经完成,20news-all文件夹存放在hdfs:/share/data/ Mahout_examples_Data_Set中
      b.将20news-all放在hdfs的用户根目录下
      $  hadoop dfs -cp /share/data/Mahout_examples_Data_Set/20news-all .
      c.从20newsgroups data创建序列文件(sequence files)
      $  mahout seqdirectory -i 20news-all -o 20news-seq
      d.将序列文件转化为向量
      $  mahout seq2sparse -i ./20news-seq -o ./20news-vectors  -lnorm -nv  -wt tfidf
      e.将向量数据集分为训练数据和检测数据,以随机40-60拆分
     $  mahout split -i ./20news-vectors/tfidf-vectors 
                         --trainingOutput ./20news-train-vectors 
                         --testOutput ./20news-test-vectors 
                         --randomSelectionPct 40 --overwrite 
                         --sequenceFiles -xm sequential

      2.训练朴素贝叶斯模型
      $  mahout trainnb -i  ./20news-train-vectors -el -o ./model 
                           -li ./labelindex -ow -c

      3.检验朴素贝叶斯模型
    $  mahout testnb -i ./20news-train-vectors -m ./model 
                   -l ./labelindex -ow -o 20news-testing -c 

      4.检测模型分类效果
      $  mahout testnb -i ./20news-test-vectors -m ./model 
              -l ./labelindex -ow -o ./20news-testing -c

      5.查看结果,将序列文件转化为文本
      $  mahout seqdumper -i ./20news-testing/part-m-00000 -o ./20news_testing.res 
      $ download 20news_testing.res
      $  cat 20news_testing.res 

0 个评论

要回复文章请先登录注册