K-Means 算法是一种常用的聚类算法,其求解过程如下:

  1. 随机选择 k 个初始聚类中心点,可以是数据集中的任意 k 个点。
  2. 将每个数据点分配到距离其最近的聚类中心点所在的聚类中。
  3. 重新计算每个聚类的中心点,即将该聚类中所有数据点的坐标求平均值。
  4. 重复步骤 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 函数计算欧几里得距离。最终返回聚类结果和聚类中心点。

K-Means 聚类算法详解:原理、代码实现及应用

原文地址: https://www.cveoy.top/t/topic/jLg6 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录