Mahout 分类算法

实验简介

本次课程学习了Mahout 的 Bayes 分类算法。


一、实验环境说明

1. 环境登录

无需密码自动登录,系统用户名 shiyanlou

2. 环境介绍

本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到桌面上的程序:

  • XfceTerminal: Linux 命令行终端,打开后会进入 Bash 环境,可以使用 Linux 命令;
  • Firefox:浏览器,可以用在需要前端界面的课程里,只需要打开环境里写的 HTML/JS 页面即可;
  • GVim:非常好用的编辑器,最简单的用法可以参考课程Vim编辑器
  • Eclipse:Eclipse 是著名的跨平台的自由集成开发环境(IDE)。主要用来 Java 语言开发,但是目前亦有人通过插件使其作为 C++ 和 Python 等语言的开发工具。

3. 环境使用

使用 GVim 编辑器输入实验所需的代码,然后使用 XfceTerminal 命令行环境进行编译运行,查看运行结果,运行后可以截图并分享自己的实验成果,实验楼提供的截图是后台截图,无法作弊,可以真实有效证明您已经完成了实验。

实验记录页面可以在“我的课程”中查看,其中含有每次实验的截图及笔记,以及每次实验的有效学习时间(指的是在实验桌面内操作的时间,如果没有操作,系统会记录为发呆时间)。这些都是您学习的真实性证明。

二、分类算法

为了让大家明白什么是聚类算法,这里我们同样引用一个例子。

假设在一个几岁的小孩面前摆放了一些水果,并告诉他 红色的圆的是苹果,而橘黄色的圆的是橘子。然后把这些水果拿开,再重新拿一个红色的圆的苹果问他是不是苹果。小孩回答是,这就是一个简单的分类算法过程。

在这个过程中,主要涉及两个阶段,第一是建立模型阶段,即告诉小孩哪种特征的是苹果这一个过程;第二就是使用模型的阶段,即询问小孩新的水果是不是苹果,小孩回答是,这一过程。

三、Bayes 分类算法

Bayes(贝叶斯) 分类算法是 Mahout 中的一种分类算法。Bayes 分类算法是一种基于统计的分类算法,用来预测某个样本属于某个分类的概率有多大。Bayes 分类算法是基于 Bayes 定理的分类算法。

Bayes 分类算法有很多变种。本次实验主要介绍 朴素 Bayes 分类算法。所为朴素,就是假设各个属性之间是相互独立的,它的思想基础是这样的:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率哪个最大,就认为此待分类项属于哪个类别。

当针对大数据的应用时,Bayes 分类算法具有方法简单、准确率高和速度快的优势。但事实上,Bayes 分类算法也有它的缺点,就是 Bayes 定理假设一个属性值对给定类的影响独立于其他属性的值,而这个假设在实际情况中几乎是不成立的。因此其分类准确率可能会下降。朴素 Bayes 分类算法是一种监督学习算法,使用朴素Bayes 分类算法对文本进行分类,主要有两种模型:多项式模型(Multinomial Model)和伯努利模型(Bernoulli Model)。Mahout 中的朴素 Bayes 分类算法使用的是多项式模型,如果有兴趣深入研究,你可以前往 这里 查看具体的论文(英文稿)。

下面照例举个例子,来阐述 Bayes 分类算法。给定一组分类号的文本训练数据,如下图所示:

给定一个新的文档样本:“中国,中国,中国,东京,日本”,对该样本进行分类。该文本属性向量可以表示为 d=(中国,中国,中国,东京,日本),类别集合 Y={是,否}. 类别 “是”下共有8个单词,“否” 类别下共有3个单词。训练样本单词总数为 8+3=11. 因此 P(是)=8/11,P(否)=3/11.

类条件概率计算如下:

  • P(中国|是)=(5+1)/(8+6)=6/14=3/7
  • P(日本|是)=P(东京|是)=(0+1)/(8+6)=1/14
  • P(中国|否)=(1+1)/(3+6)=2/9
  • P(日本|否)=P(东京|否)=(1+1)/(3+6)=2/9

其中:

  • 分母中的8,表示 “是” 类别下训练样本的单词总数;
  • 6 表示训练样本有 “中国,北京,上海,澳门东京,日本” 共6个单词;
  • 3 表示 “否” 类别下共有3个单词。

有了以上的类条件概率计算结果,就可以开始计算后验概率了:

  • P(是|d)=(3/7)3×1/14×1/14×1/14×8/11=108/184877=0.00058417
  • P(否|d)=(2/9)3×2/9×2/9×3/11=32/216513=0.00014780

最后我们就可以得出结论:这个文档属于类别 中国,这就是 Mahout 中实现的 Bayes 分类算法的主要思想。

四、Bayes 分类算法应用实例

本次实验,依然通过一组具体的实例来给大家演示。

(1)在 /usr/local/hadoop-1.2.1 下新建一个测试目录,下载测试数据 20news-bydate.tar.gz 并解压(这个测试数据包含多个新闻组文档,这些文档内又分为了多个新闻组):

$ sudo mkdir bayes

$ cd bayes

$ sudo wget http://labfile.oss.aliyuncs.com/20news-bydate.tar.gz

$ sudo tar zxvf 20news-bydate.tar.gz

解压之后,它已经为我们划分好了训练集(Train)和测试集(Test)。我们只需要转换数据格式。

(2)使用 mahout seqdirectory 命令将目录下的所有样本文件转换成 <Text, Text> 格式的 SequenceFile. Mahout 会自动执行 Hadoop Map-Reduce 来进行处理,输出结果放到 20news-seq 目录中:

$ source /etc/profile

$ mahout seqdirectory -i 20news-bydate-train -o 20news-bydate-train-seq

$ mahout seqdirectory -i 20news-bydate-test -o 20news-bydate-test-seq

图示:正在执行 Map-Reduce 作业

(3)再使用 mahout seq2sparse 命令将生成的 SequenceFile 文件转换成 <Text, VectorWritable> 格式的向量文件,同样会执行 Hadoop Map-Reduce 来进行处理,输出结果放到 20news-vectors 目录中(命令较为复杂,执行前请确认是否输入正确):

$ mahout seq2sparse -i 20news-bydate-train-seq -o 20news-bydate-train-vectors -lnorm -nv -wt tfidf

$ mahout seq2sparse -i 20news-bydate-test-seq -o 20news-bydate-test-vectors -lnorm -nv -wt tfidf

图示:向量化执行完毕后部分输出内容

(4)数据格式转换完成后,我们就可以开始训练数据集了。

$ mahout trainnb -i 20news-bydate-train-vectors/tfidf-vectors -el -o model -li labelindex -ow

图示:训练完成后部分输出内容

(5)训练完成后,开始测试:

$ mahout testnb -i 20news-bydate-test-vectors/tfidf-vectors -m model -l labelindex -ow -o test-relust -c

图示:上面两张图为测试结果信息

(6)这里解释一下上面那个混合矩阵输出信息的意思:

上述 a 到 t 分别是代表了有20个类别,你可以在 train 或者 test 文件夹下看到这20个类别。列中的数据表示每个类别中被分配到的字节个数,classified 表示应该被分配到的总数。例如:

它表示 alt.atheis 本来是属于 a,有475篇文档被划为了a类,这个是正确的数据;其它的则依次表示划到 b~t 类中的数目。我们可以看到其准确率为 475/480=0.9895833··· , 可见其准确率是很高的。

同样,从 Summary 和 Statistics 统计信息,我们也可以看到结果的准确率和可靠性都是很高的。

作业

大家不妨在伪分布模式下的 Hadoop 和 Mahout 中, 再尝试运行 Bayes 分类算法实例。

时间: 2024-10-07 10:52:25

Mahout 分类算法的相关文章

Mahout实现的分类算法,两个例子,预测期望的目标变量

Mahout实现的分类算法有: –随机梯度下降(SGD) –贝叶斯分类(Bayes) –在线学习算法(Online Passive Aggressive) –隐马尔科夫模型(HMM) –决策森林(随机森林,DF) 例子1:将位置用作预测变量 用一个使用合成数据的简单例子,演示如何选择预测变量,使Mahout的模型能够准确地预测期望的目标变量. 上图是一个历史数据集合.假设在搜索颜色填充的形状:颜色填充是目标变量. 特征可以视为包含形状,和位置的预测变量. –位置貌似适合用作预测变量:水平(x)坐

KNN分类算法实现手写数字识别

需求: 利用一个手写数字"先验数据"集,使用knn算法来实现对手写数字的自动识别: 先验数据(训练数据)集: ?数据维度比较大,样本数比较多. ? 数据集包括数字0-9的手写体. ?每个数字大约有200个样本. ?每个样本保持在一个txt文件中. ?手写体图像本身的大小是32x32的二值图,转换到txt文件保存后,内容也是32x32个数字,0或者1,如下: 数据集压缩包解压后有两个目录:(将这两个目录文件夹拷贝的项目路径下E:/KNNCase/digits/) ?目录trainingD

数据挖掘中分类算法小结

数据挖掘中分类算法小结 数据仓库,数据库或者其它信息库中隐藏着许多可以为商业.科研等活动的决策提供所需要的知识.分类与预测是两种数据分析形式,它们可以用来抽取能够描述重要数据集合或预测未来数据趋势的模型.分类方法(Classification)用于预测数据对象的离散类别(Categorical Label);预测方法(Prediction )用于预测数据对象的连续取值. 分类技术在很多领域都有应用,例如可以通过客户分类构造一个分类模型来对银行贷款进行风险评估;当前的市场营销中很重要的一个特点是强

各种分类算法比较

1决策树(Decision Trees)的优缺点 决策树的优点: 一.           决策树易于理解和解释.人们在通过解释后都有能力去理解决策树所表达的意义. 二.           对于决策树,数据的准备往往是简单或者是不必要的.其他的技术往往要求先把数据一般化,比如去掉多余的或者空白的属性. 三.           能够同时处理数据型和常规型属性.其他的技术往往要求数据属性的单一. 四.           决策树是一个白盒模型.如果给定一个观察的模型,那么根据所产生的决策树很容易

20151014_基于距离的分类算法之KNN

1.原理 通过计算每个训练数据到待分类元组的距离,取和待分类元组距离最近的K个训练数据,K个数据中哪个类别的训练数据占多数,则待分类元组就属于哪个类别. 训练样本用n维数值属性描述.每个样本代表n维空间的一个点.所有的训练样本都放在n维模式空间中.给定一个样本,k-最临近分类法搜索模式空间,找出最接近未知样本的k个训练样本. 2.需要的信息 训练集 距离计算值 要获取的最邻近的邻居的数目k 计算两点之间的距离 例如可采用欧几里得距离:d = sqrt((x1-x2)^2+(y1-y2)^2+..

KNN分类算法--python实现

一.kNN算法分析 K最近邻(k-Nearest Neighbor,KNN)分类算法可以说是最简单的机器学习算法了.它采用测量不同特征值之间的距离方法进行分类.它的思想很简单:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别. KNN算法中,所选择的邻居都是已经正确分类的对象.该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别.由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别

第一个分类算法

以前我们要预测的y是连续的,现在我们即将要讨论的分类算法中,y是离散的值. 先看一些分类的问题,像medical diagnosis--医学诊断,判断你是否生病:垃圾邮箱过滤器--判断一封邮件是不是垃圾邮箱. 也不是说这样的问题完全不能用线性回归的方式进行分类,但有很多时候,线性回归不能很好地进行分类. 假设现在我们知道这个y∈{0,1},y只能取0或1. ,所以我们的假设hθ(x)不能再是线性函数                                    所以现在我们要改变我们的h

SparkMLib分类算法之朴素贝叶斯分类

SparkMLib分类算法之朴素贝叶斯分类 (一)朴素贝叶斯分类理解 朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法.简单来说,朴素贝叶斯分类器假设样本每个特征与其他特征都不相关.举个例子,如果一种水果具有红,圆,直径大概4英寸等特征,该水果可以被判定为是苹果.尽管这些特征相互依赖或者有些特征由其他特征决定,然而朴素贝叶斯分类器认为这些属性在判定该水果是否为苹果的概率分布上独立的.尽管是带着这些朴素思想和过于简单化的假设,但朴素贝叶斯分类器在很多复杂的现实情形中仍能够取得相当好的效果.

分类算法总结

      目前看到的比较全面的分类算法,总结的还不错.       主要分类方法介绍解决分类问题的方法很多[40-42] ,单一的分类方法主要包括:决策树.贝叶斯.人工神经网络.K-近邻.支持向量机和基于关联规则的分类等:另外还有用于组合单一分类方法的集成学习算法,如Bagging和Boosting等.      (1)决策树       决策树是用于分类和预测的主要技术之一,决策树学习是以实例为基础的归纳学习算法,它着眼于从一组无次序.无规则的实例中推理出以决策树表示的分类规则.构造决策树的