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=
值
}
分享到:
相关推荐
在本案例中,我们将深入探讨如何使用Apache Mahout这一强大的机器学习库来构建一个贝叶斯文本分类器。Apache Mahout是一个开源项目,旨在提供可扩展的、易于使用的机器学习算法,尤其在大数据领域应用广泛。而朴素...
在Mahout中,Naive Bayes分类器实现了两种版本:Multinomial Naive Bayes和Complement Naive Bayes。前者适用于离散特征,后者则适用于稀疏数据。对于Kddcup 1999数据集,由于其特征主要是离散的,我们通常会选择...
在大数据时代,Mahout已经成为数据科学家和工程师们的重要工具,尤其在文本分析、推荐系统和分类任务中扮演着关键角色。本篇将深入探讨Mahout中的朴素贝叶斯分类以及中文分词这两个核心功能。 一、Mahout与朴素...
2. **分类与聚类**:Mahout支持多种分类算法,如Naive Bayes和Random Forest,以及聚类算法,如K-Means和Fuzzy K-Means。这些算法可以帮助对数据进行预处理,找出数据的内在结构和模式。 3. **流式计算**:随着...
1. **分类(Classification)**:Mahout提供了如朴素贝叶斯(Naive Bayes)、决策树(Decision Trees)和随机森林(Random Forests)等算法,用于预测离散或连续的目标变量。这些算法广泛应用于垃圾邮件过滤、文本...
Mahout支持多种分类算法,如Naive Bayes、Random Forest和Perceptron。Naive Bayes是一种基于贝叶斯定理的简单而有效的分类方法,适用于文本分类。Random Forest则是构建多个决策树并集成其结果,提高预测准确性。...
在本案例中,我们将深入探讨如何使用Apache Mahout框架构建一个基于贝叶斯的文本分类器。Mahout是一个开源的机器学习库,它为开发者提供了大量先进的数据挖掘和机器学习算法,包括分类、聚类和协同过滤等。贝叶斯...
- **分类(Classification)**: Mahout包含了多种分类算法,如朴素贝叶斯(Naive Bayes)、决策树(Decision Trees)和随机森林(Random Forests),这些算法常用于文本分类和垃圾邮件过滤等场景。 - **聚类...
2. **分类**:Mahout支持多种监督学习算法,如随机森林(Random Forest)和朴素贝叶斯(Naive Bayes)。这些算法在处理分类问题时表现出色,如垃圾邮件过滤、情感分析和文档分类等。 3. **协同过滤**:在推荐系统中...
Apache Mahout是一个开源机器学习库,它为大数据分析提供了丰富的算法和工具,旨在帮助开发者构建智能应用程序。在标题“Mahout-0.9-jar包”中,提及的是该库的一个特定版本——0.9,这通常意味着包含了该版本的所有...
3. **分类(Classification)**:如随机森林(Random Forest)、朴素贝叶斯(Naive Bayes)等,用于根据已知特征对数据进行分类。这些模型在垃圾邮件过滤、情感分析等方面表现出色。 三、分布式计算与Hadoop集成 ...
Mahout支持多种分类算法,如朴素贝叶斯(Naive Bayes)、决策树(Decision Trees)、随机森林(Random Forests)等。这些算法可用于文本分类、垃圾邮件过滤等任务,帮助自动对数据进行预定义的类别划分。 **4. 聚类...
Mahout库内包含了多种用于文本分析的工具和算法,比如SVD(奇异值分解)用于降维,或者Naive Bayes和Random Forest等分类算法。在这个数据集上,我们可以训练这些模型,然后利用交叉验证来评估它们的性能。例如,...
2. **分类**:Mahout支持多种分类算法,如朴素贝叶斯(Naive Bayes)、决策树(Decision Trees)和随机森林(Random Forest)。这些算法可以用于文本分类、情感分析和其他预测性建模任务。 3. **聚类**:包括K-...
- **分类**:包括朴素贝叶斯(Naive Bayes)、决策树(Decision Trees)等,用于将数据分配到预定义的类别中。 - **聚类**:如K-Means算法,用于将数据点分成多个群组,使同组内的数据点相互接近,而不同组的数据...
在分类部分,书中可能会讲解Mahout支持的各种分类算法,如朴素贝叶斯(Naive Bayes)、决策树(Decision Trees)和随机森林(Random Forests)。这些算法广泛应用于文本分类和垃圾邮件过滤等领域。 在聚类方面,书...
例如,你可以看到如何使用Mahout构建一个电影推荐系统,分析IMDb数据库中的用户评分数据,应用协同过滤算法进行推荐。此外,书中还会讲解如何处理稀疏数据、优化算法性能以及评估推荐效果。 四、Hadoop集成 Mahout...