K-means聚类算法-python实现简单示例
想搞点有意思的东西,参考[K-means聚类算法(https://www.cnblogs.com/jerrylead/archive/2011/04/06/2006910.html)做了一些实现。记录如下。
代码主要过程:
- 生成数据D(d1,d2,…,di);
- 执行分类:
2.1. 按照group数量,初始化group 中心( u1, u2,…ux);
2.2. 遍历数据,按照di与各个中心的距离distancex,i,选择distancex,i最小的,作为di的类;
2.3. 更新分组中心值。对每个分组,取该组所有成员对应坐标的平均值,形成预期的 分组中心A(ah,bh)。将分组中与A距离最近的点(di),作为分组的新中心;
2.4. 检查所有分组的中心值是否发生变化。如果没有变化,视为训练完成(此处为实现时的逻辑漏洞);如果超过训练次数,则视为训练完成(此处为实现时的逻辑问题,见参考博客,存在严谨的校验方法);
2.5. 从2.2开始继续训练; - 展示分类结果;
实际代码
# coding=UTF-8
import numpy as np
import math
import matplotlib.pyplot as plt
import copy
class Group(object):
''' group structure
1) mainly provide group_center update;
2) pay attention that, all members are public,
no interface is avaliable
'''
center_ar = np.array([0, 0])
members = []
def UpCenter(self):
sum_xy = np.sum(self.members, axis=