K-Means 聚类算法是一种常用的无监督学习算法,它通过将数据点划分到 K 个簇中,来发现数据中的潜在结构。下面将详细介绍 K-Means 聚类算法的基本原理和实现步骤。

基本原理

K-Means 聚类算法的目标是将 N 个数据点划分成 K 个簇,使得每个数据点都尽可能靠近其所属簇的中心。

  • 簇中心:每个簇都有一个中心点,通常是该簇中所有数据点的均值。
  • 距离度量:通常使用欧几里得距离来衡量数据点与其簇中心的距离。

实现步骤

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

示例

以下是一个简单的 K-Means 聚类算法的 Python 示例:

import numpy as np

def k_means(data, k):
    # 初始化簇中心
    centroids = data[np.random.choice(data.shape[0], k, replace=False)]
    # 迭代
    for _ in range(100):
        # 分配数据点
        clusters = np.argmin(np.linalg.norm(data[:, np.newaxis] - centroids, axis=2), axis=1)
        # 更新簇中心
        centroids = np.array([data[clusters == i].mean(axis=0) for i in range(k)])
    return centroids

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

# 聚类
centroids = k_means(data, 2)

print("簇中心:", centroids)

扩展阅读

想了解更多关于 K-Means 聚类算法的内容?可以阅读以下文章:

K-Means 聚类算法示意图