K-Means 聚类算法是一种无监督学习算法,用于将相似的数据点归为同一个簇。它是一种迭代算法,通过最小化簇内距离来对数据进行分类。

原理

  1. 选择初始中心点:从数据集中随机选择 K 个点作为初始中心点。
  2. 分配数据点:将每个数据点分配到最近的中心点,形成 K 个簇。
  3. 更新中心点:计算每个簇的中心点(簇内所有点的平均值)。
  4. 重复步骤 2 和 3:重复分配数据点和更新中心点的步骤,直到中心点不再发生显著变化。

实现

下面是一个简单的 K-Means 聚类算法实现:

def k_means(data, k):
    # 选择初始中心点
    centers = select_random_centers(data, k)
    # 迭代过程
    for _ in range(max_iterations):
        clusters = [[] for _ in range(k)]
        # 分配数据点
        for point in data:
            closest_center = min(centers, key=lambda c: distance(point, c))
            clusters[centers.index(closest_center)].append(point)
        # 更新中心点
        new_centers = []
        for cluster in clusters:
            if cluster:
                new_centers.append(calculate_center(cluster))
        if set(new_centers) == set(centers):
            break
        centers = new_centers
    return clusters, centers

例子

假设我们有一组二维数据点,想要将其分为 3 个簇:

data = [(1, 2), (1, 4), (1, 0), (10, 2), (10, 4), (10, 0)]
k = 3
clusters, centers = k_means(data, k)

运行上述代码后,clusters 将包含分组后的数据点,centers 将包含每个簇的中心点。

更多内容

想要了解更多关于 K-Means 聚类算法的内容,请阅读 K-Means 聚类算法详解