在k-means算法中,记录每一次迭代的质心可以通过以下步骤实现:
具体实现时,可以使用一个列表或数组来存储每个质心的坐标。在每次迭代中,将当前的质心坐标添加到列表中。最终,列表中的每个元素即为每一次迭代的质心。
以下是一个示例代码片段,展示了如何在k-means算法中记录每一次迭代的质心:
import numpy as np
def k_means(data, k, threshold):
# 初始化k个质心
centroids = np.random.choice(data, size=k, replace=False)
centroids_history = [centroids] # 记录质心的历史
while True:
# 分配数据点到最近的质心簇
clusters = [[] for _ in range(k)]
for point in data:
distances = [np.linalg.norm(point - centroid) for centroid in centroids]
cluster_index = np.argmin(distances)
clusters[cluster_index].append(point)
# 计算新的质心
new_centroids = []
for cluster in clusters:
new_centroids.append(np.mean(cluster, axis=0))
# 检查质心的变化
if np.linalg.norm(np.array(new_centroids) - np.array(centroids)) < threshold:
break
centroids = new_centroids
centroids_history.append(centroids)
return centroids_history
# 示例使用
data = np.array([[1, 2], [2, 1], [10, 12], [12, 10], [20, 25], [25, 20]])
k = 2
threshold = 0.01
centroids_history = k_means(data, k, threshold)
for i, centroids in enumerate(centroids_history):
print(f"Iteration {i+1}: {centroids}")
在上述示例中,centroids_history
列表存储了每一次迭代的质心坐标。通过打印centroids_history
,可以查看每次迭代的质心位置。
请注意,上述示例代码仅用于演示目的,实际应用中可能需要根据具体情况进行适当的修改和优化。
领取专属 10元无门槛券
手把手带您无忧上云