KMeans|| in Spark MLLib
算法跟传统的kmeans的区别主要在于:kmeans||的k个中心的不是随机初始化的。而是选择了k个彼此“足够”分离的中心。
org.apache.spark.mllib.clustering.KMeans
private[org.apache.spark.mllib.clustering]
def initKMeansParallel(data: RDD[VectorWithNorm]): Array[VectorWithNorm]
Initialize a set of cluster centers using the k-means|| algorithm by
Bahmani et al. (Bahmani et al., Scalable K-Means++, VLDB 2012).
This is a variant of k-means++ that tries to find dissimilar cluster centers
by starting with a random center and then doing passes where more centers
are chosen with probability proportional to their squared distance to the
current cluster set. It results in a provable approximation to an optimal
clustering. The original paper can be found at
http://theory.stanford.edu/~sergei/papers/vldb12-kmpar.pdf.
初始中心的选择
通过几次循环来实现:
- 随机选择一个点D_j作为初始化中心,centers={D_j}; 每个点的代价向量costs={cost_1,...}, cost_i表示第i个点的代价(距离当前最近center的距离),初始cost_i=正无穷;
- 计算每个点到当前中心的代价:
cost_i := min(cost_i, cost_of(Di, newCenters))
def: cost_of 某个点到当前最近中心的距离。
-- sum_cost = sum_i{c_i}
-- 更新costs={cost_1,...} - 选择候选的中心点,对某个点Di,及其cost_i,该点被选中的概率是:
P_i=2 * cost_i * k / sum_cost
选择之后,形成新的newCenters.
循环执行上述2,3步骤(参数配置循环次数,默认2次)。得到一组候选点。在此基础上执行本地(非分布式)Kmeans算法,最终得到k个点作为初始化的中心点。
然后再次基础上运行传统的KMeams算法.
P_i=2 * cost_i * k / sum_cost的解释:
每个点被选中的概率正比于它跟当前最近的中心点的距离,距离越远被选中的概率越大,也就是倾向于选中更离散的点。
每次循环后选中的点的数量期望是2 * k,假设循环10次,那么期望选中20k个候选点,然后在此基础上运行local的kmeans算法选择其中k个点作为后续分布式kmeans的初始中心点集合。
KMeans|| in Spark MLLib的更多相关文章
- 使用 Spark MLlib 做 K-means 聚类分析[转]
原文地址:https://www.ibm.com/developerworks/cn/opensource/os-cn-spark-practice4/ 引言 提起机器学习 (Machine Lear ...
- spark mllib k-means算法实现
package iie.udps.example.spark.mllib; import java.util.regex.Pattern; import org.apache.spark.SparkC ...
- 3 分钟学会调用 Apache Spark MLlib KMeans
Apache Spark MLlib是Apache Spark体系中重要的一块拼图:提供了机器学习的模块.只是,眼下对此网上介绍的文章不是非常多.拿KMeans来说,网上有些文章提供了一些演示样例程序 ...
- Spark MLlib KMeans 聚类算法
一.简介 KMeans 算法的基本思想是初始随机给定K个簇中心,按照最邻近原则把分类样本点分到各个簇.然后按平均法重新计算各个簇的质心,从而确定新的簇心.一直迭代,直到簇心的移动距离小于某个给定的值. ...
- Spark MLlib聚类KMeans
算法说明 聚类(Cluster analysis)有时也被翻译为簇类,其核心任务是:将一组目标object划分为若干个簇,每个簇之间的object尽可能相似,簇与簇之间的object尽可能相异.聚类算 ...
- Spark MLlib中KMeans聚类算法的解析和应用
聚类算法是机器学习中的一种无监督学习算法,它在数据科学领域应用场景很广泛,比如基于用户购买行为.兴趣等来构建推荐系统. 核心思想可以理解为,在给定的数据集中(数据集中的每个元素有可被观察的n个属性), ...
- Spark Mllib里如何生成KMeans的训练样本数据、生成线性回归的训练样本数据、生成逻辑回归的训练样本数据和其他数据生成
不多说,直接上干货! 具体,见 Spark Mllib机器学习(算法.源码及实战详解)的第2章 Spark数据操作
- 《Spark MLlib机器学习实践》内容简介、目录
http://product.dangdang.com/23829918.html Spark作为新兴的.应用范围最为广泛的大数据处理开源框架引起了广泛的关注,它吸引了大量程序设计和开发人员进行相 ...
- Spark入门实战系列--8.Spark MLlib(上)--机器学习及SparkMLlib简介
[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .机器学习概念 1.1 机器学习的定义 在维基百科上对机器学习提出以下几种定义: l“机器学 ...
随机推荐
- 1D Blending
[1D Blending] BlendTree有类型之分,分为1D.2D.本文记录1D. 1D Blending blends the child motions according to a sin ...
- dhtmlx uploader使用
前端:{type : "upload", mode : "html4", name : "importFile", inputWidth : ...
- css写三角形
#triangle-up { width: 0; height: 0; border-left: 50px solid transparent; border-right: 5 ...
- 如何移除 input type="number" 时浏览器自带的上下箭头?
Chrome 下 input::-webkit-outer-spin-button, input::-webkit-inner-spin-button { -webkit-appearance: no ...
- ILSpy 反编译.NET
ILSpy 是一个开源的.NET反编译工具,简洁强大易用是它的特征.在绝大多数情况下,它都能很好的完成你对未知程序集内部代码的探索.
- 泛型约束where条件的使用(通过类型参数动态反射创建实例)
定义抽象的人类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...
- 4.spring对象的创建(静态工厂 实例工厂 泛型,嵌套类型)
1.原料类 namespace CreateObjects{ public class GenericClass<T> { }} PersonDao 类 包含嵌套类型 name ...
- 为什么const对象只能调用const成员函数,而不能调用非const成员函数?
在c++中,我们可以用const来定义一个const对象,const对象是不可以调用类中的非const成员函数,这是为什么呢?下面是我总结的一些原理. 假设有一个类,名字为test代码如下: clas ...
- 2018.09.24 codeforces 1053C. Putting Boxes Together(线段树)
传送门 就是让你维护动态的区间带权中位数. 然而昨晚比赛时并没有调出来. 想找到带权中位数的中点可以二分(也可以直接在线段树上找). 也就是二分出第一个断点,使得断点左边的和恰好大于或等于断点右边的和 ...
- 2018.07.22 洛谷P3106 GPS的决斗Dueling GPS's(最短路)
传送门 图论模拟题. 这题直接写3个(可以压成一个)spfa" role="presentation" style="position: relative;&q ...