Spark MLlib之K-Means聚类算法 | 程序员的自我修养 | 关注Java、大数据、机器学习
程序员的自我修养
Home » Apache Spark, 机器学习 » Spark MLlib之K-Means聚类算法

Spark MLlib之K-Means聚类算法

7条评论27,154次浏览

聚类算法

聚类,Cluster analysis,有时也被翻译为簇类,其核心任务是:将一组目标object划分为若干个簇,每个簇之间的object尽可能的相似,簇与簇之间的object尽可能的相异。聚类算法是机器学习(或者说是数据挖掘更合适)中重要的一部分,除了最为简单的K-Means聚类算法外,较常见的还有:层次法(CURE、CHAMELEON等)、网格算法(STING、WaveCluster等)等等。

较权威的聚类问题定义:所谓聚类问题,就是给定一个元素集合D,其中每个元素具有n个可观察属性,使用某种算法将D划分成k个子集,要求每个子集内部的元素之间相异度尽可能低,而不同子集的元素相异度尽可能高。其中每个子集叫做一个簇。

与分类不同,分类是示例式学习,要求分类前明确各个类别,并断言每个元素映射到一个类别,而聚类是观察式学习,在聚类前可以不知道类别甚至不给定类别数量,是无监督学习的一种。目前聚类广泛应用于统计学、生物学、数据库技术和市场营销等领域,相应的算法也非常的多。

K-Means

K-Means属于基于平方误差的迭代重分配聚类算法,其核心思想十分简单:

  1. 随机选择K个中心点
  2. 计算所有点到这K个中心点的距离,选择距离最近的中心点为其所在的簇
  3. 简单的采用算术平均数(mean)来重新计算K个簇的中心
  4. 重复步骤2和3,直至簇类不在发生变化或者达到最大迭代值
  5. 输出结果

K-Means算法的结果好坏依赖于对初始聚类中心的选择,容易陷入局部最优解,对K值的选择没有准则可依循,对异常数据较为敏感,只能处理数值属性的数据,聚类结构可能不平衡。

这里有一个K-Means的演示,需要安装Java Applet。

Spark实现K-Means算法

测试数据

如前文所述,测试数据不用带标签,数据分为3个维度。

代码示例

结果

人为捏造的测试数据所想表现出来的簇类完全被k-means算法体会到了,若是人工将测试数据分成3个簇类,结果也会与上面一样。

最后

K-Means属于无监督学习,最大的特别和优势在于模型的建立不需要训练数据。在日常工作中,很多情况下没有办法事先获取到有效的训练数据,这时采用K-Means是一个不错的选择。但K-Means需要预先设置有多少个簇类(K值),这对于像计算某省份全部电信用户的交往圈这样的场景就完全的没办法用K-Means进行。对于可以确定K值不会太大但不明确精确的K值的场景,可以进行迭代运算,然后找出cost最小时所对应的K值,这个值往往能较好的描述有多少个簇类。

参考资料

(转载本站文章请注明作者和出处 程序员的自我修养 – SelfUp.cn ,请勿用于任何商业用途)
7条评论
  1. KLordy说道:

    博主你好, 最近在学习Spark MLlib算法相关内容 想咨询一下你对SVM在Spark集群上运行的流程是否了解, 例如:给定一个数据样本集,Master是先进行分析生成DAG、TASKScheduler等,然后再对数据样本集进行随机划分然后将划分的样本的分类任务分配给所有空闲的Worker节点让他们计算么?如果是这样 那在Worker节点对数据进行的操作是为了得到什么,因为最终结果是要得到一个最终的分类超平面 那难道在Worker节点中也是对划分的数据进行一次SVM算法流程的处理得到一个平面,然后返回给Master再对所有得到的结果进行进一步分析得到最终需要求的超平面函数么? 可能我的问题讲的有点乱,希望博主有时间能回复我一二。。。这个问题困扰我很久了。。。一直不知道如何理解。看了博主分享的自己的成长历程中的这么多博客,在此感谢博主热心的分享。

  2. 匿名说道:

    他是直接调用的,这就是程序猿

  3. 匿名说道:

    不错

  4. 匿名说道:

    运行报错:java.lang.AbstractMethodError

发表评论给匿名


profile
  • 文章总数:81篇
  • 评论总数:279条
  • 分类总数:32个
  • 标签总数:45个
  • 运行时间:1516天

大家好,欢迎来到selfup.cn。

这不是一个只谈技术的博客,这里记录我成长的点点滴滴,coding、riding and everthing!

最新评论
  • Anonymous: :roll:
  • Anonymous: :razz: :evil: :smile: :grin: :???:
  • Anonymous: 运行报错:java.lang.Abstr actMethodError
  • Anonymous: :arrow:
  • Anonymous: :oops:
  • Anonymous: :smile: :smile: :smile: :smile:
  • Anonymous: :mrgreen: :twisted: :razz:
  • zzg: 请问zz你问题核实了没 我也遇到了这个奇葩 问题,我们也是基...
  • Anonymous: :?: :sad: :evil:
  • kuyuzasur: what do i tell doctor to get viagra. edhelprie.mdhelpserv.com – how long we can take viagra,
  • Anonymous: 这个问题可以忽略。不 影响
  • Anonymous: :?: :razz: :sad:
  • Anonymous: 牛
  • Anonymous: 楼主你好,我偶尔也会 遇到Reconnect due to socket error: java.nio.channels.ClosedCha...
  • Anonymous: sdfs
  • Anonymous: :arrow: :neutral: :cry:
  • Anonymous: java.io.NotSerializableExcepti on: DStream checkpointing has been enabled but the DStreams with their...
  • wick: HI,请问一下,U,S,V得到 ,怎么得到近似矩阵 (用spark java),谢谢。
  • Michael Whitaker: Thank you for this blog, it was very helpful in troubleshooting my own issues. It seems that no...
  • Anonymous: :mad: