一文搞懂K-Means 聚类!

90 阅读3分钟

推荐直接网站在线阅读:aicoting AI算法面试学习在线网站

什么是聚类?

聚类(Clustering)是一种典型的无监督学习方法,其目标是在没有标签信息的情况下,将数据样本按照相似性划分为若干簇,使得同一簇内的样本相似度高,不同簇之间差异显著。常见方法包括基于划分的 K-Means、基于层次的 层次聚类、以及基于密度的 DBSCAN、OPTICS 等。聚类广泛应用于用户分群、市场细分、文本主题发现、图像分割等任务,是数据挖掘和探索性分析中的重要工具。

所有相关源码示例、流程图、模型配置与知识库构建技巧,我也将持续更新在Github:AIHub,欢迎关注收藏!

K-Means 聚类

K-Means 是最经典的聚类算法之一,属于基于划分(Partition-based)的聚类方法。它通过迭代优化目标函数,将数据划分为 K 个簇,使得同簇内样本之间相似度最大化,而不同簇之间相似度最小化。一个簇说白了就是一组相同类别的东西,只是在这个方法里起了个名字叫簇,比如苹果,香蕉,橘子属于水果那一簇,彭于晏,刘亦菲和你们属于帅哥美女那一簇。由于其简单、高效,K-Means 在数据挖掘、文本分析、图像分割等领域被广泛应用。

K-Means 的目标是最小化簇内平方误差(Within-Cluster Sum of Squares, WCSS),即:

J=i=1KxCixμi2J = \sum_{i=1}^{K} \sum_{x \in C_i} \| x - \mu_i \|^2

其中:

  • KK :簇的个数
  • CiC_i :第 ii 个簇
  • μiμ_i :簇 CiC_i 的质心(均值向量)
  • xμi2\| x - \mu_i \|^2 :样本点与簇中心的欧式距离 K-Means的核心思想就是不断更新簇划分与质心,直到收敛(目标函数不再显著下降)。

K-Means的算法流程也很容易理解:

  1. 初始化:随机选择 KK 个样本作为初始质心。
  2. 分配样本:将每个样本分配到距离最近的簇中心。
  3. 更新质心:对每个簇,计算所有样本的均值作为新的质心。
  4. 迭代:重复步骤 2-3,直到簇划分不再变化或目标函数收敛。

下面基于Scikit-learn编写一段示例代码让咱们更好的理解一下:

from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

# 1. 生成模拟数据
X, y = make_blobs(n_samples=300, centers=4, cluster_std=0.6, random_state=42)

# 2. 训练 K-Means
kmeans = KMeans(n_clusters=4, random_state=42, n_init=10)
y_pred = kmeans.fit_predict(X)

# 3. 可视化结果
plt.scatter(X[:, 0], X[:, 1], c=y_pred, s=30, cmap='viridis')
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1],
            c='red', marker='X', s=200, label='Centroids')
plt.legend()
plt.title("K-Means Clustering")
plt.show()

运行结果如下,不同颜色表示不同簇,红色 X 为聚类中心。

总结环节!K-Means 作为经典的无监督学习方法,凭借其高效性和直观性,成为最常用的聚类算法之一。但在实际应用中,需要注意簇数选择、初始点敏感性以及对复杂分布的适用性问题。针对这些不足,研究者提出了 K-Means++、Mini-Batch K-Means 等改进方法,使其在大规模机器学习任务中依然具有重要地位。

最新的文章都在公众号aicoting更新,别忘记关注哦!!!