Bayesian算法是一种利用概率统计知识进行分类的算法,在许多场合,朴素贝叶斯的分类算法可以与决策树和神经网络分类算法相媲美,该算法能运用到大型数据库中,且方法简单、分类准确率高、速度快。这个算法是在贝叶斯定理的基础上发展而来的,贝叶斯定理假设不同属性值之间是不关联的。但是在现实生活中的很多情况下,这种假设是不成立的,从而会导致该算法的准确度有所下降。
贝叶斯算法的流程图如1-1所示。
图 1-1 贝叶斯算法流程图
每个数据样本由特征向量X(a1,a2,...)表示,每个数据样本X后面都有这个样本所属的类别yi,P(yi)表示每个类别的概率,P(ai|yi)表示每个属性每个类别在yi发生的前提下的厚颜概率,p(yi|(a1,a2,...))表示新的特征向量X最可能被分为的i类。
项目期间并没有具体用该算法进行分类操作,因为这里我就用从相关资料上了解到的实例对mahout bayesian算法进一步进行解释。
在mahout中,Bayesian算法可用来进行文本的分类,这里结合20组新闻数据(Twenty newsgroups classification example)实例来说明mahout中算法的实现思路。
具体实现过程:
Input:20组新闻数据,一共有大概20000个文件,包含在20个文件夹中,文件夹即为文件所属的类别
1. 转换文本为向量文件
(1)文本文件转为序列文件 对应seqdirectory任务
bin/mahout seqdirectory -i lyn/mahout/20news-all -o lyn/mahout/20news-seq
(2)把序列文件转换为向量 对应seq2sparse任务
bin/mahout seq2sparse -i lyn/mahout/20news-seq -o lyn/mahout/20news-vectors -lnorm -nv -wt tfidf
2. 将输入文件分为两部分,一部分用于训练贝叶斯模型,另一部分用于测试。这部分不会设计到job任务,而是直接对HDFS文件进行操作,将原始数据按照一定的比例分为两组 对应split任务
bin/mahout trainnb -i lyn/mahout/20news-vectors -tr lyn/mahout/20news-train-vectors -te lyn/mahout/20news-test-vectors -rs 40 -ow --sequenceFiles -xm sequential
3. 训练贝叶斯模型 对应trainnb任务
bin/mahout -i lyn/mahout/20news-train-vectors -el -o lyn/mahout/model -li lyn/mahout/labelindex -ow
4. 测试、评估贝叶斯模型
bin/mahout testnb -i lyn/mahout/20news-train-vectors -m lyn/mahout/model -l lyn/mahout/labelindex -ow -o lyn/mahout/20news-testing
参考来源:blog.csdn.net/fansy1990
<<Mahout算法解析与案例实战>>