以下是标准的K均值算法的代码示例:
import numpy as np
def kmeans(X, k, max_iters=100):
# 随机初始化k个聚类中心
centroids = X[np.random.choice(range(len(X)), size=k, replace=False)]
for _ in range(max_iters):
# 分配每个样本到最近的聚类中心
labels = np.argmin(np.linalg.norm(X[:, np.newaxis] - centroids, axis=-1), axis=-1)
# 更新聚类中心为各个类别的均值
new_centroids = np.array([X[labels == i].mean(axis=0) for i in range(k)])
# 如果聚类中心不再改变,则停止迭代
if np.all(centroids == new_centroids):
break
centroids = new_centroids
return labels, centroids
# 示例用法
X = np.array([[1, 2], [1, 4], [1, 0], [4, 2], [4, 4], [4, 0]])
k = 2
labels, centroids = kmeans(X, k)
print("样本点的聚类标签:", labels)
print("聚类中心:", centroids)
此代码实现了标准的K均值算法。首先,随机初始化k个聚类中心。然后,迭代进行以下步骤直到满足停止条件:首先,计算每个样本点到各个聚类中心的距离,并将样本点分配到距离最近的聚类中心。然后,更新聚类中心为各个类别的均值。最后,检查新的聚类中心是否与旧的聚类中心相同,如果相同,则停止迭代;否则,继续迭代。最后,返回每个样本的聚类标签和最终的聚类中心。