TFS-1996《The Possibilistic C-Means Algorithm: Insights and Recommendations》

发布于:2025-09-02 ⋅ 阅读:(19) ⋅ 点赞:(0)

核心思想

这篇论文的核心思想在于对可能性C均值(Possibilistic C-Means, PCM) 算法进行深刻的反思、剖析和澄清。作者Raghu Krishnapuram和James M. Keller旨在解决当时学界(以Barni等人提出的问题为代表)对PCM算法的误解和困惑。

其核心思想可以概括为以下几点:

  1. 根本性差异:PCM与传统的模糊C均值(FCM)算法有着本质区别。FCM是一种划分(Partitioning)算法,它强制性地将数据集划分为C个互斥的模糊子集,无论数据中是否真实存在C个簇。而PCM是一种模式寻找(Mode-Seeking)算法,它的目标是寻找数据空间中的“密集区域”(dense regions),每个簇的质心会自动向这些高密度区域移动。
  2. 成员度的语义:在FCM中,一个数据点在所有簇上的成员度之和为1,这使得成员度更像是一种“共享程度”。而在PCM中,成员度被解释为典型性(typicality)可能性(possibility),即该点属于某个簇的“典型程度”,它独立于其他簇。一个点可以同时是多个簇的典型代表,也可以对所有簇都表现出很低的典型性(如噪声点)。
  3. 对“重合簇”(coincidental clusters)的重新解读:当PCM产生多个重合的簇时,这并非算法的失败,而恰恰是其优势的体现。这表明数据中真实的簇数少于指定的C。PCM通过产生重合的簇来“诚实”地反映了数据的真实结构,而FCM则会强行将一个簇分裂成两个,从而“伪造”出不存在的结构。

目标函数

PCM的目标函数是其核心,它与FCM的关键区别在于移除了成员度的行和约束。其目标函数定义如下:

Jm(U,V;X)=∑i=1C∑j=1Nuijm∥xj−vi∥2 J_m(U, V; X) = \sum_{i=1}^C \sum_{j=1}^N u_{ij}^m \| \mathbf{x}_j - \mathbf{v}_i \|^2 Jm(U,V;X)=i=1Cj=1Nuijmxjvi2

其中:

  • U=[uij]U = [u_{ij}]U=[uij]C×NC \times NC×N 的成员度矩阵,uij∈[0,1]u_{ij} \in [0,1]uij[0,1] 表示第 jjj 个数据点 xj\mathbf{x}_jxj 属于第 iii 个簇的典型性。
  • V=[vi]V = [\mathbf{v}_i]V=[vi]C×pC \times pC×p 的质心矩阵,vi\mathbf{v}_ivi 是第 iii 个簇的质心。
  • X=[xj]X = [\mathbf{x}_j]X=[xj]p×Np \times Np×N 的数据矩阵。
  • m>1m > 1m>1 是模糊指数(fuzzifier)。
  • ∥⋅∥\| \cdot \| 是欧几里得范数。

与FCM相比,PCM的目标函数没有∑i=1Cuij=1\sum_{i=1}^C u_{ij} = 1i=1Cuij=1的约束。这个函数可以被分解为C个独立的子函数:
Jm(U,V;X)=∑i=1CJi(vi,ui;X) J_m(U, V; X) = \sum_{i=1}^C J_i(\mathbf{v}_i, \mathbf{u}_i; X) Jm(U,V;X)=i=1CJi(vi,ui;X)
其中 ui\mathbf{u}_iuiUUU 的第 iii 行。这表明每个簇的优化过程是独立的,这是PCM成为模式寻找算法的数学基础。

目标函数的优化过程

优化过程通过迭代更新成员度 uiju_{ij}uij 和质心 vi\mathbf{v}_ivi 来完成。

  1. 成员度 uiju_{ij}uij 的更新
    固定质心 vi\mathbf{v}_ivi,对目标函数 JmJ_mJm 关于 uiju_{ij}uij 求偏导并令其为零,可以得到更新公式:
    uij=11+(∥xj−vi∥2ηi)1m−1 u_{ij} = \frac{1}{1 + \left( \frac{\| \mathbf{x}_j - \mathbf{v}_i \|^2}{\eta_i} \right)^{\frac{1}{m-1}}} uij=1+(ηixjvi2)m111
    这里引入了一个关键参数 ηi\eta_iηi。这个参数 ηi\eta_iηi 不是一个需要手动设置的模糊指数,而是一个与第 iii 个簇的尺度(scale)或“影响范围”相关的参数。它的物理意义是:当数据点到质心的距离的平方等于 ηi\eta_iηi 时,其成员度 uij=0.5u_{ij} = 0.5uij=0.5。因此,ηi\eta_iηi 可以被估计为第 iii 个簇的平均簇内距离(或方差)。

  2. 质心 vi\mathbf{v}_ivi 的更新
    固定成员度 uiju_{ij}uij,对目标函数 JmJ_mJm 关于 vi\mathbf{v}_ivi 求偏导并令其为零,可以得到更新公式:
    vi=∑j=1Nuijmxj∑j=1Nuijm \mathbf{v}_i = \frac{\sum_{j=1}^N u_{ij}^m \mathbf{x}_j}{\sum_{j=1}^N u_{ij}^m} vi=j=1Nuijmj=1Nuijmxj
    这个更新公式与FCM的形式相同,即加权平均。

优化过程总结

  1. 初始化质心 V(0)V^{(0)}V(0) 和参数 ηi\eta_iηi
  2. 迭代
    • 更新成员度:使用 uij(t)=[1+(∥xj−vi(t)∥2ηi)1m−1]−1u_{ij}^{(t)} = \left[ 1 + \left( \frac{\| \mathbf{x}_j - \mathbf{v}_i^{(t)} \|^2}{\eta_i} \right)^{\frac{1}{m-1}} \right]^{-1}uij(t)=[1+(ηixjvi(t)2)m11]1
    • 更新质心:使用 vi(t+1)=∑j=1N(uij(t))mxj∑j=1N(uij(t))m\mathbf{v}_i^{(t+1)} = \frac{\sum_{j=1}^N (u_{ij}^{(t)})^m \mathbf{x}_j}{\sum_{j=1}^N (u_{ij}^{(t)})^m}vi(t+1)=j=1N(uij(t))mj=1N(uij(t))mxj
  3. 直到质心或成员度的变化小于预设阈值。

主要贡献点

  1. 澄清误解:论文有力地回应了Barni等人对PCM“产生重合簇”的批评,指出这并非缺陷,而是算法对数据真实结构(簇数不足)的诚实反映
  2. 深刻剖析本质:清晰地指出了PCM与FCM在算法哲学上的根本区别——PCM是模式寻找,FCM是强制划分。这一洞见是理解PCM的关键。
  3. 参数 ηi\eta_iηi 的语义阐释:强调了 ηi\eta_iηi 作为尺度参数的重要性,它决定了簇的“大小”或“分辨率”。其值应从数据中估计(如使用FCM的初始结果),而不是随意设定。
  4. 模糊指数 mmm 的建议:挑战了FCM中 m≈2m \approx 2m2 的惯例,指出在PCM中,由于成员度衰减速度的要求(应快速衰减到0),m=2m=2m=2 会导致衰减过慢,一个更合适的值是 m=1.5m=1.5m=1.5
  5. 稳健性分析:阐明了PCM在处理噪声和离群点方面的优势,因为噪声点对所有簇的典型性都很低,因此对质心更新的影响很小,这与鲁棒统计学中的M-估计器有联系。

算法实现过程详解

以下是实现PCM算法的详细步骤:

  1. 数据准备与初始化

    • 输入数据集 X={x1,x2,...,xN}X = \{\mathbf{x}_1, \mathbf{x}_2, ..., \mathbf{x}_N\}X={x1,x2,...,xN}
    • 设定簇数 CCC
    • 初始化质心 VVV:一个常用且稳健的方法是先用FCM算法运行几轮,然后将FCM得到的质心作为PCM的初始质心。
    • 估计参数 ηi\eta_iηi:利用FCM的结果,计算每个簇的平均簇内距离:
      ηi=∑j=1Nuijm∥xj−vi∥2∑j=1Nuijm \eta_i = \frac{\sum_{j=1}^N u_{ij}^m \| \mathbf{x}_j - \mathbf{v}_i \|^2}{\sum_{j=1}^N u_{ij}^m} ηi=j=1Nuijmj=1Nuijmxjvi2
      其中 uiju_{ij}uijvi\mathbf{v}_ivi 是FCM的输出结果。或者,可以使用所有数据点到其最近质心的平均距离作为 ηi\eta_iηi 的初始估计。
    • 设置模糊指数 mmm,推荐使用 m=1.5m=1.5m=1.5
  2. 主循环(迭代优化)

    • 步骤1:更新成员度矩阵 UUU
      对于每个数据点 xj\mathbf{x}_jxj 和每个簇 iii,计算其成员度:
      uij=11+(∥xj−vi∥2ηi)1m−1 u_{ij} = \frac{1}{1 + \left( \frac{\| \mathbf{x}_j - \mathbf{v}_i \|^2}{\eta_i} \right)^{\frac{1}{m-1}}} uij=1+(ηixjvi2)m111
      这里的 ηi\eta_iηi 在整个迭代过程中通常保持不变(除非采用自适应方法)。

    • 步骤2:更新质心矩阵 VVV
      对于每个簇 iii,根据其当前的成员度,计算新的质心位置:
      vi=∑j=1Nuijmxj∑j=1Nuijm \mathbf{v}_i = \frac{\sum_{j=1}^N u_{ij}^m \mathbf{x}_j}{\sum_{j=1}^N u_{ij}^m} vi=j=1Nuijmj=1Nuijmxj

    • 步骤3:检查收敛
      计算本次迭代质心的变化量,例如:
      δ=max⁡i∥vi(new)−vi(old)∥ \delta = \max_i \| \mathbf{v}_i^{(new)} - \mathbf{v}_i^{(old)} \| δ=imaxvi(new)vi(old)
      如果 δ<ϵ\delta < \epsilonδ<ϵϵ\epsilonϵ 是一个很小的正数,如 10−510^{-5}105),则算法收敛,退出循环;否则,返回步骤1。

  3. 后处理与结果分析

    • 确定最终簇标签:对于每个数据点 xj\mathbf{x}_jxj,将其分配给成员度 uiju_{ij}uij 最大的那个簇。
    • 处理重合簇:检查最终的 CCC 个质心。如果发现有多个质心非常接近(距离小于某个阈值),则可以将它们合并为一个簇。这一步可以自动确定数据中“有效”的簇数。
    • 评估结果:可以使用轮廓系数(Silhouette Coefficient)等内部指标来评估聚类质量。

关键实现要点

  • ηi\eta_iηi 的估计至关重要。一个不恰当的 ηi\eta_iηi(过大或过小)会导致所有质心收敛到数据集的全局中心或产生大量无效的小簇。
  • 初始化很重要。一个好的初始化(如来自FCM)可以大大提高算法的稳定性和效率。
  • m=1.5m=1.5m=1.5 是一个经验性建议,在实际应用中可以尝试 m∈[1.2,2.0]m \in [1.2, 2.0]m[1.2,2.0] 来观察效果。

网站公告

今日签到

点亮在社区的每一天
去签到