📜  Mahout-群集

📅  最后修改于: 2020-11-30 05:26:18             🧑  作者: Mango


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

聚类的应用

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

  • 群集可以帮助营销人员在其客户基础上发现不同的组。他们可以根据购买模式来表征其客户群。

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

  • 聚类有助于在地球观测数据库中识别相似土地用途的区域。

  • 群集还有助于对Web上的文档进行分类以进行信息发现。

  • 聚类用于异常检测应用程序中,例如信用卡欺诈的检测。

  • 作为数据挖掘函数,“聚类分析”可作为一种工具,深入了解数据分布,以观察每个聚类的特征。

使用Mahout,我们可以聚类给定的数据集。所需步骤如下:

  • 算法您需要选择一种合适的聚类算法来对聚类的元素进行分组。

  • 相似性和不相似性您需要有一条规则来验证新遇到的元素与组中元素之间的相似性。

  • 停止条件需要一个停止条件来定义不需要聚类的点。

聚类程序

要聚类给定的数据,您需要-

  • 启动Hadoop服务器。创建用于在Hadoop File System中存储文件的必需目录。 (在创建顶篷的情况下,为输入文件,序列文件和群集输出创建目录)。

  • 将输入文件从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文件系统复制到Hadoop File System中的mahout_data目录,如下所示。假设您的输入文件是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  -o 

mahout seqdirectory
-i hdfs://localhost:9000/mahout_seq/
-o hdfs://localhost:9000/clustered_data/

聚类算法

Mahout支持两种主要的聚类算法:

  • 冠层聚类
  • K均值聚类

冠层聚类

机盖群集是Mahout用于群集目的的一种简单快速的技术。这些对象将被视为纯净空间中的点。该技术通常用作其他聚类技术(例如k均值聚类)的初始步骤。您可以使用以下语法运行Canopy作业:

mahout canopy -i 
-o 
-t1 
-t2 

机盖作业需要输入文件目录和顺序目录,并在输出目录中存储聚类数据。

mahout canopy -i hdfs://localhost:9000/mahout_seq/mydata.seq
-o hdfs://localhost:9000/clustered_data
-t1 20
-t2 30 

您将获得在给定输出目录中生成的集群数据。

K均值聚类

K-均值聚类是一种重要的聚类算法。 k均值聚类算法中的k表示数据将被划分为的簇数。例如,为此算法指定的k值选择为3,该算法将数据分为3个簇。

每个对象将在空间中表示为矢量。最初,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.

创建矢量后,请继续使用k-means算法。运行k-means作业的语法如下:

mahout kmeans -i 
-c  
-o  
-dm 
-x  
-k  

K均值聚类作业需要输入向量目录,输出聚类目录,距离度量,要执行的最大迭代次数,以及代表将输入数据划分为多个聚类数的整数值。