import numpy as np import matplotlib.pyplot as plt import copy # 生成样本点==>特征 x=np.array([[1,2],[3,4],[4,5],[6,7]]) # 定义K个质心 C=np.array([[4.0,2.0],[5.0,3.0]]) # 展示处理之前的样本点和质心的距离 plt.scatter(x[:,0],x[:,1],marker='.',s=50,c='orange',) plt.scatter(C[:,0],C[:,1],marker='*',c='red') plt.show() while True: #计算每个样本到质心的距离 B=[] C_=copy.deepcopy(C) for c in C: dist = np.sqrt(((x-c)**2).sum(axis=1)) # 欧式距离 计算公式 B.append(dist) # 求归属 判断每个样本点距离那个质心更近 min_dix = np.argmin(B,axis=0) # 更新质心 for i in range(len(C)): C[i] = np.mean(x[min_dix==i],axis=0) # 如果计算的质心与新的中心点位置一样,质心不需要在移动位置了 if (C==C_).all(): break # 展示处理之后的样本点和质心的距离 plt.scatter(x[:,0],x[:,1],marker='.',s=50,c='orange',) plt.scatter(C[:,0],C[:,1],marker='*',c='red') plt.show()
聚类K_means的底层实现
于 2023-08-01 14:42:59 首次发布
本文介绍了使用Python的numpy和matplotlib库实现K-means聚类算法的过程,通过计算样本点到质心的距离并更新质心位置,直至收敛,展示了聚类前后样本点和质心的分布变化。
摘要由CSDN通过智能技术生成