聚类介绍
本章包含

1 实战操作了解聚类

2.了解相似性概念

3 使用mahout执行一个简单的聚类实例

4.用于聚类的各种不同的距离測算方法

作为人类,我们倾向于与志同道合的人合作—“鸟的羽毛聚集在一起。

我们可以发现反复的模式通过联系在我们的记忆中的我们看到的、听到的、问道的、尝到的东
西。 比如,相比較盐 ,糖可以是我们很多其它地想起蜜。所以我们把糖和蜜的味道结合起来叫他们甜蜜。

甚至我们不知道甜蜜的味道,可是知道他跟世界上全部的含糖的东西是相似的。是同 一类的。我们还知道它与盐是不同类的东西。无意中。我们不同的味道使用了聚类。把糖和盐做了聚类。每一个组有数百个项目。

在自然界中,我们观察不同类型的群体。

觉得猿与猴是同一种灵长类动物。

全部的猴子 都有一些性状如短高度,长尾巴,和一个扁平的鼻子。相反。猿类有较大的尺寸,长长的手臂,和更大的头。猿看起来不同于猴子,但都喜欢香焦。所以我们能够认
为猿和猴子作为两个不同的组,或作为一个单一的爱香蕉的灵长类动物群。我们考虑一个集群全然取决于我们选择的项目之间的相似性測量的特点(在这样的情况下, 灵长类动物)。

在这一章中,从mahout学习的聚类的样例中。我们将会知道聚类是什么。怎样有数据概念联系起来。让我们从基础開始吧!

7.1 聚类的基础

聚类的过程是怎么样的呢?假如你能够去有成千上万的书籍的图书馆。在图书馆内
,图书是杂乱无章的。要找到想读的书必须横扫全部的书籍,一本一本的才干特定的书。这不仅是繁琐和缓慢。并且很枯燥。

依照标题的字母顺序排序会对读者通过标题寻找有非常大的帮助,假设大多数人仅仅是简单地浏览一下。仅仅是找一个大概的主题的书籍呢?这样通过依照书籍的主题进
行分类要比依照标题的字母顺序更实用。可是怎样进行分组呢?刚刚接手这份工作。你也不会知道全部的书籍是什么的?是冲浪的、浪漫的。或你没有遇到过的课 题。

通过按主题把书籍分类。你不得不把全部书放在同一线上,一本一本的開始阅读。当你遇到一本书的内容是类似曾经的一本书,你就返回去把它们放在在一起。当你完毕,你从数千上万的书中获取到你要的主题的一堆书。

干得好!这是你的第一个聚类的经验。假设一百个主题组太多了。你就得从头開始和反复刚才的过程获得书堆。直到你的主题,从还有一个堆是全然不同的。

聚类是全部关于组织项目从一个给定集合成一组类似的项目。在某些方面。这些集群能够被觉得是作为项目相似集,可是与其它集群项目不同的。

聚类集合包括三项

● 算法 ———–这是用来组书籍的方法

●相似性和差异性的概念——-一个在前面讨论的,依赖于这本书是否属于已经存在的堆。还是应 
       该另组新一堆的推断。

●终止条件———图书馆的样例中。当达到这些书不能堆积起来了,或这些堆已经相当不同的。这就是终止

在这个简单的样例中,圈出来的显然是基于距离三个集群。代表了聚类的结果。圆是一个在聚类方面是一个非常好的方法。

因为群组通过中心点和半径来定义的,圆的中心被叫为群重心。或者群平均(平均值),群重心的坐标是类簇中的全部点的x,y轴的平均值

项目的相似性測量

图7.1x-y平面图的点。圆圈代表了聚类。在平面团中的点归类了单个逻辑群组。聚类算法故意于识别群组

在本章中,我们将聚类可视化为一个几何问题。

聚类的核心是使用几何的技术表达不同距离的測算。

我们找到一些重要的距离測算法和聚类关系。

平面聚类点与文本聚类之间的详细相似性就能够抽象出来。

在后面的章节中。我们探讨了广泛用于聚类的方法数据,以及mahout 中使用

方法。

图书馆的样例是将书分堆直到达到一定阈值的一种策 略。

在这个样例中形成的簇的数目取决于数据;基于很多书和临界值,你可能发现了100后者20。甚至是1个类簇。一个更好的策略是建立目标簇,而不是一个
临界值,然后找到最好的群组与约束。接下来我们将具体的介绍目标簇和不同的变量

7.2项目的相似性測量

聚类的重要问题是找到一方法。通过不论什么两个数中的一个数来量化相似性。注意一下我们整片文章中使用的专业术语
:项目和点,这两个是聚类数据的单位。

在X-Y平面的样例,相似性的度量(相似性度量)的分为两个点之间的欧几里德距离。

图书馆的样例没有这样的清晰的数学手段,而不是全然依赖的智慧馆员之间的相似度来推断书。这工作不在我们的案例,由于我们须要一个度量。可在计算机上实现.

一个可能的度量是基于两本书的标题共同含有的词的数量。

基于哈利·波特:哲学家的石头和哈利·波特这两本书:阿兹卡班的囚徒中常见的三个词:哈利、波特、the。

即时魔戒也:两塔是类似于哈利·波特系列。这一措施相似不会捕获这一切。你须要改变的相似性度量来对书籍本身的内容帐户。

你能够将单词计数。

仅仅可惜。说的easy做起来难。

这些书不仅有几百个网页的文本。并且英语的特点也使的分类方法更加困难。在英语文本中有一些非常频繁的次比如 a,an
,the 等等。它总是常常发生但又不能说明这是这两本书的相似点。

为了对抗这样的影响。你能够在计算中使用的加权值,而且使用低权重表示这些词来降低对相似度值的影响。

在出现非常多次的词使用低权重值,出现少的用高权重。你能够衡量一个特定的书常常出现的,比方那些强烈建议内容的书籍–类似于魔术类的哈利波特。

你给书中的每个单词一个权重。就能算出这本中的相似性–就是全部词的词频乘以每个词的权重的和。

假设这两本书的长度同样,那么这个就是一个比較适当的方法。

假设一本书有300页,还有一本有1000页呢?当然书页大的书的词也多。

聚类算法

9.1 K-means聚类

K-means须要用户设定一个聚类个数(k)作为输入数据,有时k值可能很大(10,000),这是Mahout闪光的(shines)地方,它确保聚类的可測量性。

为了用k-means达到高质量的聚类,须要预计一个k值。预计k值一种近似的方法是依据你须要的聚类个数。比方100万篇文章,假设平均500篇
分为一类,k值能够取2000(1000000/500)。

这样的预计聚类个数很模糊。但k-means算法就是生成这样的近似的聚类。

9.1.1 All you need to know about k-means

以下看一下k-means算法的细节,K-means算法是硬聚类算法。是典型的局域原型的目标函数聚类方法的代表,它是数据点到原型的某种距离作
为优化的目标函数,利用函数求极值的方法得到迭代运算的调整规则。

算法採用误差平方和准则函数作为聚类准则函数。

K-means算法是非常典型的基于距离的聚类算法,採用距离作为相似性的评价指标。即觉得两个对象的距离越近,其相似度就越大。该算法觉得簇是由距离靠近的对象组成的。因此把得到紧凑且独立的簇作为终于目标。k个初始类聚类中心点的选取对聚类结果具有较大的。

算法步骤:

(1)随机选取随意k个对象作为初始聚类中心,初始代表一个簇。

(2)计算点到质心的距离,并把它归到近期的质心的类。

(3)又一次计算已经得到的各个类的质心;

(4)迭代2~3步直至新的质心与原质心相等或小于指定阈值。算法结束。

这样的两步算法是最大期望算法(EM)的典型样例,

第一步是计算期望(E)。利用对隐藏变量的现有预计值,计算其最大似然预计值;

第二步是最大化(M)。最大化在 E 步上求得的最大似然值来计算參数的值。

M 步上找到的參数预计值被用于下一个 E 步计算中,这个过程不断交替进行。

9.1.2 Running k-means clustering

K-mean聚类用到KMeansClusterer或KMeansDriver类。前一个是在内存(in-memory)里对节点聚类。后者採用 MapReduce任务运行。

这两种方法都能够就像一个普通的Java程序运行,而且能够从硬盘读取和写入数据。

它们也能够在hadoop上运行聚类。通
过分布式文件系统读写数据。

以下举例,使用一个随机点生成器函数来创建一些点。

这些点生成矢量格式的点作为一个正态分布环绕着一个中心。使用Mahout的in-memory
K-means 聚类方法对这些点聚类。

创建节点:generateSamples方法,取(1,1)为中心点。标准差为2,400个环绕着(1,1)的随机点,近似于正态分布。

另外又取了2个数据集。中心分别为(1,0)和(0,2)。标准差分别为0.5和0.1。

KMeansClusterer.clusterPoints()方法用到一下參数:

  • List<Vector>作为输入。
  • 距离算法DistanceMeasure採用EuclideanDistanceMeasure;
  • 聚类的阈值Threshold为0.01;
  • 聚类的个数为3;
  • 聚类的中心点採用RandomPointsUtil。随机选取的节点。

Mahout-example里的DisplayKMeans类能够直观的看到该算法在二维平面的结果。9.2节将介绍执行一个Java
Swing application的DisplayKMeans。

假设数据量非常大时,应採取MapReduce执行方式,将聚类算法执行在多个机器上,每一个mapper得到一个子集的点,每一个子集执行一个mapper。这些mapper任务计算出近期的集群作为输入流。

K-means聚类的MapReduce Job

採用KMeansDriver类的run()方法,须要输入的參数有:

  • Hadoop的配置conf。
  • 输入Vectors的路径。SequenceFile格式;
  • 初始化聚类中心的路径,SequenceFile格式;
  • 输出结果的路径,SequenceFile格式;
  • 求相似距离时採用的方法。这里採用EuclideanDistanceMeasure。
  • 收敛的阈值,没有超过该阈值的点可移动时,停止迭代。
  • 最大迭代次数,这是硬性限制,到达该最大迭代次数时,聚类停止;
  • true-迭代结束后聚类。
  • true-串行运行该算法,false-并行运行该算法;

public static void run(Configuration conf,Path input,Path clustersIn,Path output,

DistanceMeasure measure,

double convergenceDelta,

int maxIterations,

boolean runClustering,

boolean runSequential)

採用SparseVectorsFromSequenceFile工具,将sequenceFile转换成Vector。由于K-means算法须要用户初始化k个质心。

mahout in Action2.2-聚类介绍-K-means聚类算法的更多相关文章

  1. 聚类之K均值聚类和EM算法

    这篇博客整理K均值聚类的内容,包括: 1.K均值聚类的原理: 2.初始类中心的选择和类别数K的确定: 3.K均值聚类和EM算法.高斯混合模型的关系. 一.K均值聚类的原理 K均值聚类(K-means) ...

  2. 软件——机器学习与Python,聚类,K——means

    K-means是一种聚类算法: 这里运用k-means进行31个城市的分类 城市的数据保存在city.txt文件中,内容如下: BJ,2959.19,730.79,749.41,513.34,467. ...

  3. 机器学习理论与实战(十)K均值聚类和二分K均值聚类

    接下来就要说下无监督机器学习方法,所谓无监督机器学习前面也说过,就是没有标签的情况,对样本数据进行聚类分析.关联性分析等.主要包括K均值聚类(K-means clustering)和关联分析,这两大类 ...

  4. ML: 聚类算法R包-K中心点聚类

    K-medodis与K-means比较相似,但是K-medoids和K-means是有区别的,不一样的地方在于中心点的选取,在K-means中,我们将中心点取为当前cluster中所有数据点的平均值, ...

  5. 机器学习之K均值聚类

      聚类的核心概念是相似度或距离,有很多相似度或距离的方法,比如欧式距离.马氏距离.相关系数.余弦定理.层次聚类和K均值聚类等 1. K均值聚类思想   K均值聚类的基本思想是,通过迭代的方法寻找K个 ...

  6. 100天搞定机器学习|day44 k均值聚类数学推导与python实现

    [如何正确使用「K均值聚类」? 1.k均值聚类模型 给定样本,每个样本都是m为特征向量,模型目标是将n个样本分到k个不停的类或簇中,每个样本到其所属类的中心的距离最小,每个样本只能属于一个类.用C表示 ...

  7. 100天搞定机器学习|day54 聚类系列:层次聚类原理及案例

    几张GIF理解K-均值聚类原理 k均值聚类数学推导与python实现 前文说了k均值聚类,他是基于中心的聚类方法,通过迭代将样本分到k个类中,使每个样本与其所属类的中心或均值最近. 今天我们看一下无监 ...

  8. 基于改进人工蜂群算法的K均值聚类算法(附MATLAB版源代码)

    其实一直以来也没有准备在园子里发这样的文章,相对来说,算法改进放在园子里还是会稍稍显得格格不入.但是最近邮箱收到的几封邮件让我觉得有必要通过我的博客把过去做过的东西分享出去更给更多需要的人.从论文刊登 ...

  9. 【转】算法杂货铺——k均值聚类(K-means)

    k均值聚类(K-means) 4.1.摘要 在前面的文章中,介绍了三种常见的分类算法.分类作为一种监督学习方法,要求必须事先明确知道各个类别的信息,并且断言所有待分类项都有一个类别与之对应.但是很多时 ...

随机推荐

  1. leepcode(斐波那契数列与float("inf")无穷大)解析

    12.加一 给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一. 最高位数字存放在数组的首位, 数组中每个元素只存储一个数字. 你可以假设除了整数 0 之外,这个整数不会以零开头. 示例 ...

  2. if else elif 用法和区别

    1.If语句:“如果条件为真,执行子句中的代码."始终包含以下部分: if关键字: 条件(即求值为True或False的表达式): 冒号: 在下一行开始,缩进的代码块(称为if子句) 例如: ...

  3. 入门人工智能的首选语言为什么会是Python?

    为何人工智能(AI)首选Python?当你读完这篇文章就会明白了.为何人工智能(AI)首选Python?读完这篇文章你就知道了.我们看谷歌的TensorFlow基本上所有的代码都是C++和Python ...

  4. Python基础之字符编码,文件操作流与函数

    一.字符编码 1.字符编码的发展史 阶段一:现代计算机起源于美国,最早诞生也是基于英文考虑的ASCII ASCII:一个Bytes代表一个字符(英文字符/键盘上的所有其他字符),1Bytes=8bit ...

  5. rocketmq 问题

    1. 收不到消息-consumerOffset.json 信息错位 这种情况一般是,手动删除了store/commitlog目录里的数据等非常规手段造成了consumerOffset.json中记录的 ...

  6. Python基础数据类型之字符串

    Python基础数据类型之字符串 一.Python如何创建字符串 在python中用引号将一些文本包起来就构成了字符串(引号可以是单引号.双引号.单三引号,双三引号,它们是完全相同的) >> ...

  7. nginx报错 too many open files in system

    系统进不去了,用ssh连接服务器也非常慢,负载均衡显示后端连接异常,重启mysql数据库,发现经常重启,或者直接关机,访问页面也访问不到. http://www.51testing.com/html/ ...

  8. J2EE 中间件 JVM 集群

    [转]J2EE 中间件 JVM 集群 博客分类: 企业应用面临的问题 Java&Socket 开源组件的应用 jvm应用服务器weblogicjvm集群 1 前言 越来越多的关键任务和大型应用 ...

  9. iOS中的过滤器和正则表达式(NSPredicate,NSRegularExpression)

    参考链接:http://www.cocoachina.com/industry/20140321/8024.html NSPredicate Cocoa提供了一个NSPredicate类,它用来指定过 ...

  10. POJ 1006 生理周期【数论】

    这题是有中文版的(右上角选项卡里把default改成简体中文)然后看到他把biorhythms翻成生理周期我可耻的笑了......23333 如果没有限定从日期d开始,完全可以从第一天起开始计时,因此 ...