SparkMLlib之K-Means聚类算法概要.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
SparkMLlib之K-Means聚类算法概要

Spark MLlib之K-Means聚类算法 本章要点 一、基本含义 二、K-Means 三、Spark协同过滤实现 基本含义 聚类算法 聚类,Cluster analysis,有时也被翻译为簇类,其核心任务是:将一组目标object划分为若干个簇,每个簇之间的object尽可能的相似,簇与簇之间的object尽可能的相异。聚类算法是机器学习(或者说是数据挖掘更合适)中重要的一部分,除了最为简单的K-Means聚类算法外,较常见的还有:层次法(CURE、CHAMELEON等)、网格算法(STING、WaveCluster等)等等。 较权威的聚类问题定义:所谓聚类问题,就是给定一个元素集合D,其中每个元素具有n个可观察属性,使用某种算法将D划分成k个子集,要求每个子集内部的元素之间相异度尽可能低,而不同子集的元素相异度尽可能高。其中每个子集叫做一个簇。 基本含义 与分类不同,分类是示例式学习,要求分类前明确各个类别,并断言每个元素映射到一个类别,而聚类是观察式学习,在聚类前可以不知道类别甚至不给定类别数量,是无监督学习的一种。目前聚类广泛应用于统计学、生物学、数据库技术和市场营销等领域,相应的算法也非常的多。 K-Means K-Means属于基于平方误差的迭代重分配聚类算法,其核心思想十分简单: 随机选择K个中心点 计算所有点到这K个中心点的距离,选择距离最近的中心点为其所在的簇 简单的采用算术平均数(mean)来重新计算K个簇的中心 重复步骤2和3,直至簇类不在发生变化或者达到最大迭代值 输出结果 K-Means算法的结果好坏依赖于对初始聚类中心的选择,容易陷入局部最优解,对K值的选择没有准则可依循,对异常数据较为敏感,只能处理数值属性的数据,聚类结构可能不平衡。 Spark实现K-Means算法 测试数据 0.0 0.0 0.0 0.1 0.1 0.1 0.2 0.2 0.2 9.0 9.0 9.0 9.1 9.1 9.1 9.2 9.2 9.2 15.1 16.1 17.0 18.0 17.0 19.0 20.0 21.0 22.0 测试数据不用带标签,数据分为3个维度。 Spark实现K-Means算法 public static void main(String[] args) { SparkConf sparkConf = new SparkConf() .setAppName(K-Means) .setMaster(local[2]); JavaSparkContext sc = new JavaSparkContext(sparkConf); JavaRDDString data = sc.textFile(/home/yurnom/data/kmeans_data.txt); JavaRDDVector parsedData = data.map(s - { double[] values = Arrays.asList(SPACE.split(s)) .stream() .mapToDouble(Double::parseDouble) .toArray(); return Vectors.dense(values); }); Spark实现K-Means算法 int numClusters = 3; //预测分为3个簇类 int numIterations = 20; //迭代20次 int runs = 10; //运行10次,选出最优解 KMeansModel clusters = KMeans.train(parsedData.rdd(), numClusters, numIterations, runs); //计算测试数据分别属于那个簇类 print(parsedData.map(v - v.toString() + belong to cluster : + clusters.predict(v)).collect()); //计算cost double wssse = puteCost(parsedData.rdd()); System.out.println(Within Set Sum of Squared Errors = + wssse); //打印出中心点 System.out.println(Cluster centers:); for (Vecto

文档评论(0)

yaocen + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档