MCM520 ← 资料站首页 模糊 C 均值 · 深度手册 打开交互阅读器 →

模糊 C 均值 · 深度手册

分类:聚类分类 | 难度:★★☆ 进阶 | 编号:fcm

一、这是什么(一句话用途)

允许样本属多簇的软聚类

二、核心思想

普通 K-Means 强制每个样本"非此即彼"地属于唯一簇,但现实中很多对象具有多重属性——一个用户可能既爱运动又爱数码。模糊 C 均值(FCM)放宽这一假设,用"隶属度" uik∈[0,1]u_{ik}\in[0,1] 表示样本 ii 对各簇 kk 的归属强度(所有簇隶属度之和为 1),从而得到软划分。它比硬聚类更贴合模糊现实,常用于模式识别、图像分割与用户画像的"交叉兴趣"建模。

三、数学原理与推导

目标函数(带模糊指数 m>1m>1):

J=∑i=1N∑k=1Cuikm∥xi−vk∥2 J=\sum_{i=1}^{N}\sum_{k=1}^{C}u_{ik}^m\|x_i-v_k\|^2

vkv_k 为簇中心,uiku_{ik} 为隶属度须满足 ∑kuik=1\sum_k u_{ik}=1。用 Lagrange 乘子法对 uik,vku_{ik},v_k 交替求极值:

隶属度更新:

uik=1∑j=1C(∥xi−vk∥∥xi−vj∥)2/(m−1) u_{ik}=\frac{1}{\sum_{j=1}^{C}\left(\frac{\|x_i-v_k\|}{\|x_i-v_j\|}\right)^{2/(m-1)}}

中心更新(加权均值):

vk=∑i=1Nuikmxi∑i=1Nuikm v_k=\frac{\sum_{i=1}^{N}u_{ik}^m x_i}{\sum_{i=1}^{N}u_{ik}^m}

交替迭代至 JJ 收敛。mm 常取 2,越大划分越模糊;需预设簇数 CC。最终以最大隶属度决定主簇,或保留隶属度向量作软标签。

四、建模 / 求解步骤

  1. 设簇数 c 与模糊指数 m
  2. 初始化隶属度
  3. 更新聚类中心
  4. 更新隶属度
  5. 收敛得软划分

五、关键公式速查

J=ΣΣ u_ik^m ‖x_i−v_k‖²;u_ik=1/Σ(‖x_i−v_j‖/‖x_i−v_k‖)^(2/(m−1))

六、典型示例

用户兴趣跨多类(既爱运动又爱数码)的软分群。

完整算例(数字演示,照着算一遍)

场景:同 K-Means 数据,K=2,模糊指数 m=2,迭代 20。

隶属度:点(2,2)对簇1 u=0.92、簇2 u=0.08;点(5,5)相反。

结论:FCM 给出软归属,适合边界模糊的样本。

七、Python 实现示例

import os, numpy as np
import pandas as pd
HERE = os.path.dirname(os.path.abspath(__file__))
df = pd.read_csv(os.path.join(HERE,"..","datasets","fcm.csv"))
X = df[["x","y"]].to_numpy(dtype=float)
C=3; m=2; rng=np.random.default_rng(8)
U=rng.random((len(X),C)); U/=U.sum(1,keepdims=True)
for _ in range(50):
    V=(U.T**m @ X)/(U.T**m).sum(1,keepdims=True)
    d=np.linalg.norm(X[:,None]-V[None],axis=2)
    U=1/((d+1e-9)**(2/(m-1)))
    U/=U.sum(1,keepdims=True)
labels=U.argmax(1)
print("隶属矩阵(前3样本):\n", np.round(U[:3],2))
print("簇中心:\n", np.round(V,2))

配套文件:py_fcm.py(需 numpy / pandas;与下方数据集配套练习)

八、MATLAB 实现示例

%% 模糊 C 均值示例(MATLAB/Octave)
df = readtable('..\datasets\fcm.csv');
X = table2array(df(:,1:2)); C=3; m=2; rng(8);
U=rand(height(X),C); U=U./sum(U,2);
for i=1:50
  V=(U'.^m*X)./sum(U'.^m,2);
  d=sqrt(sum((X-V).^2,2)); d=1./(d.^(2/(m-1))+1e-9); U=d./sum(d,2);
end
[~,labels]=max(U,[],2); disp(V);

配套文件:m_fcm.m(基础 MATLAB / Octave 即可运行)

九、练手数据集(可下载)

50 个二维点(2 簇)。用于模糊 C 均值软聚类,看隶属度。

  • 字段:x, y
  • 行数:50 行
  • 下载:fcm.csv

十、常见误区与避坑清单

  • m 常取 2
  • 初始敏感
  • 需预设 c

十一、结果怎么解读

隶属度向量即各簇归属强度。

十二、常与谁搭配

硬聚类用 KMeans。

十三、论文写作技巧(怎么把它写进论文)

把 模糊 C 均值 写进论文,核心不是堆公式,而是讲清「为什么用它、结果怎么呈现、如何对比」三件事。

1. 动机怎么写(为什么用它而不是别的)

区分你要的是无监督划分(聚类)还是有监督判别(分类)。说明特征维度与样本量,以及为什么选 模糊 C 均值(如非线性边界用核方法、高维稀疏用线性、需概率输出用贝叶斯)。

2. 结果怎么写(图表与指标)

聚类给散点图着色 + 轮廓系数 / 肘部图;分类给混淆矩阵 + 准确率 / F1 / ROC 曲线。特征重要性图能加分。

3. 可直接套用的写作话术

  • 中文模板:针对<问题>,本文采用 模糊 C 均值 进行允许样本属多簇的软聚类。该方法能够自动刻画<优势>,在处理<场景>时相较<对比方法>更具<特点>。
  • 英文模板:To address , we adopt 模糊 C 均值 to 允许样本属多簇的软聚类. Benefiting from its ability to , it outperforms on .

4. 同类易踩的写作坑

聚类要说明簇数怎么定(不是拍脑袋);分类要交代训练 / 测试划分与交叉验证,避免过拟合误报高精度。

5. 典型论文段落范例(可直接参考 / 改写)

下面是一段可直接套用的论文表述,已按本算法定制,填空处(…)替换成你的真实数值即可。

为揭示客户群体的内在结构,本文采用 模糊 C 均值 将 1,200 条样本划分为 4 类(轮廓系数=0.61),各类在消费频次与客单价上差异显著,为精准营销提供依据。

To reveal the intrinsic structure of customers, we apply 模糊 C 均值 to partition 1,200 samples into 4 clusters (silhouette=0.61); the groups differ markedly in purchase frequency and average order value, supporting targeted marketing.

十四、相关手册(延伸阅读)

十五、本手册导航


本手册由「算法深度手册生成器」自动产出,配套提供 Python / MATLAB 双版本示例与可下载练手数据集。