Mahout - 聚类

聚类是根据项目之间的相似性将给定集合的元素或项目组织到
组中的过程.例如,与在线新闻发布相关的应用程序使用群集对其新闻文章进行分组.

群集应用程序

  • 群集广泛用于许多应用,例如市场研究,模式识别,数据分析和图像处理.

  • 群集可以帮助营销人员在客户基础上发现不同的群体.
    他们可以根据购买模式描述他们的客户群.

  • 在生物学领域,它可以用于推导植物和动物分类法,
    对具有相似功能的基因进行分类,并深入了解人口中固有的结构.

  • 聚类有助于识别地球上类似土地利用的区域
    观察数据库.

  • 群集还有助于在网上对文件进行分类,以获取信息
    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 --help
Job-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 <input file path> -o <output directory>

示例

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 <input vectors directory>
-o <output directory>
-t1 <threshold value 1>
-t2 <threshold value 2>

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 <input vectors directory>
-c  <input clusters directory>
-o  <output working directory>
-dm <Distance Measure technique>
-x  <maximum number of iterations>
-k  <number of initial clusters>

K-means集群作业需要输入向量目录,输出集群目录,
距离度量,要执行的最大迭代次数,以及整数值,表示输入数据要分成的簇数.