import numpy as np def kmeans(data, k, max_iterations=100): # 随机初始化k个聚类中心 centers = data[np.random.choice(range(len(data)), k, replace=False)] for _ in range(max_iterations): # 分配每个数据点到最近的聚类中心 labels = np.argmin(np.linalg.norm(data[:, np.newaxis] - centers, axis=-1), axis=-1) # 更新聚类中心为每个簇的平均值 new_centers = np.array([data[labels == i].mean(axis=0) for i in range(k)]) # 如果聚类中心没有发生变化,则收敛并退出循环 if np.all(centers == new_centers): break centers = new_centers return labels, centers # 示例用法 data = np.array([[1, 2], [1, 4], [1, 0], [4, 2], [4, 4], [4, 0]]) k = 2 labels, centers = kmeans(data, k) print("聚类标签:", labels) print("聚类中心:", centers)
时间: 2023-07-15 21:13:23 浏览: 135
kMeans_k均值聚类_K均值_Kmeans_K._
这是一个简单的 K-Means 聚类算法的 Python 实现。K-Means 算法是一种无监督学习算法,它可以对数据进行聚类,将相似的数据点分到同一个簇中。
这个实现中,输入参数包括数据集 data、聚类数 k 和最大迭代次数 max_iterations。算法首先随机初始化 k 个聚类中心 centers,然后进行迭代。在每次迭代中,算法根据当前聚类中心分配每个数据点到最近的聚类中心,得到每个数据点的聚类标签 labels。然后算法更新聚类中心为每个簇的平均值,得到新的聚类中心 new_centers。如果新的聚类中心与旧的聚类中心完全相同,则算法已经收敛并退出循环,否则使用新的聚类中心继续下一轮迭代。最后,算法返回每个数据点的聚类标签和最终的聚类中心。
在示例用法中,我们使用一个 2 维数据集 data,包括 6 个数据点。我们将聚类数设为 2,然后调用 kmeans 函数进行聚类。最后,我们输出每个数据点的聚类标签和最终的聚类中心。
需要注意的是,K-Means 算法对于初始聚类中心的选择非常敏感,不同的初始聚类中心可能会导致不同的聚类结果。因此,实际使用时需要多次运行算法并选择最优的结果。
阅读全文