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

核心思想

这篇论文的核心思想在于对可能性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=1∑Cj=1∑Nuijm∥xj−vi∥2

其中:

  • 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} = 1∑i=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=1∑CJi(vi,ui;X)

其中 ui\mathbf{u}_iui 是 UUU 的第 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+(ηi∥xj−vi∥2)m−111

    这里引入了一个关键参数 η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=1Nuijm∑j=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+(ηi∥xj−vi(t)∥2)m−11]−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))m∑j=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 2m≈2 的惯例,指出在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=1Nuijm∑j=1Nuijm∥xj−vi∥2
      其中 uiju_{ij}uij 和 vi\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+(ηi∥xj−vi∥2)m−111

      这里的 η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=1Nuijm∑j=1Nuijmxj

    • 步骤3:检查收敛

      计算本次迭代质心的变化量,例如:
      δ=max⁡i∥vi(new)−vi(old)∥ \delta = \max_i \| \mathbf{v}_i^{(new)} - \mathbf{v}_i^{(old)} \| δ=imax∥vi(new)−vi(old)∥

      如果 δ<ϵ\delta < \epsilonδ<ϵ(ϵ\epsilonϵ 是一个很小的正数,如 10−510^{-5}10−5),则算法收敛,退出循环;否则,返回步骤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] 来观察效果。
相关推荐
寂静山林5 分钟前
UVa 10228 A Star not a Tree?
算法
爱喝白开水a6 分钟前
LangChain 基础系列之 Prompt 工程详解:从设计原理到实战模板_langchain prompt
开发语言·数据库·人工智能·python·langchain·prompt·知识图谱
takashi_void13 分钟前
如何在本地部署大语言模型(Windows,Mac,Linux)三系统教程
linux·人工智能·windows·macos·语言模型·nlp
OpenCSG18 分钟前
【活动预告】2025斗拱开发者大会,共探支付与AI未来
人工智能·ai·开源·大模型·支付安全
Neverfadeaway18 分钟前
【C语言】深入理解函数指针数组应用(4)
c语言·开发语言·算法·回调函数·转移表·c语言实现计算器
生命是有光的21 分钟前
【深度学习】神经网络基础
人工智能·深度学习·神经网络
数字供应链安全产品选型25 分钟前
国家级!悬镜安全入选两项“网络安全国家标准应用实践案例”
人工智能·安全·web安全
科技新知37 分钟前
大厂AI各走“开源”路
人工智能·开源
字节数据平台40 分钟前
火山引擎Data Agent再拓新场景,重磅推出用户研究Agent
大数据·人工智能·火山引擎
TGITCIC40 分钟前
LLaVA-OV:开源多模态的“可复现”革命,不只是又一个模型
人工智能·开源·多模态·ai大模型·开源大模型·视觉模型·大模型ai