数据挖掘:Top 10 Algorithms in Data Mining(二)K-Means算法
2013-01-07 10:34
525 查看
先引用IDMer整理的图初步了解下K-means
![](http://www.tnove.com/wp-content/uploads/2013/01/k1.png)
![](http://www.tnove.com/wp-includes/js/tinymce/plugins/wordpress/img/trans.gif)
![](http://www.tnove.com/wp-content/uploads/2013/01/k2.png)
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)。
![](http://www.tnove.com/wp-content/uploads/2013/01/k3.png)
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通常也被归类为迭代优化算法。
归一化公式 :
![](http://www.tnove.com/wp-content/uploads/2013/01/c1.jpg)
计算ui公式:
![](http://www.tnove.com/wp-content/uploads/2013/01/c2.jpg)
计算P(wi|xj)公式:
![](http://www.tnove.com/wp-content/uploads/2013/01/c3.jpg)
![](http://www.tnove.com/wp-content/uploads/2013/01/k4.png)
FCM聚类的迭代轨迹
关于FCM与k-means 性能的比较参考:http://www.eurojournals.com/ejsr_46_3_02.pdf
作为较早的基本算法,目前k-means和FCM都有较多实现。常用工具多有对其的支持,网上源码也较多。以matlab中FCM函数为100个随机树分2类的例子:
另外,开源项目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
![](http://www.tnove.com/wp-content/uploads/2013/01/k1.png)
![](http://www.tnove.com/wp-includes/js/tinymce/plugins/wordpress/img/trans.gif)
![](http://www.tnove.com/wp-content/uploads/2013/01/k2.png)
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)。
![](http://www.tnove.com/wp-content/uploads/2013/01/k3.png)
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通常也被归类为迭代优化算法。
归一化公式 :
![](http://www.tnove.com/wp-content/uploads/2013/01/c1.jpg)
计算ui公式:
![](http://www.tnove.com/wp-content/uploads/2013/01/c2.jpg)
计算P(wi|xj)公式:
![](http://www.tnove.com/wp-content/uploads/2013/01/c3.jpg)
![](http://www.tnove.com/wp-content/uploads/2013/01/k4.png)
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(三)SVM
- 数据挖掘:Top 10 Algorithms in Data Mining(四)Apriori 关联分析
- 数据挖掘:Top 10 Algorithms in Data Mining(一)C4.5
- 数据挖掘:Top 10 Algorithms in Data Mining(五)EM算法
- 数据挖掘:Top 10 Algorithms in Data Mining(六)PageRank
- 数据挖掘:Top 10 Algorithms in Data Mining(七)AdaBoost
- Top 10 algorithms in data mining
- Top 10 algorithms in data mining?
- Top 10 Algorithms in Data Mining
- top 10 algorithms in data mining
- 18 Candidates for the Top 10 Algorithms in Data Mining
- Mining Data Records in Web Pages ——挖掘网页中的数据记录
- 计算机视觉、人工智能、数据挖掘顶级会议(Computer Version & AI & Data Mining Top Conference)
- 数据挖掘:Top 10 Algorithms 序
- 计算机视觉、人工智能、数据挖掘顶级会议(Computer Version & AI & Data Mining Top Conference)
- The Top Ten Algorithms in Data Mining
- Learning Data Mining with Python-《Python数据挖掘入门与实践》学习后的分享
- Top 10 steps to optimize data access in SQL Server
- Top 10 steps to optimize data access in SQL Server: Part V (Optimize database files and apply partitioning)
- 随机交换检验数据挖掘结果-assessing data mining result via swap randomization