python-KmeansKmeans++算法理解及代码实现
Posted NeufBois
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python-KmeansKmeans++算法理解及代码实现相关的知识,希望对你有一定的参考价值。
一、 环境:
- Python 3.7.4
- Pycharm Community 2019.3
二、 问题:
对六个样本点[1, 5], [2, 4], [4, 1], [5, 0], [7, 6], [6, 7]进行K-means聚类。
三、 理论推导
此处依照我个人理解所写,错误之处欢迎指出
K-means核心操作为:聚类中心选取—分类—调整聚类中心—再次分类并调整聚类中心直到调整幅度小于阈值或程序运行轮数大于阈值
- 选取聚类中心:
聚类中心的选取可以选择随机选取、人工选取。K-means++相对K-means来说在第一次选取聚类中心方面有所改进,K-means++在初次选择聚类中心时会使各个聚类中心之间的距离都尽可能的远,以得到更合理的分类。如果条件允许的话,我认为人工选取聚类中心的结果会更符合我们的需求。 - 分类
遍历所有待分类的点,根据我们选择的度量方法来判断点的类型。(我的代码直接以欧式距离作为度量来判断类型)
度量方法的选择要根据实际情况以及需求具体分析选择。同一数据使用不同的度量方法最后的分类结果可能会不同。 - 调整聚类中心
计算已经分好类的样本点的均值,以均值作为新的聚类中心。
若首次聚类中心选择很不合理的话,聚类中心的调整也会受到影响,导致最后分类结果不理想。 - 再次分类并调整聚类中心直到调整幅度小于阈值或运行轮数大于阈值
在调整了聚类中心之后再次进行步骤2,3直到聚类中心调整的幅度小于我们设定的一个阈值,或者循环运行的轮数大于我们的阈值,就认为分类结束。
四、 代码实现
代码主要用于理解算法,有些地方可能不够严谨,还请轻喷 以上是关于python-KmeansKmeans++算法理解及代码实现的主要内容,如果未能解决你的问题,请参考以下文章