K-means聚类 的 Python 实现

K-means聚类 的 Python 实现
K-means聚类是一个聚类算法用来将 n 个点分成 k 个集群。

算法有3步:
1.初始化– K 个初始质心会被随机生成
2.分配 – K 集群通过关联到最近的初始质心生成
3.更新 –重新计算k个集群对应的质心
分配和更新会一直重复执行直到质心不再发生变化。

最后的结果是点和质心之间的均方差达到最小。

以 k=3 为例演示这个过程:

初始化

分配:

更新:

重新分配:

可以看到一个红色的点,变成了绿色的;一个蓝色的点变成了红色的。
我们更加接近最终目标了。
现在重复这个过程,直到每一个集群都没有变化为止。

继续这个过程:

现在得到3个清晰地集群和3个质点在这三个集群的中间。

结论:
1.k-means 可以尝试不同的初始化质点来获取更好的 label.
2.如果数据集有一定的对称性,一些数据可能会被错误的标记。
3.k-means 依赖欧氏距离,所以对尺度非常敏感,所以如果存在缩放问题,要对数据进行归一化处理。

英文原文的代码可以复制,还有 scikit-learn 版实现。

英文原文:http://benalexkeen.com/k-means-clustering-in-python/

Related posts

Leave a Comment