在k-means算法中,寻找中心点的均值是重要操作之一。可以通过以下代码实现:
import numpy as np
# 定义k-means聚类函数
def kmeans(data, k):
centers = data[:k] # 随机初始化中心点
while True:
# 计算每个样本点离哪个中心点最近
distances = np.linalg.norm(data[:, np.newaxis] - centers, axis=2)
labels = np.argmin(distances, axis=1)
# 更新中心点坐标
new_centers = np.array([data[labels == i].mean(axis=0) for i in range(k)])
# 若中心点不再变化,则跳出循环
if np.allclose(centers, new_centers):
break
centers = new_centers
return centers
# 测试
data = np.random.rand(100, 2)
k = 3
centers = kmeans(data, k)
print(centers)
首先定义一个k-means函数,其中data表示欲聚类的数据,k表示聚类的类别数。函数中先随机初始化k个中心点,然后迭代计算每个样本点离哪个中心点最近,并将样本点划分为相应的类别。接着,根据每个类别的样本点坐标,更新中心点坐标。如果新旧中心点坐标几乎相等,则说明中心点不再变化,跳出循环并返回最终的中心点坐标。最后,通过np.random.rand函数生成100个二维随机数据,然后调用kmeans函数进行聚类,并输出最终的中心点坐标。