K-Means 聚类算法详解:原理、代码实现及应用
K-Means 算法是一种常用的聚类算法,其求解过程如下:
- 随机选择 k 个初始聚类中心点,可以是数据集中的任意 k 个点。
- 将每个数据点分配到距离其最近的聚类中心点所在的聚类中。
- 重新计算每个聚类的中心点,即将该聚类中所有数据点的坐标求平均值。
- 重复步骤 2 和 3,直到聚类中心点不再发生变化或达到预设的最大迭代次数。
具体的代码实现如下:
def k_means(data, k, max_iter=100):
# 随机选择 k 个初始聚类中心点
centers = random.sample(data, k)
for i in range(max_iter):
# 分配数据点到最近的聚类中心点
clusters = [[] for _ in range(k)]
for point in data:
distances = [np.linalg.norm(point - center) for center in centers]
cluster_index = np.argmin(distances)
clusters[cluster_index].append(point)
# 重新计算聚类中心点
new_centers = []
for cluster in clusters:
if cluster:
new_center = np.mean(cluster, axis=0)
new_centers.append(new_center)
else:
new_centers.append(random.choice(data))
# 判断聚类中心点是否发生变化
if np.allclose(centers, new_centers):
break
centers = new_centers
return clusters, centers
其中,data 是数据集,k 是聚类数,max_iter 是最大迭代次数。在实现过程中,使用 numpy 库中的 linalg.norm 函数计算欧几里得距离。最终返回聚类结果和聚类中心点。
原文地址: https://www.cveoy.top/t/topic/jLg6 著作权归作者所有。请勿转载和采集!