FCM推导过程超详细
最近毕业,然后可能用到FCM,找了挺多博客论文,更多的是关于用法没有推导过程,于是自己总结写一篇详细版尽量小白也能看懂的fcm推导过程,加深对算法的理解。标题或内容可能会挺暴力,个人习惯问题哈哈哈。如果写的有问题望各位多多指导,多多包涵。(好像有个别符号可能不规范,但应该不影响阅读,影响了请告知!)
1、概述
fcm是一个聚类算法。打些标签,模式分类,无监督学习,k-means,HCM(k-means),模糊-c均值算法。其他废话就不写了。
本篇主要讲推导过程,当然不看过程也能使用fcm聚类,那么就把结果和迭代过程写在开头。
1.1公式
目标函数
J m ( u , c ) = ∑ i = 1 K ∑ j = 1 N u i j m ∥ x j − c i ∥ 2 J_m(u,c)=\sum_{i=1}^{K}\sum_{j=1}^{N}u_{ij}^{m}\left \| x_j-c_i\right \|^{2} Jm(u,c)=i=1∑Kj=1∑Nuijm∥xj−ci∥2
簇群中心
c i = ∑ j = 1 N u i j m x j ∑ j = 1 N u i j m c_i=\frac{\sum_{j=1}^{N}u_{ij}^{m}x_j}{\sum_{j=1}^{N}u_{ij}^{m}} ci=∑j=1Nuijm∑j=1Nuijmxj
隶属值
u i j = 1 ∑ u = 1 k ( ∥ x j − c i ∥ ∥ x j − c u ∥ ) 2 m − 1 u_{ij}=\frac{1}{\sum_{u=1}^{k}(\frac{\left\| x_j-c_i \right\|}{\left \| x_j-c_u\right \|})^\frac{2}{m-1}} uij=∑u=1k(∥xj−cu∥∥xj−ci∥)m−121
1.2迭代过程
step1. 初始化赋值簇群中心或隶属度(这里先赋值隶属值)
step2. 利用 c i c_i ci公式计算簇群中心
step3. 根据得到的簇群中心利用 u i j u_{ij} uij公式更新隶属值
step4. 计算目标函数 J m ( u , c ) J_m(u,c) Jm(u,c)的值记为 j ( t ) j^{(t)} j(t)(t为本次循环的意思)
step5. If ∥ j ( t ) − j ( t − 1 ) ∥ \left\| j^{(t)}-j^{(t-1)}\right\| ∥∥j(t)−j(t−1)∥∥<&,本次循环的值减上次的小于给定值,那么stop;否则 return to step 2.(给定值即为循环停止条件)
迭代过程整体和HCM相似。在计算距离的时候添加了一个隶属值,也就是加权值,在HCM是直接计算距离的基础上,多了个权值。并且隶属值每次循环都会更新,所以在给定初始值时可以给随机值(一开始没想进去就是这里,脑子默认近大远小初始隶属值不知道怎么给定,但这实际是分类完成时的结果,分类开始时不需要考虑)。
关于m值是一个加权指数,影响的是算法的性能,对于分类没有影响,条件是要大于1,本篇最后会提一下。
2、推导过程
2.1通式
x j x_j xj,需分类的数据集,j = 1,2,……,N
c i c_i ci,分类形成的簇群中心,i = 1,2,……,K
u i j u_{ij} uij,隶属值 Membership Values
x j x_j xj——> c 1 c_1 c1, u 1 j u_{1j} u1j, x j x_j xj点归属于 c 1 c_1 c1群的隶属值记为 u i j u_{ij} uij
x j x_j xj——> c 2 c_2 c2, u 2 j u_{2j} u2j, x j x_j xj点归属于 c 2 c_2 c2群的隶属值记为 u i j u_{ij} uij
m,Fuzzifier,加权指数(模糊控制),影响收敛速度,影响性能,我是这么理解。
综上, x j x_j xj归属哪个 c i c_i ci群由 u i j ( x j − c i ) u_{ij}(x_j-c_i) uij(xj−ci)距离大小决定,归属于距离小的簇群,是不是和HCM很像。
先举个例 (m的作用可以参考这个例子)
假设要分成两类,分别为 c 1 c_1 c1, c 2 c_2 c2两个群,那么 u 1 j + u 2 j = 1 u_{1j}+u_{2j}=1 u1j+u2j=1
令 u 1 j = 0.8 u_{1j}=0.8 u1j=0.8, u 2 j = 0.2 u_{2j}=0.2 u2j=0.2,m=2,那么 u 1 j m = 0.64 u_{1j}^m=0.64 u1jm=0.64, u 2 j m = 0.04 u_{2j}^m=0.04 u2jm=0.04, u 2 j m u_{2j}^m u2jm远小于 u 1 j m u_{1j}^m u1jm
因为 u 1 j > u 2 j u_{1j}>u_{2j} u1j>u2j,可知