聚类
聚类(Clustering)是一种典型的无监督学习算法,其核心目标是分割给定的无标注数据集,使得相似的数据点被分配到相同的簇(Cluster)中,而不相似的数据点被分在不同的簇中。
| 概念 | 定义说明 |
|---|---|
| 无监督学习 | 从无标注数据中学习预测模型的机器学习问题,本质是学习数据中的统计规律或内在结构。 |
| 聚类 | 样本分组:组内样本相似度高,组间样本相似度低。 |
| 簇心 (Centroid) | 一个簇中所有样本点的中心位置。 |
| 隐变量模型 | 包含不可观测变量的模型,这些隐变量会影响观测数据的生成过程。 |
一. 无监督学习与聚类概述
1. 无监督学习的核心
在无监督学习中,我们首先学习联合分布 P(X)P(X)P(X),然后推断条件分布 P(xt∣X∖xt)P(x_t | X \setminus x_t)P(xt∣X∖xt),特征 XXX 的每个维度都是被平等对待的。
参数:
- XXX(特征集合/特征向量): 代表一个样本的所有特征。假设一个样本有 ddd 个维度(特征),那么 X={x1,x2,…,xd}X = \{x_1, x_2, \dots, x_d\}X={x1,x2,…,xd}。
- xtx_txt(目标特征): 代表这 ddd 个特征中的第 ttt 个特征(其中 1≤t≤d1 \le t \le d1≤t≤d)。
- ∖\setminus∖(集合减法/排除): 在数学集合论中表示“除去”。所以 X∖xtX \setminus x_tX∖xt 的意思是:整体特征集合 XXX 中,除去了第 ttt 个特征之后,剩下的所有其他特征的集合。
整句公式的含义:在已知除了第 ttt 个特征以外的所有其他特征的情况下,第 ttt 个特征取某个具体值的条件概率。
有监督 vs 无监督:
有监督学习直接学习条件分布 P(xt∣X∖xt)P(x_t | X \setminus x_t)P(xt∣X∖xt),其中 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)=(Ax−Bx)2+(Ay−By)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=1∑n(Ai−Bi)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−μj∣∣2=k=1∑d(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=1∑Kx∈Ci∑∣∣x−μi∣∣2
- CiC_iCi 表示第 iii 个簇,μi\mu_iμi 表示第 iii 个簇的质心。
- ∣∣x−μi∣∣2||x - \mu_i||^2∣∣x−μi∣∣2 表示样本点到质心的平方距离。
- SSE 越小,说明簇内样本越紧凑,聚类效果通常越好。
5. K-Means的迭代流程
K-Means 的核心就是不断循环:选中心 →\rightarrow→ 分簇 →\rightarrow→ 更新中心 →\rightarrow→ 再分簇 →\rightarrow→ 直到稳定。
- 初始化质心:预先指定 K,随机选取 K 个初始中心点。
- 分配样本:计算每个样本到各质心的距离,划分到距离最近的簇中。
- 更新质心:根据当前簇中的所有样本,重新计算该簇的中心点(均值)。
- 重复迭代:重新分配样本并更新质心,不断循环。
- 收敛停止:当质心位置不再变化、样本归属不再改变,或达到最大迭代次数时停止。
6. 算法的最优性与局限
-
优化 1:初始质心选择 (K-Means++)
随机选择初始质心可能导致算法陷入较差的局部最优解。不同的初始化方式,最终得到的聚类结果可能存在明显差异。
解决方案:K-Means++
先随机选取一个样本点作为第一个质心;之后,在选择下一个质心时,优先考虑那些距离当前已有质心较远的样本点。重复这一过程,直到选出 K 个初始质心。
-
优化 2:肘部法则选择 K 值
K-Means 最大的问题是簇数 K 需要预先指定。如何找到性价比最优的 K 值?
-
依次尝试不同的 K 值,计算对应的 SSE。
-
随着 K 增大,SSE 会持续下降。
-
当 K 超过某个值后,SSE 下降幅度明显减小,曲线趋于平缓。
-
这个斜率突然减小、曲线由陡转平的拐点(肘部),就是较优的 K 值选择。
-
- 输入样本集: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=argminj∈{1,…,k}∣∣xi−μj∣∣2C_i = \arg\min_{j \in \{1, \dots, k\}} || x_i - \mu_j ||^2Ci=argj∈{1,…,k}min∣∣xi−μj∣∣2
步骤 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=∣Nj∣1xi∈Nj∑xi
(其中 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(z∣x)。
-
假设: 样本的生成过程由 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=1∑kαi⋅p(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 = 1∑j=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=1∑m(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=1∑m(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σ2→0) 时,高斯混合聚类和 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αl⋅N(xi∣μl,Σl)αj⋅N(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=1∑mγ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=1∑mγij(xi−μjnew)(xi−μjnew)T
更新混合系数:
αjnew=Njm\alpha_j^{new} = \frac{N_j}{m}αjnew=mNj
④ 终止评估
重复执行 E-Step 和 M-Step。每次迭代后计算当前的对数似然函数值 lnP(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_jxj 由 xix_ixi 密度直达。(不满足对称性) |
| 密度可达 | 若存在一条样本链 p1…pnp_1 \dots p_np1…pn,且 pi+1p_{i+1}pi+1 由 pip_ipi 密度直达,则链两端的点密度可达。(满足传递性) |
| 密度相连 | 存在核心对象 xkx_kxk,使得 xix_ixi 和 xjx_jxj 均由 xkx_kxk 密度可达,则称 xix_ixi 与 xjx_jxj 密度相连。(满足对称性) |
2. 簇的定义
在 DBSCAN 中,一个“簇”被严格定义为:由密度可达关系导出的最大的密度相连样本集合。
3. 算法优缺点
- 优点:
- 不需要输入预先设定的聚类个数 kkk。
- 能够智能地将异常值识别为噪声(Noise)并过滤掉。
- 对簇的形状没有任何偏倚,可以发现任意大小和形状的簇。
- 缺点:
- 聚类结果对参数(ϵ\epsilonϵ 和 MinPtsMinPtsMinPts)极其敏感,且没有普适的参数设定方法。
- 当数据集中聚类的密度极不均匀时,DBSCAN 的性能表现往往会大打折扣。
五. 层次聚类
层次聚类试图在不同的层次对数据集进行逐步划分,最终形成一棵“树形”的聚类结构(树状图 Dendrogram)。
1. 聚类策略
数据集的层次划分通常采用两种相反的策略:
- 自底向上 (凝聚法, AGNES): 开始时将每个对象视为一个单独的簇,然后逐次合并最相近的簇,直到所有的对象合并为一个根簇,或者满足设定的终止条件。
- 自顶向下 (分裂法, DIANA): 开始时将所有对象置于一个大簇中,每次迭代将簇分裂为更小的簇,直到每个对象各成一个簇。
2. 簇间距离度量
在进行合并或分裂时,由于簇内包含多个样本,我们需要定义集合与集合之间的距离度量:
- 最小距离 (单链接算法): dmin(Ci,Cj)=mindist(x,z)d_{min}(C_i, C_j) = \min dist(x, z)dmin(Ci,Cj)=mindist(x,z),取两簇中距离最近的两个样本点距离。
- 最大距离 (全链接算法): dmax(Ci,Cj)=maxdist(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),取两簇中所有点对距离的平均值。
六. 聚类算法的应用总结
作为挖掘数据潜在模式的利器,聚类在实际工业场景中有广泛的应用:
- 文本挖掘: 用于搜索引擎中的相关文档簇、查询建议的词簇提取。
- 推荐系统和广告: 用于物品和广告的协同推荐、相关物品建议的项目簇划分。
- 图像与视频处理: 用于搜索类似或重复的图像、视频簇归类。
- 音频分析: 语音识别或音频信号分类及分离。

239

被折叠的 条评论
为什么被折叠?



