k-means和k-中心点算法是属于简单的迭代型聚类算法,它将一个给定的数据集分为用户指定的k个聚簇。实现和运行该算法都很简单,它的速度比较快,同时又易于修改,所以在实际应用中使用非常广泛。
K-means算法
k-means算法是硬聚类算法,是典型的基于原型的目标函数聚类算法的代表。它是数据点到原型的某种距离作为相似性的评价指标,即两个对象的距离越接近,其相似度就越大。算法采用误差平方和准侧函数作为聚类准则函数。
算法实现
输入:
k:簇的数目
D:包含n个对象的数据集
输出:k个簇的集合
方法:
(1):从D中任意选择k个对象作为初始簇中心
(2):repeat
(3): 根据簇中的对象的均值,将每个对象分配到最相似的簇
(4): 更新簇均值,即重新计算每个簇中对象的均值
(5):util不再发生变化
k-means方法是不保证收敛于全局最优解,并且它通常终止于一个局部最优解。结果可能依赖于初始簇中心的随机选取。
k-means算法的优点:
1:是聚类算法中的一种经典,快速,简单的算法
2:对处理大数据集,该算法保持可伸缩性和可扩展性
3:当簇接近高斯分布时,结果较好
k-means算法的缺点:
1:在簇的平均值可被定义的情况下才能使用,可能不适用于某些应用,比如说标量数据
2:在 K-means 算法中 K 是事先给定的,这个 K 值的选定是非常难以估计的。很多时候,事先并不知道给定的数据集应该分成多少个类别才最合适。
3:在 K-means 算法中,首先需要根据初始聚类中心来确定一个初始划分,然后对初始划分进行优化。这个初始聚类中心的选择对聚类结果有较大的影响,一旦初始值选择的不好,可能无法得到有效的聚类结果。
4:该算法需要不断地进行样本分类调整,不断地计算调整后的新的聚类中心,因此当数据量非常大时,算法的时间开销是非常大的。
5:若簇中含有异常点,将导致均值偏离严重(即:对噪声和孤立点数据敏感)。
6:不适用于发现非凸形状的簇或者大小差别很大的簇。
k-means算法的改进
1、很多时候