一.简介

  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 聚类算法的更多相关文章

  1. Spark MLBase分布式机器学习系统入门:以MLlib实现Kmeans聚类算法

    1.什么是MLBaseMLBase是Spark生态圈的一部分,专注于机器学习,包含三个组件:MLlib.MLI.ML Optimizer. ML Optimizer: This layer aims ...

  2. K-Means 聚类算法

    K-Means 概念定义: K-Means 是一种基于距离的排他的聚类划分方法. 上面的 K-Means 描述中包含了几个概念: 聚类(Clustering):K-Means 是一种聚类分析(Clus ...

  3. k-means聚类算法python实现

    K-means聚类算法 算法优缺点: 优点:容易实现缺点:可能收敛到局部最小值,在大规模数据集上收敛较慢使用数据类型:数值型数据 算法思想 k-means算法实际上就是通过计算不同样本间的距离来判断他 ...

  4. K-Means 聚类算法原理分析与代码实现

    前言 在前面的文章中,涉及到的机器学习算法均为监督学习算法. 所谓监督学习,就是有训练过程的学习.再确切点,就是有 "分类标签集" 的学习. 现在开始,将进入到非监督学习领域.从经 ...

  5. Kmeans聚类算法原理与实现

    Kmeans聚类算法 1 Kmeans聚类算法的基本原理 K-means算法是最为经典的基于划分的聚类方法,是十大经典数据挖掘算法之一.K-means算法的基本思想是:以空间中k个点为中心进行聚类,对 ...

  6. 机器学习六--K-means聚类算法

    机器学习六--K-means聚类算法 想想常见的分类算法有决策树.Logistic回归.SVM.贝叶斯等.分类作为一种监督学习方法,要求必须事先明确知道各个类别的信息,并且断言所有待分类项都有一个类别 ...

  7. 转载: scikit-learn学习之K-means聚类算法与 Mini Batch K-Means算法

    版权声明:<—— 本文为作者呕心沥血打造,若要转载,请注明出处@http://blog.csdn.net/gamer_gyt <—— 目录(?)[+] ================== ...

  8. 沙湖王 | 用Scipy实现K-means聚类算法

    沙湖王 | 用Scipy实现K-means聚类算法 用Scipy实现K-means聚类算法

  9. Matlab中K-means聚类算法的使用(K-均值聚类)

    K-means聚类算法采用的是将N*P的矩阵X划分为K个类,使得类内对象之间的距离最大,而类之间的距离最小. 使用方法:Idx=Kmeans(X,K)[Idx,C]=Kmeans(X,K) [Idx, ...

随机推荐

  1. vue 中使用sass实现主体换肤

    有如下代码要实现换肤功能 <template> <div class="app-root" :class="themeClass"> & ...

  2. 关于ios的光标和键盘回弹问题

    最近再做项目的时候(移动端),遇到了两个小问题,一个是ios端键盘不回弹的问题(微信浏览器),另一个是ios输入光标位置问题.首先看第二个问题: 就是点击一个按钮,要把输入框里面原来的内容加上一些固定 ...

  3. Ubuntu 16.04 安装Gitlab

    这里选用Ubuntu16.04系统 安装Gig sudo apt-get install git 安装gitlab 1,安装依赖包,运行如下命令 sudo apt-get install curl o ...

  4. 【原】无脑操作:ElasticSearch学习笔记(01)

    开篇来自于经典的“保安的哲学三问”(你是谁,在哪儿,要干嘛) 问题一.ElasticSearch是什么?有什么用处? 答:截至2018年12月28日,从ElasticSearch官网(https:// ...

  5. 数据库MySQL(课下作业)

    一.作业要求 下载附件中的world.sql.zip, 参考http://www.cnblogs.com/rocedu/p/6371315.html#SECDB,导入world.sql,提交导入成功截 ...

  6. AI应用开发实战 - 手写算式计算器

    扩展手写数字识别应用 识别并计算简单手写数学表达式 主要知识点 了解MNIST数据集 了解如何扩展数据集 实现手写算式计算器 简介 本文将介绍一例支持识别手写数学表达式并对其进行计算的人工智能应用的开 ...

  7. vue学习笔记2

    Vue.js - Day2 品牌管理案例 添加新品牌 删除品牌 根据条件筛选品牌 1.x 版本中的filterBy指令,在2.x中已经被废除: filterBy - 指令 <tr v-for=& ...

  8. height:auto 火狐没边框

    css高度设置为auto后,设置的边框 ie正常 火狐 就没有边框了,解决方法 之前是这样写的 #right_bottom { width: 790px; height:auto; border: # ...

  9. python2到python3代码转化:2to3

    Mac系统上: 安装完python3后,2to3可以作为指令直接执行,-w代表"Write back modified files","."代表当前整个文件夹, ...

  10. .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划

    作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/9977862.html 写在前面 千呼万唤始出来,首先,请允许我长吸一口气!真没想到一份来自28岁老程序员 ...