K-means算法是最为经典的基于划分的聚类方法,是十大经典数据挖掘算法之一。
K-means算法的基本思想是:以空间中k个点为中心进行聚类,对最靠近他们的对象归类。通过迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类结果。matlab中有kmeans聚类算法的函数可以调用,如[ldx,C,sumD,D]=kmeans(X,k)(详见matlab help kmeans)。以下链接是一个用java写的聚类演示K-means demo。
对于该算法存在的缺点可以使用ISODATA(迭代自组织数据分析算法)来确定聚类数目K,使用K-means++算法或者遗传算法(GA)来选择初始中心。
K-means算法流程:
1.初始化:选择合适的方法设置K个初始的码本中心zi,1<=i<=K;
2.最近邻分类:将训练数据矢量xt按照最近邻原则分配到最近的码本zi中,此步骤中可以采用欧式距离、马氏距离等。
3.码本更新:将所有的训练数据分配到离其最近的码本后,生成新的质心,即新的码本。
4.重复2、3直到相邻的迭代误差满足阈值要求。
ISODATA算法:
isodata(跌代自组织分析),通过设定初始参数使用归并与分裂的机制。当某两类聚类中心距离小于某一阈值时,将它们合并为一类;当某类标准差大于某一阈值或其样本数目超过某一阈值时,将其分为两类;在某类样本数目少于某阈值时,需将其取消。
K-means++算法流程:
1.给定初始点的集合D
2.随机从点集D中选择一个点作为初始的中心点
3.计算每一个点到最近中心点的距离Si
4.求和Si得到Sum
5.取随机值Random(0 < Random < Sum)
6.循环点集D,做Random -= Si(更新后的Si)运算直到Random < 0,那么点i就是下一个中心点
7.循环3-6,直到去除所有的K个中心点
8.进行K-means算法
参考:K-means算法