K-Means 聚类算法是一种无监督学习算法,它将数据集分成 K 个簇,使得同一个簇内的数据点尽可能接近,而不同簇的数据点尽可能远。以下是一个简单的 K-Means 聚类算法的示例。

示例数据

假设我们有一组二维数据点,如下所示:

[1, 2], [1, 4], [1, 0],
[10, 2], [10, 4], [10, 0],
[5, 5], [5, 20], [5, 15],
[4, 1], [4, 2], [4, 1]

K-Means 算法步骤

  1. 初始化: 随机选择 K 个数据点作为初始质心。
  2. 分配: 将每个数据点分配到最近的质心,形成 K 个簇。
  3. 更新: 计算每个簇的平均值,并更新质心。
  4. 重复: 重复步骤 2 和 3,直到质心不再发生变化或达到最大迭代次数。

代码示例

import numpy as np

# 示例数据
data = np.array([[1, 2], [1, 4], [1, 0],
                 [10, 2], [10, 4], [10, 0],
                 [5, 5], [5, 20], [5, 15],
                 [4, 1], [4, 2], [4, 1]])

# K-Means 算法
def k_means(data, k):
    # 初始化质心
    centroids = data[np.random.choice(data.shape[0], k, replace=False)]
    for _ in range(100):
        # 分配数据点到最近的质心
        distances = np.sqrt(((data - centroids[:, np.newaxis])**2).sum(axis=2))
        labels = np.argmin(distances, axis=0)
        # 更新质心
        centroids = np.array([data[labels == i].mean(axis=0) for i in range(k)])
    return centroids, labels

# 运行 K-Means 算法
centroids, labels = k_means(data, 3)
print("质心:", centroids)
print("标签:", labels)

扩展阅读

想要了解更多关于 K-Means 聚类算法的信息,可以阅读以下文章:

K-Means 聚类算法示例图