Mahout(聚类算法)

  1. 云栖社区>
  2. 博客>
  3. 正文

Mahout(聚类算法)

wsc449 2018-01-16 10:30:27 浏览514
展开阅读全文

应用场景

Mahout 是一个基于 Hadoop 的机器学习和数据挖掘的分布式计算框架,封装实现了大量数据挖掘经典算法,为 Hadoop 开发人员提供了数据建模的标准,从而大大降低了大数据应用中并行挖掘产品的开发难度。在掌握了 Mahout 之后,Hadoop 开发人员可以直接调用相关算法模型的接口,方便、快捷地创建智能应用程序,从而大幅提升商业智能软件的大数据分析能力。

操作步骤

1.引言

下面给出一个应用场景:
比如你是一个拥有众多藏书的图书馆馆长,但是图书馆里面的藏书全部都是混乱无序的。来到图书馆看书的读者如果要找一本书,则相当麻烦。如果所有的图书是按照书名首字母排序的,那么查找图书就会变得容易得多;或者你也可以按照图书的主题来分类。因此,你需要按照某种规则来把图书排成一列,当遇到与之前规则一样的图书,就可以把它们放在一起;当你遍历完所有读书时,众多的书籍已经被分成了若干类,一遍 聚类 也就完成了。如果你觉得第一遍聚类的结果还不够精细,你还可以进行第二遍聚类,直到结果令人满意为止。

2.简介

Hadoop在之前的文章里面已经申明,是大数据的分析,存储很好的平台。然而,Apache Mahout 起源于2008年,它是 Apache Software Foundation (ASF) 开发的一个全新的开源项目,其主要目标是创建一些可伸缩的 机器学习算法,供开发人员在 Apache 许可下更加方便快捷地创建智能应用程序。Mahout包含许多实现,包括聚类、分类、推荐过滤、频繁子项挖掘。此外,通过使用 Apache Hadoop 库,Mahout 可以有效地扩展到云中。简单而言,Mahout就是一个,提供了一系列算法实现的资源库。

3.K-Means聚类算法

K-Means 算法是 Mahout 中的一种聚类算法。它的应用很广泛,其中,K 是聚类的数目,在算法中会要求用户输入。

K-Means 聚类算法主要可分为 3 步:
(1)为 待聚类 的点寻找聚类中心;
(2)计算每个点到聚类中心的距离,将每个点聚类到离改点最近的聚类中去;
(3)计算聚类中所有点的坐标平均值,并将这个平均值作为新的聚类中心点。重复步骤2,直到聚类中心不再进行大范围移动,或者聚类次数达到要求为止;

例如下图,解释了 K-Means 算法的第一轮:

这里写图片描述

  1. 为 待聚类 的点寻找聚类中心;
    我们选择了 c1、c2、c3 作为聚类中心
  2. 计算每个点到聚类中心的距离,将每个点聚类到离该点最近的聚类中心去;
    在图2,我们将每个点连线到了其距离最近的聚类中心,形成了3个新的聚类;
  3. 计算聚类中所有点的坐标平均值,并将这个平均值作为新的聚类中心点。重复步骤2,直到聚类中心不再进行大范围移动,或者聚类次数达到要求为止;
    计算了每个聚类的平均值,即新的c1、c2、c3,同时也被作为了新的聚类中心点;重复步骤2 …

4.环境准备

4.1 Hadoop安装

Hadoop安装:Hadoop集群搭建在这就不赘述了,一般自己做实验,搭建伪分布式就可以了,搭建过程参考前面博文!
检验是否安装成功:输入jps命令,出现如下,证明安装完成

这里写图片描述

4.2 Mahout安装:

4.2.1 下载 Mahout
默认切换到opt目录下
 # sudo wget http://labfile.oss.aliyuncs.com/mahout-distribution-0.9.tar.gz

这里写图片描述

这里写图片描述

解压下载的文件:
 # sudo tar zxvf mahout-distribution-0.9.tar.gz
建议修改文件夹名:
 # sudo mv mahout-distribution-0.9 mahout
4.2.2 配置环境变量
修改 /etc/profile 文件,在末尾添加如下表达式
 # sudo vim /etc/profile

这里写图片描述

export MAHOUT_HOME=/opt/mahout
export MAHOUT_CONF_DIR=$MAHOUT_HOME/conf
export PATH=$PATH:$MAHOUT_HOME/conf:$MAHOUT_HOME/bin

保存刚刚的修改,并使之生效:
 # source /etc/profile
4.2.3 验证 Mahout
确认上面的步骤我们都没有问题后,就可以验证 Mahout 是否安装成功,输入以下命令,就会输出 Mahout 所支持的命令:
 # mahout -help

这里写图片描述

看到类似上图的信息,就说明 Mahout 安装成功了。

5. 实验操作

这里举一个简单的例子,来展现 K-Means 算法的应用。

5.1 建立目录

由于我们的hadoop环境是伪分布模式的,所以需在 hdfs 上新建一个目录,且该文件夹名必须为testdata。
 # hadoop fs -mkdir testdata

这里写图片描述

5.2 下载数据

 # wget http://labfile.oss.aliyuncs.com/synthetic_control.data

这里写图片描述

数据文件如下所示,里面大概42000float型数:

这里写图片描述

需要把下载的数据文件,上传到hdfs上
 # hadoop fs -put synthetic_control.data testdata

这里写图片描述

5.3运行 K-Means 算法

运行K-Means算法前,需要启动 Hadoop,hadoop启动方式为:
 # start-all.sh
然后运行K-Means算法(注意最后的Job,J大写):
 # hadoop jar /opt/mahout/mahout-examples-0.9-job.jar org.apache.mahout.clustering.syntheticcontrol.kmeans.Job

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

上面图示中,发现K-Means运行Map-Reduce过程中,执行了很多次,其实执行一次就是K-Means的一次迭代,下面一幅图中,user/root/output/clusters-n 为第 n 次迭代产生的结果集。可以看到 K-Means 算法进行了多次迭代(默认为10次迭代,所以从cluster-0开始,最后应该是 clusters-9)。

这里写图片描述
图示:K-Means 正在运算中(distance为点到中心的距离)

查看输出结果 output(它位于hdfs的如下目录中: /user/root/output):

这里写图片描述

其中user/root/output/clusteredPoints 存放的是最后的聚类结果;查看 clusteredPoints 使用命令为:
 # mahout seqdumper -i /user/root/output/clusterPoints/part-m-00000

这里写图片描述

这里写图片描述

user/root/output/data 存放的是原始数据,这个文件夹下的数据可以用 Mahout Vectordump 来读取,因为原始数据都是向量形式的;
查看 data 使用命令为:
 # mahout vectordump -i /user/root/output/data/part-m-00000

这里写图片描述

网友评论

登录后评论
0/500
评论
wsc449
+ 关注