Mahout 简明教程
Mahout - Clustering
聚类是对给定集合的元素或项目按项目之间的相似度组织到组中的过程。例如,与在线新闻发布相关的应用程序使用聚类对新闻文章进行分组。
Applications of Clustering
-
聚类广泛用于许多应用程序,例如市场研究、模式识别、数据分析和图像处理。
-
聚类可以帮助营销人员在他们的客户群中发现不同的群体。他们可以根据购买模式来表征他们的客户群体。
-
在生物学领域,它可以用来推导出动植物分类法,对具有相似功能的基因进行分类,并深入了解种群中固有的结构。
-
聚类有助于在地球观测数据库中识别类似土地利用的区域。
-
聚类还有助于对网络上的文档进行分类以发现信息。
-
聚类用于离群点检测应用程序,例如信用卡欺诈检测。
-
作为一种数据挖掘功能,聚类分析用作获取数据分布的见解以观察每个簇的特征的工具。
使用 Mahout,我们可以对给定的数据集进行聚类。所需步骤如下:
-
Algorithm 您需要选择一个合适的聚类算法来对簇的元素进行分组。
-
Similarity and Dissimilarity 您需要有一条规则来验证新遇到的元素与组中的元素之间的相似性。
-
Stopping Condition 需要一个停止条件来定义无需聚类的地方。
Procedure of Clustering
若要对给定数据进行聚类,您需要 -
-
启动 Hadoop 服务器。创建必要的目录以将文件存储在 Hadoop 文件系统中。(在树冠的情况下,为输入文件、序列文件和聚类输出创建目录)。
-
将输入文件从 Unix 文件系统复制到 Hadoop 文件系统。
-
从输入数据准备序列文件。
-
运行任何可用的聚类算法。
-
Get the clustered data.
Preparing Input File Directories
使用以下命令在 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/
它会向您提供如下所示的输出:
Copying Input File to HDFS
现在,将输入数据文件从 Linux 文件系统复制到 Hadoop 文件系统中 的 mahout_data 目录,如下所示。假设您的输入文件是 mydata.txt,并且它位于 /home/Hadoop/data/ 目录中。
$ hadoop fs -put /home/Hadoop/data/mydata.txt /mahout_data/
Preparing the Sequence File
Mahout 为您提供了一个实用程序,用于将给定的输入文件转换成序列文件格式。此实用程序需要两个参数。
-
原数据所在输入文件目录。
-
聚类数据要存储在其中的输出文件目录。
下面给出了 mahout seqdirectory 实用程序的帮助提示。
Step 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>
Example
mahout seqdirectory
-i hdfs://localhost:9000/mahout_seq/
-o hdfs://localhost:9000/clustered_data/
Clustering Algorithms
Mahout 支持两种用于聚类的主要算法,即:
-
Canopy clustering
-
K-means clustering
Canopy Clustering
树冠聚类是一种简单快速的算法,Mahout 用于聚类目的。对象将被视为平面空间中的点。该算法经常用作其他聚类算法(如 k 均值聚类)中的初始步骤。您可以使用下列语法运行树冠作业:
mahout canopy -i <input vectors directory>
-o <output directory>
-t1 <threshold value 1>
-t2 <threshold value 2>
树冠作业需要一个包含序列文件的输入文件目录,以及一个将聚类数据存储在其中的输出目录。
Example
mahout canopy -i hdfs://localhost:9000/mahout_seq/mydata.seq
-o hdfs://localhost:9000/clustered_data
-t1 20
-t2 30
您可以在给定的输出目录中获取所生成的集群数据。
K-means Clustering
K-means 聚类是一种重要的聚类算法。K-means 聚类算法中的 k 表示将数据划分为的簇的数目。例如,为该算法指定 k 值为 3 时,该算法将把数据划分为 3 个簇。
每个对象将在空间中表示为向量。最初将由算法随机选择 k 个点并将其视为中心,最接近每个中心的每个对象会被聚类。有几种算法用于距离测量,用户应选择所需的一种。
Creating Vector Files
-
与 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 <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 聚类作业需要输入向量目录、输出簇目录、距离度量、要执行的最大迭代数和表示将输入数据划分为的簇数目的整数值。