算法描述
输入:簇的数目k和包含n个对象的数据库。
输出:k个簇,使平方误差准则最小。
算法步骤:
1.为每个聚类确定一个初始聚类中心,这样就有K 个初始聚类中心。
2.将样本集中的样本按照最小距离原则分配到最邻近聚类
3.使用每个聚类中的样本均值作为新的聚类中心。
4.重复步骤2.3直到聚类中心不再变化。
5.结束,得到K个聚类
伪代码
创建k个点作为起始质心(经常随机选择)
当任意一个点的簇分配结果发生改变时
对于数据集中的每个数据点
对每个质心
计算质心于数据点之间的距离
将数据点分配到距其最近的簇
对于每个簇,计算簇中所有点的均值并将均值作为质心
优点:容易实现
缺点:
K 是事先给定的,这个 K 值的选定是非常难以估计,常采用遗传算法(GA)进行初始化来改进
存在噪点时,可能收敛到局部最小值
在大规模的数据集上收敛较慢
适用数据类型:数值型数据
实例
题目
假设数据挖掘的任务是将如下的八个点(用(x,y)代表位置)聚类为三个类。
A1(2,10), A2(2,5), A3(8,4), B1(5,8), B2(7,5), B3(6,4), C1(1,2), C2(4,9)
距离函数是Euclidean函数。假设初始我们选择A1,B1,和C1为每个簇的中心,用k-means算法来给出
- 在第一次循环执行后的三个簇中心
- 最后的三个簇
解答
1、计算各点到初始聚类中心的距离,划分到距离最近的簇中去。
2、第一轮执行后的三个簇:
{A1}
{B1,A3,B2,B3,C2}
{C1,A2}
则其聚类中心为:
(2,10)(6,6)(1.5,3.5)
3、最后的三个簇为:
{A1,C2 ,B1}
{A3,B2,B3}
{C1,A2}