k均值算法,k-means算法原理

一 经典的k-均值聚类  

 思路:  



  1 随机创建k个质心(k必须指定,二维的很容易确定,可视化数据分布,直观确定即可);


  2 遍历数据集的每个实例,计算其到每个质心的相似度,这里也就是欧氏距离;把每个实例都分配到距离最近的质心的那一类,用一个二维数组数据结构保存,第一列是最近质心序号,第二列是距离;


  3 根据二维数组保存的数据,重新计算每个聚簇新的质心;


  4 迭代2 和 3,直到收敛,即质心不再变化;



二 二分k-均值聚类算法

  二分k-均值聚类算法是基于经典k-均值算法实现的;里面调用经典k-均值(k=2),把一个聚簇分成两个,迭代到分成k个停止;

  具体思路:

  1 把整个数据集看成一个聚簇,计算质心;并用同样的数据结构二维数组保存每个实例到质心的距离;

  2 对每一个聚簇进行2-均值聚类划分;

  3 计算划分后的误差,选择所有被划分的聚簇中总误差最小的划分保存;

  4 迭代2 和 3 直到聚簇数目达到k停止;

首先二分-K均值是为了解决k-均值的用户自定义输入簇值k所延伸出来的自己判断k数目,其基本思路是:

为了得到k个簇,将所有点的集合分裂成两个簇,从这些簇中选取一个继续分裂,如此下去,直到产生k个簇。


伪代码:

初始化簇表,使之包含由所有的点组成的簇。
repeat
   从簇表中取出一个簇。
   {对选定的簇进行多次二分试验}
   for i=1 to 试验次数 do
       使用基本k均值,二分选定的簇。
   endfor
   从二分试验中选择具有最小误差的两个簇。
   将这两个簇添加到簇表中。
until 簇表中包含k个簇
比如要分成5个组,第一次分裂产生2个组,然后从这2个组中选一个目标函数产生的误差比较大的,分裂这个组产生2个,这样加上开始那1个就有3个组了,然后再从这3个组里选一个分裂,产生4个组,重复此过程,产生5个组。这算是一中基本求精的思想。二分k均值不太受初始化的困扰,因为它执行了多次二分试验并选取具有最小误差的试验结果,还因为每步只有两个质心。


优缺点

基础k-means
优点:原理简单,实现容易
缺点:
1.收敛太慢
2.算法复杂度高O(nkt)
3.不能发现非凸形状的簇,或大小差别很大的簇
4.需样本存在均值(限定数据种类)
6.需先确定k的个数
7.对噪声和离群点敏感
8.最重要是结果不一定是全局最优,只能保证局部最优。


Spark应用k-means算法


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值