基于MapReduce的k-means的并行化实现

传统k-means的算法原理:

输入:k

输出:k个簇

过程:首先人为指定k个对象作为簇中心;然后计算每个对象到所有簇中心的距离,每个对象中,距离最小的簇中心为该对象的簇中心,并把该对象划分到该簇中;

           对分好的所有簇进行重新计算,得到新的簇中心 ,然后重复上述过程;直到所有簇中心不变。

分析:上述算法中,有些必须串行化实现,有些可以并行化。串行化的部分必须通过轮与轮之间的迭代实现,并行化的部分可以通过MR的每一轮实现。迭代与迭代之间属于串行的;
每一轮迭代中,都会计算所有对象与中心点之间的距离,而这些是不相关的,所以计算每个对象和中心之间的距离可以并行化实现。

基于MR的k-means算法的并行化设计:

map任务:对每个对象做相同的计算,即,计算该对象与所有中心的距离,选择距离最小者,并把该中心作为该对象所在簇的中心。
输入:所有的簇中心,key-偏移;value-对象值
输出:key-该对象的簇中心,value-该对象的其他一些信息

combine的作用:计算有相同簇中心的所有对象的距离之和,以及这些对象的数目
输入:上一轮map的输出<key,value>做过shuffle处理后的值<key,V>,V是相同簇中心的对象列表。
输出:<key,value>,key还是簇中心的index,value是对象距离之和以及对象数目的组合。
过程:初始化数组,且存放所有对象;初始化int型变量为0,用来存放对象数目。通过循环,求和且数目。

reduce作用:计算新的簇中心,并且更新
输入:<key,value>,key是簇中心index,value是上述combine输出的那些来自相同主机的value组成的列表
输出:<key,value>,key是所哟簇中心的index,value是更新后的簇中心得距离。


多次迭代,设置收敛条件即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值