【AI深究】K均值聚类(K-Means Clustering)全网最详细全流程详解与案例(附Python代码演示) | 肘部法则、轮廓系数 | 优点、缺点 | 例子案例及数据

大家好,我是爱酱。继上一篇层次聚类(Hierarchical Clustering)之后,本期我们聚焦于K均值聚类(K-Means Clustering)。K均值是最经典、应用最广的无监督聚类算法之一,广泛用于客户分群、图像处理、传感器数据分析等领域。本文将系统介绍K均值聚类的原理、算法流程、数学表达、实际应用、优缺点,并配以公式,便于你直接用于技术文档和学习。

注:本文章含大量数学算式、详细例子说明及代码演示,大量干货,建议先收藏再慢慢观看理解。新频道发展不易,你们的每个赞、收藏跟转发都是我继续分享的动力!


一、K均值聚类是什么?

K均值聚类是一种**基于质心(centroid-based)**的无监督算法,目标是将数据划分为K个不同的簇,使得同一簇内的数据点尽量相似,不同簇之间的数据点尽量不同。

  • 簇中心(质心):每个簇有一个中心点(质心),代表该簇的“平均”位置。

  • K值:需要用户预先指定簇的数量K。例如K=3,K=4 等等。


二、K均值聚类的数学目标

K均值的优化目标是最小化所有数据点到其所属簇质心的距离平方和(即簇内误差平方和,Within-Cluster Sum of Squares, WCSS)。

\min_{C} \sum_{k=1}^{K} \sum_{x_i \in C_k} \|x_i - \mu_k\|^2

其中 $C_k$ 表示第 $k$ 个簇,$\mu_k$ 为第 $k$ 个簇的质心,$x_i$ 为分配到该簇的样本点。


三、K均值聚类的算法流程

K均值算法的核心流程如下:

1. 选择簇数K

  • 由用户指定K值(如K=3),也可通过肘部法则等方法辅助选择。

2. 初始化K个质心

  • 随机选择K个数据点作为初始质心,或用其他初始化方法(如K-Means++)。

3. 分配样本到最近质心

  • 计算每个数据点到所有质心的距离(常用欧氏距离):

        d(x, \mu_k) = \sqrt{\sum_{j=1}^m (x_j - \mu_{k,j})^2}

  • 将每个点分配到最近的质心所属的簇。

4. 更新质心

  • 对每个簇,计算所有成员点的均值,作为新的质心:

        \mu_k = \frac{1}{|C_k|} \sum_{x_i \in C_k} x_i

5. 重复分配与更新

  • 重复步骤3和4,直到质心不再变化或达到最大迭代次数,算法收敛。


四、K均值聚类案例流程

我们用一个简单二维数据例子,手动走一遍K均值流程,帮助新手直观理解。

数据集

假设有如下6个二维点:

$x$$y$
A12
B14
C10
D102
E104
F100

我们设定 $K=2$,希望分成两簇。


Step 1:初始化质心

随机选择A和D作为初始质心:

  • $\mu_1 = (1,2)$

  • $\mu_2 = (10,2)$


Step 2:分配样本到最近质心

计算每个点到两个质心的欧氏距离:

  • 点A到$\mu_1$距离为0,到$\mu_2$距离为$\sqrt{(1-10)^2 + (2-2)^2} = 9$

  • 点B到$\mu_1$为2,到$\mu_2$$\sqrt{(1-10)^2 + (4-2)^2} = \sqrt{81+4}=9.22$

  • 点C到$\mu_1$为2,到$\mu_2$$\sqrt{(1-10)^2 + (0-2)^2} = \sqrt{81+4}=9.22$

  • 点D到$\mu_1$为9,到$\mu_2$为0

  • 点E到$\mu_1$$\sqrt{(10-1)^2 + (4-2)^2} = \sqrt{81+4}=9.22$,到$\mu_2$为2

  • 点F到$\mu_1$$\sqrt{(10-1)^2 + (0-2)^2} = \sqrt{81+4}=9.22$,到$\mu_2$为2

分配结果:

  • 簇1($\mu_1$):A, B, C

  • 簇2($\mu_2$):D, E, F


Step 3:更新质心

计算每个簇的新质心:

  • 簇1:A(1,2), B(1,4), C(1,0)

                        ​​​​​​​        \mu_1 = \left( \frac{1+1+1}{3}, \frac{2+4+0}{3} \right ) = (1, 2)

  • 簇2:D(10,2), E(10,4), F(10,0)

        \mu_2 = \left( \frac{10+10+10}{3}, \frac{2+4+0}{3} \right ) = (10, 2)

发现质心没有变化,算法收敛。


Step 4:可视化

此时聚类结果如下:

  • 簇1:A、B、C(左下角一组)

  • 簇2:D、E、F(右下角一组)


五、Python代码实现

注:记得要先 pip install scikit-learn Library喔~

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

# Example data
X = np.array([[1,2],[1,4],[1,0],[10,2],[10,4],[10,0]])
kmeans = KMeans(n_clusters=2, random_state=0).fit(X)
labels = kmeans.labels_
centers = kmeans.cluster_centers_

plt.figure(figsize=(8, 6))
plt.scatter(X[:,0], X[:,1], c=labels, cmap='viridis', s=100)
plt.scatter(centers[:,0], centers[:,1], c='red', marker='x', s=200)

# Draw circles around clusters
for i in range(2):
    cluster_points = X[labels == i]
    center = centers[i]
    # Calculate max distance from center to points in cluster
    radius = np.max(np.linalg.norm(cluster_points - center, axis=1))
    circle = plt.Circle(center, radius, color='red', fill=False, linestyle='--', linewidth=2)
    plt.gca().add_patch(circle)

plt.title('K-Means Clustering Result with Cluster Circles')
plt.xlabel('X')
plt.ylabel('Y')
plt.grid(True)
plt.show()

六、K均值聚类的优缺点

优点

  • 高效、易实现,适合大数据集,时间复杂度低。

  • 对球状、均匀分布的数据表现好。

  • 结果直观,便于解释和可视化。

缺点

  • 需预先指定K值,K选错影响聚类效果。

  • 对初始质心敏感,可能陷入局部最优。

  • 不适合非球状、密度不均或含异常值的数据。

  • 对高维数据和不同尺度特征敏感。


七、K的选择与评估

1. 肘部法则(Elbow Method)

  • 计算不同K值下的簇内误差平方和(WCSS),绘制K与WCSS曲线,拐点处为最佳K。

        \text{WCSS} = \sum_{k=1}^{K} \sum_{x_i \in C_k} \|x_i - \mu_k\|^2

2. 轮廓系数(Silhouette Coefficient)

  • 衡量聚类紧密度与分离度,值越高聚类效果越好。


八、总结

K均值聚类是无监督学习中应用最广、效率最高的聚类算法之一。它通过迭代优化使簇内样本尽量相似、簇间样本尽量不同,适合大多数球状分布的数据。实际应用中,需注意K值选择、初始化方法和异常值处理,结合肘部法则、轮廓系数等方法评估聚类效果。希望本篇内容能帮助你深入理解K均值聚类的原理与实操。


谢谢你看到这里,你们的每个赞、收藏跟转发都是我继续分享的动力

如需进一步案例、代码实现或与其他聚类算法对比,欢迎留言交流!我是爱酱,我们下次再见,谢谢收看!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值