数据挖掘:Top 10 Algorithms in Data Mining(二)K-Means算法
来源:互联网 发布:张碧晨红玫瑰网络链接 编辑:程序博客网 时间:2024/05/18 14:45
先引用IDMer整理的图初步了解下K-means
K-means也被称为C-means,因为它的目标是要找到c个均值向量u1,u2,……uc。除上面提到的用处,k-means还常用于加速其它算法的收敛。聚类算法主要有两类:硬聚类和软聚类(FCM)。K-means属于前者。
K-means的两大难点是确定c的数值和避免算法的抖动(不稳定性)。对这两个问题都有大量的针对性的研究。
算法的伪代码为:
- Begin initialize n,c,u1,u2,……uc
- Do 按照最近邻ui分类n个样本
- 重新计算ui
- Until ui 不再改变
- Return u1,u2,……uc
- End
其复杂度为O(ndcT),d表示特征数量;T为迭代次数。实际应用中通常迭代次数都不会太多。
硬聚类k-means
在该算法中任意样本属于类别i的概率要么是1要么是0. 所以在计算过程中距离度量算法确定之后,只需要计算样本离哪类的聚类中心近就将该样本划分为哪类,即样本属于该类的概率为1,属于其它c-1类的概率都为0. 这样的规则使得计算简单。但最后的聚类结果容易出现局部最优。因此,在次基础上,模糊K-means被提出,我们通常我们称为FCM(Fuzzy C-Means)。
K-means聚类2维数据的迭代轨迹,图中用Voronoi网格标出分类结果。Voronoi单元中心即为聚类中心
软聚类FCM
在FCM中每个样本属于某类别的概率不是绝对的1或0,而是介于[0~1]之间的一个值。样本属于所有类别的概率和为1. 该样本在当前迭代中属于哪类的概率最大就将该样本划分到哪类中。
FCM算法伪代码:
- begin initialize n,c,b, u1,u2,……uc, P(wi|xj),i=1,2……c;j=1,2,……n
- 归一化, P(wi|xj)
- do 重新计算ui
- 重新计算P(wi|xj)
- until ui和P(wi|xj)变化很小
- return u1,u2,……uc
- End
常用的结束条件:
- u1,u2,……uc的变化小于某个阈值
- 迭代次数T大于某个阈值。
由于对不熟悉的样本的收敛速度未知,通常两个条件都会设置。K-means通常也被归类为迭代优化算法。
归一化公式 :
计算ui公式:
计算P(wi|xj)公式:
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 Clustering: http://www.cnblogs.com/vivounicorn/archive/2011/10/08/2201986.html
- 数据挖掘:Top 10 Algorithms in Data Mining(二)K-Means算法
- 数据挖掘:Top 10 Algorithms in Data Mining(三)SVM
- 数据挖掘:Top 10 Algorithms in Data Mining(六)PageRank
- 数据挖掘:Top 10 Algorithms in Data Mining(七)AdaBoost
- 数据挖掘:Top 10 Algorithms in Data Mining(五)EM算法
- 数据挖掘:Top 10 Algorithms in Data Mining(一)C4.5
- 数据挖掘:Top 10 Algorithms in Data Mining(四)Apriori 关联分析
- top 10 algorithms in data mining
- Top 10 algorithms in data mining
- 18 Candidates for the Top 10 Algorithms in Data Mining
- The Top Ten Algorithms in Data Mining
- 数据挖掘-K-means算法
- 数据挖掘算法-k-means
- 数据挖掘十大经典算法之二:K-means
- 数据挖掘十大经典算法(二)The k-means algorithm 即K-Means算法
- 数据挖掘(Data Mining)
- 数据挖掘(Data Mining)
- 【数据挖掘】k-means聚类算法
- android 屏幕方向切换 锁定方向
- C语言杂记
- java反射机制
- 2012年关于工作和学习的总结
- Flash IOS APPs Cookbook
- 数据挖掘:Top 10 Algorithms in Data Mining(二)K-Means算法
- ASIHTTPRequest 详解, http 请求终结者
- 如何使ofc2的Y轴支持中文
- 使用MAXDOP重复利用多处理器启用SQL Server数据压缩功能
- 假如我来架构12306网站(二) - 浅谈系统需求调研
- 实例变量和类变量区别的总结
- Windows7 64 中文版 + TortoiseSVN 64 英文版 + SVN Server 32 英文版安装过程
- ASIHttpRequest-创建和执行request
- 关于response.setHeader("Cache-Control","no-cache");(转载)