mahout in Action2.2-聚类介绍-K-means聚类算法
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聚类算法的更多相关文章
- 聚类之K均值聚类和EM算法
这篇博客整理K均值聚类的内容,包括: 1.K均值聚类的原理: 2.初始类中心的选择和类别数K的确定: 3.K均值聚类和EM算法.高斯混合模型的关系. 一.K均值聚类的原理 K均值聚类(K-means) ...
- 软件——机器学习与Python,聚类,K——means
K-means是一种聚类算法: 这里运用k-means进行31个城市的分类 城市的数据保存在city.txt文件中,内容如下: BJ,2959.19,730.79,749.41,513.34,467. ...
- 机器学习理论与实战(十)K均值聚类和二分K均值聚类
接下来就要说下无监督机器学习方法,所谓无监督机器学习前面也说过,就是没有标签的情况,对样本数据进行聚类分析.关联性分析等.主要包括K均值聚类(K-means clustering)和关联分析,这两大类 ...
- ML: 聚类算法R包-K中心点聚类
K-medodis与K-means比较相似,但是K-medoids和K-means是有区别的,不一样的地方在于中心点的选取,在K-means中,我们将中心点取为当前cluster中所有数据点的平均值, ...
- 机器学习之K均值聚类
聚类的核心概念是相似度或距离,有很多相似度或距离的方法,比如欧式距离.马氏距离.相关系数.余弦定理.层次聚类和K均值聚类等 1. K均值聚类思想 K均值聚类的基本思想是,通过迭代的方法寻找K个 ...
- 100天搞定机器学习|day44 k均值聚类数学推导与python实现
[如何正确使用「K均值聚类」? 1.k均值聚类模型 给定样本,每个样本都是m为特征向量,模型目标是将n个样本分到k个不停的类或簇中,每个样本到其所属类的中心的距离最小,每个样本只能属于一个类.用C表示 ...
- 100天搞定机器学习|day54 聚类系列:层次聚类原理及案例
几张GIF理解K-均值聚类原理 k均值聚类数学推导与python实现 前文说了k均值聚类,他是基于中心的聚类方法,通过迭代将样本分到k个类中,使每个样本与其所属类的中心或均值最近. 今天我们看一下无监 ...
- 基于改进人工蜂群算法的K均值聚类算法(附MATLAB版源代码)
其实一直以来也没有准备在园子里发这样的文章,相对来说,算法改进放在园子里还是会稍稍显得格格不入.但是最近邮箱收到的几封邮件让我觉得有必要通过我的博客把过去做过的东西分享出去更给更多需要的人.从论文刊登 ...
- 【转】算法杂货铺——k均值聚类(K-means)
k均值聚类(K-means) 4.1.摘要 在前面的文章中,介绍了三种常见的分类算法.分类作为一种监督学习方法,要求必须事先明确知道各个类别的信息,并且断言所有待分类项都有一个类别与之对应.但是很多时 ...
随机推荐
- Python中单元测试出错了,会怎么样?
在上一篇中,我们看到了单元测试正常通过时的情况,如果我们边修改一下要测试的函数,然后再运行单元测试,会出现什么情况. 原say_hello_name.py def hello_name(name): ...
- Java并发编程的艺术 记录(一)
模拟死锁 package com.gjjun.concurrent; /** * 模拟死锁,来源于<Java并发编程的艺术> * @Author gjjun * @Create 2018/ ...
- adb 命令大全
传送门 --> https://github.com/mzlogin/awesome-adb ADB,即 Android Debug Bridge,它是 Android 开发/测试人员不可替代的 ...
- Python基础之(判断,循环,列表,字典)
一.python介绍 Python是一种简单易学,功能强大的编程语言,它有高效率的高层数据结构,简单而有效地实现面向对象编程.Python简洁的语法和对动态输入的支持,再加上解释性语言的本质,使得它在 ...
- android 之 service
在Activity中设置两个按钮,分别为启动和关闭Service: bt01.setOnClickListener(new Button.OnClickListener() { @Override ...
- Course Machine Learning Note
Machine Learning Note Introduction Introduction What is Machine Learning? Two definitions of Machine ...
- oracle表空间,分区表,以及索引的总结
表空间: Oracle的UNDOTBS01.DBF文件太大的解决办法 1..禁止undo tablespace自动增长 alter database datafile 'full_path ...
- 【机房收费系统 4】:VB获取标准北京时间,免除时间误差
导读:这又是师傅给我指出的一个问题,说实话,其实开始根本没有当回事,觉得麻烦,可是,等我完成了获取标准北京时间后,我发现,这一步,是必须的.谢谢师傅对我的严格要求,让我一步一步的成长起来! 一.事件缘 ...
- 彻底解决Request Too Long的问题
运行regedit,进入 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters , 1. 添加类型为 DWORD(3 ...
- BZOJ 4037 [HAOI2015]数字串拆分 ——动态规划
拆分的情况下,发现f数组本身并不是很好递推. 因为f(123)=f(123)/f(12+3)/f(1+2+3). 然后考虑f可以怎么表示f(n)=a0*M^n M为转移矩阵. 然后发现 f(x+y)= ...