聚类是根据项目之间的相似性将给定集合的元素或项目组织到
组中的过程.例如,与在线新闻发布相关的应用程序使用群集对其新闻文章进行分组.
群集应用程序
群集广泛用于许多应用,例如市场研究,模式识别,数据分析和图像处理.
群集可以帮助营销人员在客户基础上发现不同的群体.
他们可以根据购买模式描述他们的客户群.在生物学领域,它可以用于推导植物和动物分类法,
对具有相似功能的基因进行分类,并深入了解人口中固有的结构.聚类有助于识别地球上类似土地利用的区域
观察数据库.群集还有助于在网上对文件进行分类,以获取信息
discovery.群集用于异常值检测应用,例如检测信用卡
卡欺诈.作为数据挖掘函数,聚类分析作为一种工具,可以深入了解每个聚类的数据分布.
使用Mahout,我们可以聚合一组给定的数据.所需步骤如下:
算法您需要选择合适的聚类算法对群集中的
元素进行分组.相似性和不相似性您需要制定规则来验证
新遇到的元素与组中的元素之间的相似性.停止条件需要停止条件定义不需要聚类的点.
聚类过程
聚类给定的您需要的数据 -
启动Hadoop服务器.创建在Hadoop文件系统中存储文件所需的目录. (如果是顶盖,则为输入文件,序列文件和集群输出创建目录).
从Unix文件系统将输入文件复制到Hadoop文件系统.
从输入数据准备序列文件.
运行任何一个可用的聚类算法.
获取聚类数据.
启动Hadoop
Mahout适用于Hadoop,因此请确保Hadoop服务器已启动并正在运行.
$ cd HADOOP_HOME/bin$ start-all.sh
准备输入文件目录
使用以下命令在Hadoop文件系统中创建目录以存储输入文件,序列文件和集群数据:
$ hadoop fs -p mkdir /mahout_data$ hadoop fs -p mkdir /clustered_data$ hadoop fs -p mkdir /mahout_seq
您可以使用
后面的URL中的hadoop Web界面验证目录是否已创建 - http://localhost:50070/
它为您提供如下所示的输出:
将输入文件复制到HDFS
现在,将输入数据文件从Linux文件系统复制到
中的mahout_data目录Hadoop文件系统如下图所示.假设您的输入文件是mydata.txt,它位于/home/Hadoop/data/目录中.
$ hadoop fs -put/home/Hadoop/data/mydata.txt/mahout_data/
准备序列文件
Mahout为您提供实用程序将给定的输入文件转换为序列文件
格式.此实用程序需要两个参数.
原始数据所在的输入文件目录.
要存储集群数据的输出文件目录.
以下是mahout seqdirectory 实用程序的帮助提示.
第1步:浏览到Mahout主目录.您可以获得该实用程序的帮助,如下所示:
[Hadoop@localhost bin]$ ./mahout seqdirectory --helpJob-Specific Options:--input (-i) input Path to job input directory.--output (-o) output The directory pathname for output.--overwrite (-ow) If present, overwrite the output directory
使用该实用程序使用以下语法生成序列文件:
mahout seqdirectory -i -o
示例
mahout seqdirectory-i hdfs://localhost:9000/mahout_seq/-o hdfs://localhost:9000/clustered_data/
群集算法
Mahout支持两种主要的聚类算法:
冠层聚类
K-means聚类
Canopy聚类
Canopy聚类简单快捷Mahout用于聚类目的的技术.对象将被视为普通空间中的点.这种技术通常是
,用作其他聚类技术(如k-means聚类)的初始步骤.您
可以使用以下语法运行Canopy作业:
mahout canopy -i -o
Canopy作业需要一个带有序列文件的输入文件目录和一个输出
目录,用于存储集群数据.
示例
mahout canopy -i hdfs://localhost:9000/mahout_seq/mydata.seq-o hdfs://localhost:9000/clustered_data-t1 20-t2 30
您将获得在给定输出目录中生成的聚簇数据.
K-means聚类
K-means聚类是一种重要的聚类算法. k均值聚类
算法中的k表示数据要分成的聚类数.对于
示例,为此算法指定的k值选择为3,算法将
用于将数据划分为3个簇.
每个对象将是在空间中表示为矢量.最初k算法将随机选择k点并作为中心处理,每个最靠近每个中心的对象
都是聚类的.距离测量有几种算法,用户应选择所需的算法.
创建矢量文件
与Canopy算法不同,k-means算法需要矢量文件作为输入,
因此你必须创建矢量文件.要从序列文件格式生成矢量文件,Mahout提供 seq2parse 实用程序.
以下是 seq2parse 实用程序的一些选项.使用这些选项创建矢量文件.
$MAHOUT_HOME/bin/mahout seq2sparse--analyzerName (-a) analyzerName The class name of the analyzer--chunkSize (-chunk) chunkSize The chunkSize in MegaBytes.--output (-o) output The directory pathname for o/p--input (-i) input Path to job input directory.的目录路径名 - 输入(-i)输入作业输入目录的路径.
创建向量后,继续使用k-means算法.运行k-means
作业的语法如下:
mahout kmeans -i -c -o
K-means集群作业需要输入向量目录,输出集群目录,
距离度量,要执行的最大迭代次数,以及整数值,表示输入数据要分成的簇数.