k-means算法

方法

把对象划分为k个非空的子集
随机的选择一些种子点作为目前划分的簇的质心。质心是簇的中心(平均点)
把每一个对象赋给最近的种子点
重复第二步,直到没有新的分配

优点

• 复杂度: \(O(tkn)\), 其中 n 是对象的数目, k 是簇的数目, t 是 迭代的次数. 通常 k, \(t << n\).
• 通常以局部最优结束. 使用遗传算法技术可以达到全局最优

缺点

• 只有在簇的平均值被定义的情况下才能使用,那当涉及有分类属性的数据时该怎么办?
• 需要事先给出k(簇的数目)
• 不能处理噪声数据和孤立点
• 不适合发现非凸面形状的簇

案例

假设数据挖掘的任务是将如下的 8 个点(用(x,y)代表位置)聚类为 3 个簇。A1(2,10), A2(2,5), A3(8,4), B1(5,8), B2(7,5), B3(6,4), C1(1,2), C2(9,4)距离是欧氏距离。假设初始我们选择 A1,B1 和 C1 分别为每个簇的中心,用 k-means 算法给出:
问题:
··A.在第一轮执行后的 3 个簇中心。
··B.最后的3个簇。

··A

image

可以得到簇中心分别为:(2,10),(7,5),(1.5,3.5)

··B

使用新的均值作为簇的中心点,再次按照以上流程进行计算;如此迭代后,直到分配稳定后,最后形成的三个簇为
(1){A1,C2,B1},{A3,B2,B3},{C1,A2}
(2) {A1},{A3 ,B1 ,B2 ,B3 ,C2},{A2 , C1}

posted @ 2023-02-19 18:29  Avici_Fox  阅读(106)  评论(0编辑  收藏  举报