Mahout 聚类
聚类是将给定集合的元素或项目组织成的过程 根据项目之间的相似性进行分组。例如,与在线新闻发布相关的应用程序使用聚类将他们的新闻文章分组。
聚类的应用
-
聚类广泛用于许多应用,例如市场研究、模式识别、数据分析和图像处理。
-
聚类可以帮助营销人员在他们的客户基础中发现不同的群体。 他们可以根据购买模式来描述他们的客户群。
-
在生物学领域,可用于推导动植物分类学, 对具有相似功能的基因进行分类,并深入了解群体中固有的结构。
-
聚类有助于识别地球上类似土地利用的区域 观察数据库。
-
聚类还有助于对 Web 上的文档进行分类以获取信息 发现。
-
聚类用于异常值检测应用,例如信用检测 卡欺诈。
-
作为一种数据挖掘功能,聚类分析是一种深入了解 数据分布以观察每个集群的特征。
使用 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
可以使用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的帮助提示 seq目录 utility.
步骤 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:// 本地主机:9000/mahout_seq/ -o hdfs:// 本地主机:9000/clustered_data/
聚类算法
Mahout 支持两种主要的聚类算法,即:
- 冠层聚类
- K-means 聚类
冠层聚类
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-means 聚类中的 k 算法表示数据要划分的簇数。为了 例如,指定给该算法的 k 值选择为 3,该算法正在运行 将数据分成3个集群。
每个对象将在空间中表示为向量。最初 k 个点将被算法随机选择并作为中心,每个对象最接近每个中心 是聚集的。距离测量有多种算法,用户应选择所需的一种。
创建矢量文件
-
与 Canopy 算法不同,k-means 算法需要向量文件作为输入, 因此你必须创建矢量文件。
-
为了从序列文件格式生成矢量文件,Mahout 提供了 seq2parse utility.
下面给出了一些选项 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 聚类作业需要输入向量目录,输出聚类目录, 距离度量,要执行的最大迭代次数,以及一个整数值,表示输入数据要划分的簇数。