层次聚类#
自底向上(凝聚式)或自顶向下(分裂式)。不需要预先指定聚类数,但对噪声敏感,且无法修正早期的错误合并/分割。
算法步骤:
输入:样本集合 {x1,x2,…,xn},距离度量(如欧氏距离),目标聚类数 c。
- 初始时每个样本自成一类,当前类别数 c′=n。
- 每次合并最相似的两个类 c′←c′−1,判断“最接近”的标准
- 两个类中最近样本的距离最小
- 或两个类中心(均值)的欧氏距离最小。
优点
- 不需要初始化聚类中心,结果具有确定性(不受初始值影响),且可以生成树状图(Dendrogram)便于观察层次结构。
缺点
- 计算量较大(特别是每轮寻找最近两类的过程),且本质上是贪心优化,一旦合并无法撤销。
K-means#
直接对误差平方和准则 Je 进行迭代贪心搜索。
算法步骤(两步迭代直至收敛):
输入:样本集合 {x1,x2,…,xn},目标聚类数 c。
-
先初始化 c 个聚类中心 {μ1,μ2,…,μc}(如随机选择样本点或使用K-means++算法)。
-
分配(E步思想):固定当前的 c 个聚类中心 μi,依次计算每个样本到各聚类中心的距离,并将其分配给最近的聚类。
-
更新(M步思想):固定当前的划分,对于每一个聚类 Ci,重新计算该类内样本的均值,作为新的聚类中心 μi。
-
收敛判断:新旧聚类中心的变化小于某个阈值,或达到最大迭代次数。
缺点
- 聚类结果高度依赖初始聚类中心的选择。不同的初始中心会收敛到不同的局部最优解
EM算法+GMM(Gaussian Mixture Model)#
基于概率分布的软聚类(每个样本以一定概率属于某个类)。
GMM: 假设数据 x 由多个(M个)高斯分布混合生成,每个高斯分布对应一个聚类。每个样本属于每个聚类的概率由该样本在对应高斯分布下的概率密度函数值决定。
p(x)=i=1∑MaiN(x∣μi,Σi)ai≥0,i=1∑Mai=1引入隐变量 Y={y1,y2,…,yn},yi=1⋯,M,其中 yj 表示样本 xj 属于哪个聚类,先猜一组参数 θ(0)={ai,μi,Σi},i=1,…,M,用θk(j)表示第j轮迭代的,属于第k个聚类的参数,然后迭代优化:
EM算法步骤(针对GMM):
-
E步:利用上一轮的旧参数,计算每个样本 xj 属于每个聚类的后验概率(责任度):
P(m∣xt,θ(i))=∑j=1Maj(i)N(xt∣θj(i))am(i)N(xt∣θm(i))
-
M步:根据责任度更新参数:
- 更新混合系数 am(i+1):
am(i+1)=n1t=1∑nP(m∣xt,θ(i))
- 更新均值(各类中心) μm(i+1):
μm(i+1)=∑t=1nP(m∣xt,θ(i))∑t=1nP(m∣xt,θ(i))xt
- 更新协方差矩阵 Σm(i+1):
Σm(i+1)=∑t=1nP(m∣xt,θ(i))∑t=1nP(m∣xt,θ(i))(xt−μm(i+1))(xt−μm(i+1))T
可以把 K-means 看作是 GMM + EM 的一个极端特例:
| 对比维度 | K-means | GMM + EM |
|---|
| E步(分配) | 硬划分:样本只给最近的中心(责任为0或1) | 软划分:样本按概率分配给所有高斯(责任为0~1) |
| M步(更新) | 普通算术平均(所有样本一视同仁) | 加权平均(责任大的样本说了算) |
| 聚类形状 | 只能画圆形/球形(各向同性) | 可以画任意方向的椭圆(协方差矩阵决定) |
| 输出结果 | 只给类别标签 | 给出属于每个类的概率,信息更丰富 |