1 / 20
文档名称:

聚类分析.docx

格式:docx   大小:79KB   页数:20页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

聚类分析.docx

上传人:guoxiachuanyue009 2022/6/12 文件大小:79 KB

下载得到文件列表

聚类分析.docx

文档介绍

文档介绍:聚类分析
什么是聚类分析?
聚类(Clustering)就是将数据对象分组成为多个类或者簇(Cluster),它的目标是:在同一个簇中的对象之间具有较高的相似度,而不同簇中的对象差别较大。所以,在很多应用中,一个簇中的数据对象可以被作为典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序,并且,在Mahout的最近版本中还加入了对ApacheHadoop的支持,使这些算法可以更高效的运行在云计算环境中。
关于ApacheMahout的安装和配置请参考《基于ApacheMahout构建社会化推荐引擎》,它是笔者09年发表的一篇关于基于
Mahout实现推荐引擎的developerWorks文章,其中详细介绍了Mahout的安装步骤。
回页首
Mahout中提供了常用的多种聚类算法,涉及我们刚刚讨论过的各种类型算法的具体实现,下面我们就进一步深入几个典型的聚类算法的原理,优缺点和实用场景,以及如何使用Mahout高效的实现它们。
深入聚类算法
深入介绍聚类算法之前,这里先对Mahout中对各种聚类问题的数据模型进行简要的介绍。
数据模型
Mahout的聚类算法将对象表示成一种简单的数据模型:向量(Vector)。在向量数据描述的基础上,我们可以轻松的计算两个对象的相
似性,关于向量和向量的相似度计算,本系列的上一篇介绍协同过滤算法的文章中已经进行了详细的介绍,请参考《“探索推荐引擎内部的秘密”系列-Part2:深入推荐引擎相关算法-协同过滤》。
Mahout中的向量Vector是一个每个域是浮点数(double)的复合对象,最容易联想到的实现就是一个浮点数的数组。但在具体应用由
于向量本身数据内容的不同,比如有些向量的值很密集,每个域都有值;有些呢则是很稀疏,可能只有少量域有值,所以Mahout提供了多个实现:
DenseVector,它的实现就是一个浮点数数组,对向量里所有域都进行存储,适合用于存储密集向量。
RandomAccessSparseVector基于浮点数的HashMap实现的,key是整形(int)类型,value是浮点数(double)类型,它只存储向量中不为空的值,并提供随机访问。
SequentialAccessVector实现为整形(int)类型和浮点数(double)类型的并行数组,它也只存储向量中不为空的值,但只提供顺序访问。
用户可以根据自己算法的需求选择合适的向量实现类,如果算法需要很多随机访问,应该选择DenseVector或者
RandomAccessSparseVector,如果大部分都是顺序访问,SequentialAccessVector的效果应该更好。
介绍了向量的实现,下面我们看看如何将现有的数据建模成向量,术语就是“如何对数据进行向量化”,以便采用Mahout的各种高效的聚类算法。
简单的整形或浮点型的数据
这种数据最简单,只要将不同的域存在向量中即可,比如n维空间的点,其实本身可以被描述为一个向量。
枚举类型数据
这类数据是对物体的描述,只是取值范围有限。举个例子,假设你有一个苹果信息的数据集,每个苹果的数据包括:大小,重量,颜色等,我们以颜色为例,设苹果的颜色数据包括:红色,黄色和绿色。在对数据进行建模时,我们可以用数字来表示颜色,红色=1,黄色=2,绿色=3,那么大小直径8cm,,颜色是红色的苹果,建模的向量就是<8,,1>。
下面的清单1给出了对以上两种数据进行向量化的例子。

//创建一个二维点集的向量组
publicstaticfinaldouble[][]points={{1,1},{2,1},{1,2},
{2,2},{3,3},{8,8},{9,8},{8,9},{9,9},{5,5},
{5,6},{6,6}};
publicstaticList<Vector>getPointVectors(double[][]raw){
List<Vector>points=newArrayList<Vector>();
for(inti=0;i<;i++){
double]]fr=raw[i];
//这里选择仓建RandomAccessSparseVector
Vectorvec=newRandomAccessSparseVector();
//将数据存放在创建的Vector中
(fr);
(vec);
}
returnpoints;
Mahout中的向量Vector是一个每个域是浮点数(double)的复合对象,最容易联想到的实现就是一个浮点数的数组。但在具体