Spark MLlib KMeans 聚类算法
一.简介
KMeans 算法的基本思想是初始随机给定K个簇中心,按照最邻近原则把分类样本点分到各个簇。然后按平均法重新计算各个簇的质心,从而确定新的簇心。一直迭代,直到簇心的移动距离小于某个给定的值。
二.步骤
1.为待聚类的点寻找聚类中心。
2.计算每个点到聚类中心的距离,将每个点聚类到该点最近的聚类中。
3.计算每个聚类中所有点的坐标平均值,并将这个平均值作为新的聚类中心。
4.反复执行步骤2,3,直到聚类中心不再进行大范围移动或者聚类迭代次数达到要求为止。
三.演示

四.初始中心点选择
1.随机选择k个点作为中心点。
对应算法:KMeans
2.采用k-means++选择中心点。
基本思想:初始的聚类中心点之间的相互距离要尽可能远。
步骤:
1.从输入的数据点集合中随机选择一个点作为第一个聚类中心点。
2.对于数据点中的每一个点【已选择为中心点的除外】x,计算它与最近聚类中心点的距离D(x)。
3.选择一个新的数据点为聚类的中心点,原则是D(x)较大的点,被选择的概率较大。
4.重复步骤2,3,直到所有的聚类中心点被选择出来。
5.使用这k个初始中心点运行标准的KMeans算法。
五.D(x)映射被选择的概率
1.从输入的数据点集合D中随机选择一个点作为第一个聚类中心点。
2.对于数据点中的每一个点【已选择为中心点的除外】x,计算它与最近聚类中心点的距离Si,对所有Si求和得到sum。
3.取一个随机数,用权重的方式计算下一个中心点。取随机值random(0<random<sum),对点集D循环,做random-=Si运算,直到random<0,那么点i就是下一个中心点。
六.源码分析
1.MLlib的KMeans聚类模型的runs参数可以设置并行计算聚类中心的数量,runs代表同时计算多组聚类中心点,最后去计算结果最好的那一组中心点作为聚类的中心点。
2.KMeans快速查找,计算距离


七.代码测试
1.测试数据
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
4.5 5.6 4.3
2.代码实现
package big.data.analyse.mllib
import org.apache.log4j.{Level, Logger}
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.mllib.clustering.{KMeans, KMeansModel}
import org.apache.spark.mllib.linalg.Vectors
/**
* Created by zhen on 2019/4/11.
*/
object KMeansTest {
Logger.getLogger("org").setLevel(Level.WARN)
def main(args: Array[String]) {
val conf = new SparkConf().setAppName("KMeansExample")
conf.setMaster("local[2]")
val sc = new SparkContext(conf)
// Load and parse the data
val data = sc.textFile("data/mllib/kmeans_data.txt")
val parsedData = data.map(s => Vectors.dense(s.split(' ').map(_.toDouble))).cache()
// split data to train data and test data
val weights = Array(0.8, 0.2)
val splitParseData = parsedData.randomSplit(weights)
// Cluster the data into two classes using KMeans
val numClusters = 2
val numIterations = 20
val clusters = KMeans.train(parsedData, numClusters, numIterations)
// Evaluate clustering by computing Within Set Sum of Squared Errors
val WSSSE = clusters.computeCost(parsedData)
println("Within Set Sum of Squared Errors = " + WSSSE)
// predict data
val result = clusters.predict(parsedData)
result.foreach(println(_))
// Save and load model
clusters.save(sc, "target/KMeansModel")
val sameModel = KMeansModel.load(sc, "target/KMeansModel")
sc.stop()
}
}
3.结果

八.总结
聚类作为无监督的机器学习算法,只能根据具体的算法实现对不同数据进行分类,不能具体指出类内不同数据的相似性,以及与其它类内节点的差异性。
Spark MLlib KMeans 聚类算法的更多相关文章
- Spark MLBase分布式机器学习系统入门:以MLlib实现Kmeans聚类算法
1.什么是MLBaseMLBase是Spark生态圈的一部分,专注于机器学习,包含三个组件:MLlib.MLI.ML Optimizer. ML Optimizer: This layer aims ...
- K-Means 聚类算法
K-Means 概念定义: K-Means 是一种基于距离的排他的聚类划分方法. 上面的 K-Means 描述中包含了几个概念: 聚类(Clustering):K-Means 是一种聚类分析(Clus ...
- k-means聚类算法python实现
K-means聚类算法 算法优缺点: 优点:容易实现缺点:可能收敛到局部最小值,在大规模数据集上收敛较慢使用数据类型:数值型数据 算法思想 k-means算法实际上就是通过计算不同样本间的距离来判断他 ...
- K-Means 聚类算法原理分析与代码实现
前言 在前面的文章中,涉及到的机器学习算法均为监督学习算法. 所谓监督学习,就是有训练过程的学习.再确切点,就是有 "分类标签集" 的学习. 现在开始,将进入到非监督学习领域.从经 ...
- Kmeans聚类算法原理与实现
Kmeans聚类算法 1 Kmeans聚类算法的基本原理 K-means算法是最为经典的基于划分的聚类方法,是十大经典数据挖掘算法之一.K-means算法的基本思想是:以空间中k个点为中心进行聚类,对 ...
- 机器学习六--K-means聚类算法
机器学习六--K-means聚类算法 想想常见的分类算法有决策树.Logistic回归.SVM.贝叶斯等.分类作为一种监督学习方法,要求必须事先明确知道各个类别的信息,并且断言所有待分类项都有一个类别 ...
- 转载: scikit-learn学习之K-means聚类算法与 Mini Batch K-Means算法
版权声明:<—— 本文为作者呕心沥血打造,若要转载,请注明出处@http://blog.csdn.net/gamer_gyt <—— 目录(?)[+] ================== ...
- 沙湖王 | 用Scipy实现K-means聚类算法
沙湖王 | 用Scipy实现K-means聚类算法 用Scipy实现K-means聚类算法
- Matlab中K-means聚类算法的使用(K-均值聚类)
K-means聚类算法采用的是将N*P的矩阵X划分为K个类,使得类内对象之间的距离最大,而类之间的距离最小. 使用方法:Idx=Kmeans(X,K)[Idx,C]=Kmeans(X,K) [Idx, ...
随机推荐
- 入门系列之使用Sysdig监视您的Ubuntu 16.04系统
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由乌鸦 发表于云+社区专栏 介绍 Sysdig是一个全面的开源系统活动监控,捕获和分析应用程序.它具有强大的过滤语言和可自定义的输出,以 ...
- GIS之家资源
分享资源之arcgis软件系列 arcgis10.0(arcgis desktop以及arcgis server):下载 arcgis10.1(arcgis desktop以及arcgis serve ...
- Echarts 南海诸岛简图显示位置调整
最近需要echart同时显示海南岛和南海诸岛,开始想寻找南海诸岛的数据,经过查找,这种简图数据是没有的(china.js地图数据一一找过了),下图是echarts的一些示例,没有满足我们的要求 ...
- salesforce初探
Salesforce的商业模式? 从做CRM SAAS起家,可以理解为在线CRM,不需要硬件和服务器,输入用户名和密码就能登陆使用.2007年推出PaaS平台Force.com,可以说,它依托CR ...
- Windows Server 2012 R2 安装密钥(只适用安装,不支持激活)
标准版 = NB4WH-BBBYV-3MPPC-9RCMV-46XCB 数据中心版 = BH9T4-4N7CW-67J3M-64J36-WW98Y
- 普通程序员如何转向AI方向(转)
普通程序员如何转向AI方向 眼下,人工智能已经成为越来越火的一个方向.普通程序员,如何转向人工智能方向,是知乎上的一个问题.本文是我对此问题的一个回答的归档版.相比原回答有所内容增加. 一. 目的 ...
- Java多线程系列(1)
本章主要内容有: 1.线程进程的区别 2.线程的生命周期 3.Java内存模型 原子性,可见性及有序性 4.线程池及Java实现 1. 线程进程的区别 线程:程序运行的最小单位 进程:资源分配的最小单 ...
- Android USB Headset: Device Specification
For USB headsets to work seamlessly across the Android ecosystem, Android devices must support them ...
- 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之二 || 后端项目搭建
前言 至于为什么要搭建.Net Core 平台,这个网上的解释以及铺天盖地,想了想,还是感觉重要的一点,跨平台,嗯!没错,而且比.Net 更容易搭建,速度也更快,所有的包均有Nuget提供,不再像以前 ...
- 【机器学习】--FP-groupth算法从初始到应用
一.前述 二.构建FP_groupth数流程 1.扫描事务数据库D 一次.收集频繁项的集合F 和它们的支持度.对F 按支持度降序排序,结果为频繁项表L. 2.创建FP 树的根节点,以“null”标记它 ...