之前面试遇到了要求手写K-means实现, 当时回答的不太好, 回来在网上搜了下, 发现这些代码虽然实现了功能, 但是没充分利用numpy矩阵的性质去优化, 所以在查了些资料后自己实现了一下.
K-means原理
原理网上一搜一大堆, 就不过多介绍了, 具体的流程如下:
numpy实现
K-means主要有三个过程:
- 初始质心点的选择
- 计算每个样例所属的类别
- 对每个类重新计算质心
下面, 我们逐个实现.
初始质心点的选择
这部分直接利用numpy的shuffle函数打乱数据, 然后选择前k个样本就可以了
def initialize_centroids(points, K):
centroids = points.copy()
np.random.shuffle(centroids)
return centroids[:k]