机器学习:10.聚类

聚类

聚类(Clustering)是一种典型的无监督学习算法,其核心目标是分割给定的无标注数据集,使得相似的数据点被分配到相同的簇(Cluster)中,而不相似的数据点被分在不同的簇中。

概念定义说明
无监督学习从无标注数据中学习预测模型的机器学习问题,本质是学习数据中的统计规律或内在结构。
聚类样本分组:组内样本相似度高,组间样本相似度低。
簇心 (Centroid)一个簇中所有样本点的中心位置。
隐变量模型包含不可观测变量的模型,这些隐变量会影响观测数据的生成过程。

一. 无监督学习与聚类概述

1. 无监督学习的核心

在无监督学习中,我们首先学习联合分布 P(X)P(X)P(X),然后推断条件分布 P(xt∣X∖xt)P(x_t | X \setminus x_t)P(xtXxt),特征 XXX 的每个维度都是被平等对待的。

参数:

  1. XXX(特征集合/特征向量): 代表一个样本的所有特征。假设一个样本有 ddd 个维度(特征),那么 X={x1,x2,…,xd}X = \{x_1, x_2, \dots, x_d\}X={x1,x2,,xd}
  2. xtx_txt(目标特征): 代表这 ddd 个特征中的ttt 个特征(其中 1≤t≤d1 \le t \le d1td)。
  3. ∖\setminus(集合减法/排除): 在数学集合论中表示“除去”。所以 X∖xtX \setminus x_tXxt 的意思是:整体特征集合 XXX 中,除去了第 ttt 个特征之后,剩下的所有其他特征的集合

整句公式的含义:在已知除了第 ttt 个特征以外的所有其他特征的情况下,第 ttt 个特征取某个具体值的条件概率。

有监督 vs 无监督:
有监督学习直接学习条件分布 P(xt∣X∖xt)P(x_t | X \setminus x_t)P(xtXxt),其中 xtx_txt 是要预测的显式标签。而无监督学习处理的是完全没有标签的数据,需要机器自己去发现数据内在的结构(如聚类、降维、关联规则)。

2. 聚类的基本目标

(1) 相似的点在相同的簇中。
(2) 不相似的点被分在不同的簇中。

二. K-Means 算法

K-Means 是一种基于距离和相似度关联簇的经典划分聚类算法。

1. 算法输入与输出

  • 输入: 数据集 D={xi}i=1ND = \{x_i\}_{i=1}^ND={xi}i=1N,所需簇的数量 kkk(N代表数据集中总共有多少个样本)。
  • 输出: 每个簇的簇心 μ1,…,μk\mu_1, \dots, \mu_kμ1,,μk,以及每个样本所属的簇划分(μj\mu_jμj 特指第 jjj 个簇的中心点,也叫簇心)。

2. 质心 (Centroid)

质心就是一个簇的中心位置,通常取该簇所有点在各个维度上的均值。

例如,点 (1,2),(2,3),(3,4)(1, 2), (2, 3), (3, 4)(1,2),(2,3),(3,4) 的质心为:

(1+2+33,2+3+43)=(2,3)\left( \frac{1+2+3}{3} , \frac{2+3+4}{3} \right) = (2, 3)(31+2+3,32+3+4)=(2,3)

3. 距离度量

最常用的距离度量方式是欧氏距离(直线距离)。

二维平面中 A、B 两点的距离:

d(A,B)=(Ax−Bx)2+(Ay−By)2d(A,B) = \sqrt{(A_x - B_x)^2 + (A_y - B_y)^2}d(A,B)=(AxBx)2+(AyBy)2

当维度扩展到 n 维时:

d(A,B)=∑i=1n(Ai−Bi)2d(A,B) = \sqrt{\sum_{i=1}^{n} (A_i - B_i)^2}d(A,B)=i=1n(AiBi)2

即:L2(xi,μj)=∣∣xi−μj∣∣2=∑k=1d(xi,k−μj,k)2L_2(x_i, \mu_j) = ||x_i - \mu_j||_2 = \sqrt{\sum_{k=1}^d (x_{i,k} - \mu_{j,k})^2}L2(xi,μj)=∣∣xiμj2=k=1d(xi,kμj,k)2

4. 簇内相似度

K-Means 追求的是:同一个簇中的样本尽可能彼此接近,并且尽量靠近该簇的质心。

通常通过簇内平方和SSE来衡量:

SSE=∑i=1K∑x∈Ci∣∣x−μi∣∣2SSE = \sum_{i=1}^{K} \sum_{x \in C_i} ||x - \mu_i||^2SSE=i=1KxCi∣∣xμi2

  • CiC_iCi 表示第 iii 个簇,μi\mu_iμi 表示第 iii 个簇的质心。
  • ∣∣x−μi∣∣2||x - \mu_i||^2∣∣xμi2 表示样本点到质心的平方距离。
  • SSE 越小,说明簇内样本越紧凑,聚类效果通常越好。

5. K-Means的迭代流程

K-Means 的核心就是不断循环:选中心 →\rightarrow 分簇 →\rightarrow 更新中心 →\rightarrow 再分簇 →\rightarrow 直到稳定。

  1. 初始化质心:预先指定 K,随机选取 K 个初始中心点。
  2. 分配样本:计算每个样本到各质心的距离,划分到距离最近的簇中。
  3. 更新质心:根据当前簇中的所有样本,重新计算该簇的中心点(均值)。
  4. 重复迭代:重新分配样本并更新质心,不断循环。
  5. 收敛停止:当质心位置不再变化、样本归属不再改变,或达到最大迭代次数时停止。

6. 算法的最优性与局限

  • 优化 1:初始质心选择 (K-Means++)

    随机选择初始质心可能导致算法陷入较差的局部最优解。不同的初始化方式,最终得到的聚类结果可能存在明显差异。

    解决方案:K-Means++

    先随机选取一个样本点作为第一个质心;之后,在选择下一个质心时,优先考虑那些距离当前已有质心较远的样本点。重复这一过程,直到选出 K 个初始质心。

  • 优化 2:肘部法则选择 K 值

    K-Means 最大的问题是簇数 K 需要预先指定。如何找到性价比最优的 K 值?

    • 依次尝试不同的 K 值,计算对应的 SSE。

    • 随着 K 增大,SSE 会持续下降。

    • 当 K 超过某个值后,SSE 下降幅度明显减小,曲线趋于平缓。

    • 这个斜率突然减小、曲线由陡转平的拐点(肘部),就是较优的 K 值选择。

      image-20260609222211827

  • 输入样本集:X={x1,x2,⋯ ,xm}X = \{x_1, x_2, \cdots, x_m\}X={x1,x2,,xm},共 mmm 个样本。
  • 特征维度:每个样本 xix_ixi 是一个 nnn 维特征向量。
  • 簇的数量:kkk 个簇。
  • 簇划分指示:CiC_iCi 表示第 iii 个样本 xix_ixi 当前被指定的簇标签。
  • 簇中心:μj\mu_jμj 表示第 jjj 个簇的中心(j∈{1,2,…,k}j \in \{1, 2, \dots, k\}j{1,2,,k})。

K-Means 算法标准聚类过程

若用 K-Means 算法进行聚类,其完整且规范的算法迭代过程如下:

1. 初始化 (Initialization)

从数据集 XXX 中随机选取 kkk 个样本作为初始的簇中心,记为 μ1,μ2,⋯ ,μk\mu_1, \mu_2, \cdots, \mu_kμ1,μ2,,μk

2. 迭代过程 (Iteration)

重复以下两个步骤,直到满足终止条件:

  • 步骤 A (簇分配/计算 CiC_iCi):

    遍历每一个样本 xix_ixi (i=1,…,mi = 1, \dots, mi=1,,m),计算其到所有簇中心 μj\mu_jμj 的距离(通常使用欧氏距离)。将其分配给距离最近的簇中心所在的簇,即更新所属簇标签 CiC_iCi

    Ci=arg⁡min⁡j∈{1,…,k}∣∣xi−μj∣∣2C_i = \arg\min_{j \in \{1, \dots, k\}} || x_i - \mu_j ||^2Ci=argj{1,,k}min∣∣xiμj2

  • 步骤 B (更新簇中心 μj\mu_jμj):

    对于每一个簇 jjj (j=1,…,kj = 1, \dots, kj=1,,k),重新计算被分配到该簇的所有样本的均值,并以此均值作为新的簇中心 μj\mu_jμj

    μj=1∣Nj∣∑xi∈Njxi\mu_j = \frac{1}{|N_j|} \sum_{x_i \in N_j} x_iμj=Nj1xiNjxi

    (其中 NjN_jNj 表示当前属于簇 jjj 的所有样本的集合,∣Nj∣|N_j|Nj 为该集合中的样本数量)

3. 终止条件 (Termination)

当所有的簇分配标签 CiC_iCi 不再发生变化,或者所有的簇中心 μj\mu_jμj 停止移动(或者达到预设的最大迭代次数)时,算法收敛并结束。

三. 高斯混合聚类与 EM 算法

1. 高斯混合模型 (GMM)

高斯混合模型是一种概率聚类模型,它以概率的形式描述样本类别标签 P(z∣x)P(z|x)P(zx)

  • 假设: 样本的生成过程由 kkk 个高斯分布的混合给出,具体来自哪个分布由一个隐变量 zzz 决定。高斯混合模型假设所有数据样本都是由 kkk 个多元高斯分布组合混合生成的。其概率密度函数(混合分布)定义为这 kkk 个高斯分布的加权平均:

  • 高斯混合分布公式:pM(x)=∑i=1kαi⋅p(x∣μi,Σi)p_{\mathcal{M}}(x) = \sum_{i=1}^k \alpha_i \cdot p(x | \mu_i, \Sigma_i)pM(x)=i=1kαip(xμi,Σi)

    参数说明:

    • kkk:混合的高斯成分个数(即簇数)。

    • αj\alpha_jαj:第 jjj 个高斯成分的混合系数(先验概率),满足 αj>0\alpha_j > 0αj>0∑j=1kαj=1\sum_{j=1}^k \alpha_j = 1j=1kαj=1

    • N(x∣μj,Σj)\mathcal{N}(x | \mu_j, \Sigma_j)N(xμj,Σj):第 jjj 个高斯分布的概率密度函数,其中 μj\mu_jμj 是均值向量,Σj\Sigma_jΣj 是协方差矩阵。

      协方差矩阵永远是一个对称矩阵 (Symmetric Matrix)。沿着主对角线对折,两边完全一样:σxy\sigma_{xy}σxy 永远等于 σyx\sigma_{yx}σyx

      • 计算 X 和 Y 的协方差:

        Cov(X,Y)=σxy=1m∑i=1m(x(i)−μx)(y(i)−μy)Cov(X,Y) = \sigma_{xy} = \frac{1}{m} \sum_{i=1}^{m} (x^{(i)} - \mu_x)(y^{(i)} - \mu_y)Cov(X,Y)=σxy=m1i=1m(x(i)μx)(y(i)μy)

      • 计算 Y 和 X 的协方差:

        Cov(Y,X)=σyx=1m∑i=1m(y(i)−μy)(x(i)−μx)Cov(Y,X) = \sigma_{yx} = \frac{1}{m} \sum_{i=1}^{m} (y^{(i)} - \mu_y)(x^{(i)} - \mu_x)Cov(Y,X)=σyx=m1i=1m(y(i)μy)(x(i)μx)


2. EM 算法

由于存在未知的隐变量 zzz(即我们不知道每个样本具体由哪个高斯分布产生),直接显式找到最大似然估计(MLE)非常困难,因此我们引入 EM算法

EM算法是一种常用的估计带隐变量模型参数的迭代求解利器:

  • E-Step (期望步): 在给定当前模型参数下,推断隐变量的期望(后验分布)。即计算样本 xjx_jxj 由第 iii 个高斯成分生成的后验概率 γji\gamma_{ji}γji
  • M-Step (最大化步): 调整参数,使得在给定隐变量后验分布下,最大化对数似然函数。即利用 γji\gamma_{ji}γji 更新 αi,μi,Σi\alpha_i, \mu_i, \Sigma_iαi,μi,Σi

EM 算法的几何收敛性:
通过琴生不等式,E-Step 实际上是在构造对数似然函数的一个良好的下界,而 M-Step 则是在直接优化(最大化)这个下界
数学上可以严格证明,EM算法每次连续迭代的参数都会使得对数似然值单调递增:l(θ(t))≤l(θ(t+1))l(\theta^{(t)}) \le l(\theta^{(t+1)})l(θ(t))l(θ(t+1))


3. GMM 与 K-Means 的联系

K-Means 可以看作是高斯混合聚类的一种极端特例:
如果我们将 GMM 中的协方差矩阵强行固定为 Σ=σ2I\Sigma = \sigma^2 IΣ=σ2I,那么当方差趋于零 (σ2→0\sigma^2 \to 0σ20) 时,高斯混合聚类和 K-Means 算法的聚类效果是完全等价的


  • 输入样本集:X={x1,x2,⋯ ,xm}X = \{x_1, x_2, \cdots, x_m\}X={x1,x2,,xm},共 mmm 个样本。
  • 特征维度:每个样本 xix_ixi 是一个 nnn 维特征向量。
  • 簇的数量:kkk 个簇。
  • 簇划分指示:CiC_iCi 表示第 iii 个样本 xix_ixi 当前被指定的簇标签。
  • 簇中心:μj\mu_jμj 表示第 jjj 个簇的中心(j∈{1,2,…,k}j \in \{1, 2, \dots, k\}j{1,2,,k})。

EM 算法在 GMM 聚类中的标准运行过程

在 GMM 中,由于我们不知道每个样本具体由哪一个高斯成分生成(存在隐变量),因此必须使用 EM 算法来迭代求解参数 (αj,μj,Σj)(\alpha_j, \mu_j, \Sigma_j)(αj,μj,Σj)

算法流程如下:

① 初始化 (Initialization)

随机初始化 kkk 个高斯分布的参数:混合系数 αj\alpha_jαj、均值向量 μj\mu_jμj 和协方差矩阵 Σj\Sigma_jΣj (j=1,⋯ ,kj=1, \cdots, kj=1,,k)。

② E-Step (期望步 / Expectation)

在当前模型参数已知的条件下,计算每个样本 xix_ixi 由第 jjj 个高斯成分生成的后验概率(也被称为“责任度” Responsibility),记为 γij\gamma_{ij}γij

γij=αj⋅N(xi∣μj,Σj)∑l=1kαl⋅N(xi∣μl,Σl)\gamma_{ij} = \frac{\alpha_j \cdot \mathcal{N}(x_i | \mu_j, \Sigma_j)}{\sum_{l=1}^k \alpha_l \cdot \mathcal{N}(x_i | \mu_l, \Sigma_l)}γij=l=1kαlN(xiμl,Σl)αjN(xiμj,Σj)

(通俗解释:计算样本 xix_ixi 有多大的概率是属于第 jjj 个簇的。这是软聚类,每个样本按概率归属于所有的簇)

③ M-Step (最大化步 / Maximization)

利用 E-Step 计算出的后验概率 γij\gamma_{ij}γij,最大化似然函数的下界,从而更新所有的模型参数。对每个高斯成分 jjj,按如下公式更新:

  • 计算该簇的“有效样本总数”: Nj=∑i=1mγijN_j = \sum_{i=1}^m \gamma_{ij}Nj=i=1mγij

  • 更新均值向量:

    μjnew=1Nj∑i=1mγijxi\mu_j^{new} = \frac{1}{N_j} \sum_{i=1}^m \gamma_{ij} x_iμjnew=Nj1i=1mγijxi

  • 更新协方差矩阵:

    Σjnew=1Nj∑i=1mγij(xi−μjnew)(xi−μjnew)T\Sigma_j^{new} = \frac{1}{N_j} \sum_{i=1}^m \gamma_{ij} (x_i - \mu_j^{new})(x_i - \mu_j^{new})^TΣjnew=Nj1i=1mγij(xiμjnew)(xiμjnew)T

  • 更新混合系数:

    αjnew=Njm\alpha_j^{new} = \frac{N_j}{m}αjnew=mNj

④ 终止评估

重复执行 E-Step 和 M-Step。每次迭代后计算当前的对数似然函数值 ln⁡P(X)\ln P(X)lnP(X),如果对数似然函数的增长幅度小于某个极小的阈值 ϵ\epsilonϵ(即对数似然函数收敛),或者参数不再发生明显变化,则算法终止;否则返回步骤 ② 继续迭代。

四. 基于密度的聚类:DBSCAN

基于距离的算法(如K-Means)通常只能发现球状簇,难以处理任意形状的簇。DBSCAN (Density-Based Spatial Clustering of Applications with Noise) 通过“密度”这一概念完美解决了这一问题。

1. 核心概念

DBSCAN 的运作依赖于两个关键参数:扫描半径 ϵ\epsilonϵ最小包含点数 MinPtsMinPtsMinPts

概念定义与说明
ϵ\epsilonϵ-邻域以某个样本点为中心,半径为 ϵ\epsilonϵ 的区域内包含的所有样本点的集合。
核心对象若一个样本点的 ϵ\epsilonϵ-邻域内至少包含 MinPtsMinPtsMinPts 个样本,则称该点为核心对象。
密度直达若点 xjx_jxj 位于点 xix_ixiϵ\epsilonϵ-邻域中,且 xix_ixi 是核心对象,则称 xjx_jxjxix_ixi 密度直达。(不满足对称性)
密度可达若存在一条样本链 p1…pnp_1 \dots p_np1pn,且 pi+1p_{i+1}pi+1pip_ipi 密度直达,则链两端的点密度可达。(满足传递性)
密度相连存在核心对象 xkx_kxk,使得 xix_ixixjx_jxj 均由 xkx_kxk 密度可达,则称 xix_ixixjx_jxj 密度相连。(满足对称性)

2. 簇的定义

在 DBSCAN 中,一个“簇”被严格定义为:由密度可达关系导出的最大的密度相连样本集合

3. 算法优缺点

  • 优点:
  1. 不需要输入预先设定的聚类个数 kkk
  2. 能够智能地将异常值识别为噪声(Noise)并过滤掉。
  3. 对簇的形状没有任何偏倚,可以发现任意大小和形状的簇。
  • 缺点:
  1. 聚类结果对参数(ϵ\epsilonϵMinPtsMinPtsMinPts)极其敏感,且没有普适的参数设定方法。
  2. 当数据集中聚类的密度极不均匀时,DBSCAN 的性能表现往往会大打折扣。

五. 层次聚类

层次聚类试图在不同的层次对数据集进行逐步划分,最终形成一棵“树形”的聚类结构(树状图 Dendrogram)。

1. 聚类策略

数据集的层次划分通常采用两种相反的策略:

  • 自底向上 (凝聚法, AGNES): 开始时将每个对象视为一个单独的簇,然后逐次合并最相近的簇,直到所有的对象合并为一个根簇,或者满足设定的终止条件。
  • 自顶向下 (分裂法, DIANA): 开始时将所有对象置于一个大簇中,每次迭代将簇分裂为更小的簇,直到每个对象各成一个簇。

2. 簇间距离度量

在进行合并或分裂时,由于簇内包含多个样本,我们需要定义集合与集合之间的距离度量:

  • 最小距离 (单链接算法): dmin(Ci,Cj)=min⁡dist(x,z)d_{min}(C_i, C_j) = \min dist(x, z)dmin(Ci,Cj)=mindist(x,z),取两簇中距离最近的两个样本点距离。
  • 最大距离 (全链接算法): dmax(Ci,Cj)=max⁡dist(x,z)d_{max}(C_i, C_j) = \max dist(x, z)dmax(Ci,Cj)=maxdist(x,z),取两簇中距离最远的两个样本点距离。
  • 平均距离 (均链接算法): davg(Ci,Cj)d_{avg}(C_i, C_j)davg(Ci,Cj),取两簇中所有点对距离的平均值。

六. 聚类算法的应用总结

作为挖掘数据潜在模式的利器,聚类在实际工业场景中有广泛的应用:

  1. 文本挖掘: 用于搜索引擎中的相关文档簇、查询建议的词簇提取。
  2. 推荐系统和广告: 用于物品和广告的协同推荐、相关物品建议的项目簇划分。
  3. 图像与视频处理: 用于搜索类似或重复的图像、视频簇归类。
  4. 音频分析: 语音识别或音频信号分类及分离。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值