K-Means 聚类算法是一种无监督学习算法,它将数据集分成若干个簇(Cluster),使得同一个簇内的数据点尽可能接近,而不同簇的数据点尽可能远。下面将介绍 K-Means 聚类算法的基本原理和实现方法。

基本原理

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

实现方法

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

import numpy as np

def k_means(data, k):
    # 初始化聚类中心
    centroids = data[np.random.choice(data.shape[0], k, replace=False)]
    # 迭代
    for _ in range(10):
        # 分配
        clusters = [[] for _ in range(k)]
        for point in data:
            distances = np.linalg.norm(point - centroids, axis=1)
            closest_centroid = np.argmin(distances)
            clusters[closest_centroid].append(point)
        # 更新
        new_centroids = np.array([np.mean(cluster, axis=0) for cluster in clusters])
        if np.allclose(new_centroids, centroids):
            break
        centroids = new_centroids
    return clusters, centroids

应用场景

K-Means 聚类算法广泛应用于以下场景:

  • 数据挖掘:将数据集划分为不同的簇,以便更好地理解数据。
  • 图像处理:将图像分割成不同的区域,以便进行后续处理。
  • 文本分析:将文本数据聚类,以便进行主题建模。

扩展阅读

更多关于 K-Means 聚类算法的介绍,请参考以下链接:

K-Means 聚类算法示例