数据挖掘:Top 10 Algorithms in Data Mining(二)K-Means算法

本文深入探讨了K-means和FCM聚类算法的原理、难点、伪代码以及复杂度分析。通过实例展示了这两种算法在聚类任务中的应用,并对比了它们的性能。此外,介绍了算法的实现方式,包括Matlab和开源项目Mahout的分布式实现。文章旨在为读者提供全面的聚类算法理解。

先引用IDMer整理的图初步了解下K-means

k1

k2

K-means也被称为C-means,因为它的目标是要找到c个均值向量u1,u2,……uc。除上面提到的用处,k-means还常用于加速其它算法的收敛。聚类算法主要有两类:硬聚类和软聚类(FCM)。K-means属于前者。

K-means的两大难点是确定c的数值和避免算法的抖动(不稳定性)。对这两个问题都有大量的针对性的研究。

算法的伪代码为:

  1. Begin initialize n,c,u1,u2,……uc
  2.                Do 按照最近邻ui分类n个样本
  3.                               重新计算ui
  4.                Until u不再改变
  5.       Return u1,u2,……uc
  6. End

其复杂度为O(ndcT),d表示特征数量;T为迭代次数。实际应用中通常迭代次数都不会太多。

硬聚类k-means

  在该算法中任意样本属于类别i的概率要么是1要么是0. 所以在计算过程中距离度量算法确定之后,只需要计算样本离哪类的聚类中心近就将该样本划分为哪类,即样本属于该类的概率为1,属于其它c-1类的概率都为0. 这样的规则使得计算简单。但最后的聚类结果容易出现局部最优。因此,在次基础上,模糊K-means被提出,我们通常我们称为FCM(Fuzzy C-Means)。

k3

K-means聚类2维数据的迭代轨迹,图中用Voronoi网格标出分类结果。Voronoi单元中心即为聚类中心

软聚类FCM

在FCM中每个样本属于某类别的概率不是绝对的1或0,而是介于[0~1]之间的一个值。样本属于所有类别的概率和为1. 该样本在当前迭代中属于哪类的概率最大就将该样本划分到哪类中。

FCM算法伪代码:

  1.  begin initialize n,c,b, u1,u2,……ucP(wi|xj),i=1,2……c;j=1,2,……n
  2.                               归一化, P(wi|xj)
  3.                               do 重新计算ui
  4.                                              重新计算P(wi|xj)
  5.                               until uiP(wi|xj)变化很小
  6.                 return u1,u2,……uc
  7.  End

常用的结束条件:

  1. u1,u2,……uc的变化小于某个阈值
  2. 迭代次数T大于某个阈值。

由于对不熟悉的样本的收敛速度未知,通常两个条件都会设置。K-means通常也被归类为迭代优化算法。

归一化公式 :c1

计算ui公式:c2

计算P(wi|xj)公式:c3

k4 FCM聚类的迭代轨迹

关于FCM与k-means 性能的比较参考:http://www.eurojournals.com/ejsr_46_3_02.pdf

作为较早的基本算法,目前k-means和FCM都有较多实现。常用工具多有对其的支持,网上源码也较多。以matlab中FCM函数为100个随机树分2类的例子:

data = rand(100, 2);

[center,U,obj_fcn] = fcm(data, 2);

plot(data(:,1), data(:,2),'o');

maxU = max(U);

index1 = find(U(1,:) == maxU);

index2 = find(U(2, :) == maxU);

line(data(index1,1),data(index1, 2),'linestyle','none',...

     'marker','*','color','g');

line(data(index2,1),data(index2, 2),'linestyle','none',...

     'marker', '*','color','r');

另外,开源项目Mahout对K-Means进行了分布式实现。通过MapReduce实现的分布式K-means支持更大数据量的聚类。

更多信息参考:http://www.tnove.com/?cat=40

Wiki K-Means: http://en.wikipedia.org/wiki/K-means_clustering

Mahout学习——K-Means Clusteringhttp://www.cnblogs.com/vivounicorn/archive/2011/10/08/2201986.html



评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值