`
lbxhappy
  • 浏览: 307269 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mahout中bayes分类分析—2

 
阅读更多

2、 模型

以上训练部分的四个job 执行完毕后,整个 bayes 模型就建立完毕了,总共生成并保存三个目录文件:

trainer-tfIdf

trainer-weights

trainer-thetaNormalizer

我们可以将模型从分布式上Sequence 文件导成本地的 txt 文件进行查看。

3、测试

调用类:TestClassifier

所在包:package org.apache.mahout.classifier.bayes;

根据命令行参数会选择顺序执行还是并行map/reduce 执行,这里只分析并行 map/reduce ,执行时会调用 BayesClassifierDriver

分析BayesClassifierDriver

runjob runjob 中先运行 BayesClassifierMapper 再是 BayesClassifierReducer job 执行完毕后会调用混合矩阵: ConfusionMatrix 函数显示结果

BayesClassifierMapper

首先, 运行configure algorithm=new BayesAlgorithm() datastore=new InMemoryDatastore params) datastore InMemoryDatastore params) 方法将模型装入到 datastore 中即装入 Sigma_j Sigma_ k Sigma_ k Sigma_j thetaNormalizer weight=TfIdf alpha_i=1.0 ); classifier=new classifierContext(algorithm,datastore) classifier.initialize() ,即初始化 classifier ,初始化 classifier datastore.initialize() algorithm.initialize this.datastore )。

datastore的初始化:

调用SequenceFileModelReader loadModel 方法(五个 Load 方法):

loadFeatureWeights(装入的是 Sigma_j )生成hashmap  Sigma_j {0 weight 1 weight  }其中 0 1 等是属性的标号,weight Sigma_j value

loadLabelWeights(装入的是 Sigma_ k)生成 hashmap  Sigma_ k{0 weight 1 weight  }其中 0 1 等是label 即类标签的标号, weight Sigma_ k value

loadSumWeight (装入的是 Sigma_ k Sigma_j )使datastore 的成员变量 Sigma_ j Sigma_ k=value(训练得到的所有 tfidf 总和)。

loadThetaNormalizer (装入的是 ThetaNormalizer )生成 hashmap thetaNormalizerPerlabel{0 weight 1 weight  }其中 weight 是传进来的 value ,使 datastore 的成员变量 thetaNormalizer=Max(1.0 |weight|)

loadWeightMatrix (装入的是 weight tfidf )生成 weightMatrix SparseMatrix ,其中行是属性的标号,列是 label 的标号,行列交叉的地方是 tfidf

algorithm的初始化:

调用datastore.getKeys getKeys 返回 labeldicionary.Keys 即返回一个集合,里面放的是所有的 label

其次, 运行map :开始分类 classifier.classifyDocument(),classifyDocument() 调用 algorithm.classifyDocument new result{unkonwm,0} categories= label weight 即所有的label 集合; 开始循环:针对每一个类进行循环,调用documenWeight :先计算文档中每个词的次数( frequency ),生成一个 Map wordlist ,针对 wordlist each pair 计算:∑ [frequenc y×featureweight(datastore,label,word) ]。其中 featureweight共四个,都调用datastore.getWeight,以下分别分析:

①double result = 调用datastore.getWeight,稀疏矩阵的getQuick,取出矩阵的Tfidf值;

②double vocabCount =属性总数;

③double sumLableWeight =Sigma_k的值;

④double numerator =result + 1.0;

⑤double denominator = sumLableWeight + vocabCount;

⑥double weight =log(numerator/denominator)也就是=log[(Tfidf+1.0)/(Sigma_k+属性个数)];

返回的是result = -weight;

所以说, documenWeight返回的值是测试文档属于某类的概率的大小,即所有属性的在某类下的 frequenc y×result之和与在其他类下的和值进行比较,最大值的,取出它的label,文档就属于此类。

key=_CT 正确 label  分类 label  value=1.0

BayesClassifierReducer

只是合并map的结果。

key=_CT 正确 label  分类 label  value= 正确分类的文档数

根据对以上∑(frequenc y×result)进行分析,参照贝叶斯多项式模型, frequency 是对weight中取对数时转移到前面的,即log(numerator/denominator) frequency  frequency ×log(numerator/denominator),weight是条件概率,即log[(numerator/denominator) frequency

×(numerator/denominator) frequency  ] =  log(numerator/denominator) frequency 因为按贝叶斯原理来说,后验概率=先验概率×条件概率,据我理解,此处为什么没有乘先验概率,可能是因为所用的20个新闻的数据每类中的文档数大致一样,先验概率几乎一样,所以没必要乘(个人猜测)。

ConfusionMatrix函数显示结果

key=正确 label  value={key= 分类 label value= }

分享到:
评论

相关推荐

    【甘道夫】通过Mahout构建贝叶斯文本分类器案例详解 -- 配套源码

    在本案例中,我们将深入探讨如何使用Apache Mahout这一强大的机器学习库来构建一个贝叶斯文本分类器。Apache Mahout是一个开源项目,旨在提供可扩展的、易于使用的机器学习算法,尤其在大数据领域应用广泛。而朴素...

    [Mahout] 使用Mahout 对Kddcup 1999的数据进行分析 -- Naive Bayes

    在Mahout中,Naive Bayes分类器实现了两种版本:Multinomial Naive Bayes和Complement Naive Bayes。前者适用于离散特征,后者则适用于稀疏数据。对于Kddcup 1999数据集,由于其特征主要是离散的,我们通常会选择...

    mahout源码

    在大数据时代,Mahout已经成为数据科学家和工程师们的重要工具,尤其在文本分析、推荐系统和分类任务中扮演着关键角色。本篇将深入探讨Mahout中的朴素贝叶斯分类以及中文分词这两个核心功能。 一、Mahout与朴素...

    Mahout源码

    2. **分类与聚类**:Mahout支持多种分类算法,如Naive Bayes和Random Forest,以及聚类算法,如K-Means和Fuzzy K-Means。这些算法可以帮助对数据进行预处理,找出数据的内在结构和模式。 3. **流式计算**:随着...

    mahout in action中的源码

    1. **分类(Classification)**:Mahout提供了如朴素贝叶斯(Naive Bayes)、决策树(Decision Trees)和随机森林(Random Forests)等算法,用于预测离散或连续的目标变量。这些算法广泛应用于垃圾邮件过滤、文本...

    mahout 实例

    Mahout支持多种分类算法,如Naive Bayes、Random Forest和Perceptron。Naive Bayes是一种基于贝叶斯定理的简单而有效的分类方法,适用于文本分类。Random Forest则是构建多个决策树并集成其结果,提高预测准确性。...

    【甘道夫】通过Mahout构建贝叶斯文本分类器案例详解--配套代码

    在本案例中,我们将深入探讨如何使用Apache Mahout框架构建一个基于贝叶斯的文本分类器。Mahout是一个开源的机器学习库,它为开发者提供了大量先进的数据挖掘和机器学习算法,包括分类、聚类和协同过滤等。贝叶斯...

    mahout-0.3.tar.gz

    - **分类(Classification)**: Mahout包含了多种分类算法,如朴素贝叶斯(Naive Bayes)、决策树(Decision Trees)和随机森林(Random Forests),这些算法常用于文本分类和垃圾邮件过滤等场景。 - **聚类...

    mahout-0.3.zip

    2. **分类**:Mahout支持多种监督学习算法,如随机森林(Random Forest)和朴素贝叶斯(Naive Bayes)。这些算法在处理分类问题时表现出色,如垃圾邮件过滤、情感分析和文档分类等。 3. **协同过滤**:在推荐系统中...

    Mahout-0.9-jar包

    Apache Mahout是一个开源机器学习库,它为大数据分析提供了丰富的算法和工具,旨在帮助开发者构建智能应用程序。在标题“Mahout-0.9-jar包”中,提及的是该库的一个特定版本——0.9,这通常意味着包含了该版本的所有...

    mahout-distribution-0.8-src

    3. **分类(Classification)**:如随机森林(Random Forest)、朴素贝叶斯(Naive Bayes)等,用于根据已知特征对数据进行分类。这些模型在垃圾邮件过滤、情感分析等方面表现出色。 三、分布式计算与Hadoop集成 ...

    mahout 0.5

    Mahout支持多种分类算法,如朴素贝叶斯(Naive Bayes)、决策树(Decision Trees)、随机森林(Random Forests)等。这些算法可用于文本分类、垃圾邮件过滤等任务,帮助自动对数据进行预定义的类别划分。 **4. 聚类...

    mahout文本训练测试数据

    Mahout库内包含了多种用于文本分析的工具和算法,比如SVD(奇异值分解)用于降维,或者Naive Bayes和Random Forest等分类算法。在这个数据集上,我们可以训练这些模型,然后利用交叉验证来评估它们的性能。例如,...

    mahout-distribution-0.9含jar包

    2. **分类**:Mahout支持多种分类算法,如朴素贝叶斯(Naive Bayes)、决策树(Decision Trees)和随机森林(Random Forest)。这些算法可以用于文本分类、情感分析和其他预测性建模任务。 3. **聚类**:包括K-...

    apache-mahout-distribution-0.11.0-src.zip

    - **分类**:包括朴素贝叶斯(Naive Bayes)、决策树(Decision Trees)等,用于将数据分配到预定义的类别中。 - **聚类**:如K-Means算法,用于将数据点分成多个群组,使同组内的数据点相互接近,而不同组的数据...

    MAHOUT实战pdf.zip

    在分类部分,书中可能会讲解Mahout支持的各种分类算法,如朴素贝叶斯(Naive Bayes)、决策树(Decision Trees)和随机森林(Random Forests)。这些算法广泛应用于文本分类和垃圾邮件过滤等领域。 在聚类方面,书...

    Mahout算法解析与案例实战&Mahout;实战

    例如,你可以看到如何使用Mahout构建一个电影推荐系统,分析IMDb数据库中的用户评分数据,应用协同过滤算法进行推荐。此外,书中还会讲解如何处理稀疏数据、优化算法性能以及评估推荐效果。 四、Hadoop集成 Mahout...

Global site tag (gtag.js) - Google Analytics