模糊 C 均值 · 深度手册
分类:聚类分类 | 难度:★★☆ 进阶 | 编号:
fcm
一、这是什么(一句话用途)
允许样本属多簇的软聚类
二、核心思想
普通 K-Means 强制每个样本"非此即彼"地属于唯一簇,但现实中很多对象具有多重属性——一个用户可能既爱运动又爱数码。模糊 C 均值(FCM)放宽这一假设,用"隶属度" 表示样本 对各簇 的归属强度(所有簇隶属度之和为 1),从而得到软划分。它比硬聚类更贴合模糊现实,常用于模式识别、图像分割与用户画像的"交叉兴趣"建模。
三、数学原理与推导
目标函数(带模糊指数 ):
为簇中心, 为隶属度须满足 。用 Lagrange 乘子法对 交替求极值:
隶属度更新:
中心更新(加权均值):
交替迭代至 收敛。 常取 2,越大划分越模糊;需预设簇数 。最终以最大隶属度决定主簇,或保留隶属度向量作软标签。
四、建模 / 求解步骤
- 设簇数 c 与模糊指数 m
- 初始化隶属度
- 更新聚类中心
- 更新隶属度
- 收敛得软划分
五、关键公式速查
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.
十四、相关手册(延伸阅读)
- K-Means 聚类 · 聚类分类
十五、本手册导航
本手册由「算法深度手册生成器」自动产出,配套提供 Python / MATLAB 双版本示例与可下载练手数据集。