1、概述
模糊C均值(Fuzzy C-Means、FCM)算法本质上是一个以距离作为衡量标准的聚类算法, 但是与传统的K均值(K-Means)算法相比,FCM算法引入了模糊的概念,此时就没有明确指出样本属于某一个簇,而是通过隶属度来表示样本属于某一个簇的程度。
2、FCM算法的一般步骤
本文以x i , i = 1 , 2 , . . . , n x_i,i=1,2,...,nxi,i=1,2,...,n为样本,使用FCM算法聚为e ee个簇。
1)初始化隶属度矩阵
首先使用(0,1)范围内的随机值初始化隶属度矩阵,且要满足约束条件∑ j = 1 e u i j = 1 , ∀ i ∈ [ 1 , 2 , . . . , n ] , \sum_{j=1}^{e}u_{ij}=1,\forall i \in [1,2,...,n],j=1∑euij=1,∀i∈[1,2,...,n],其中u i j u_{ij}uij代表第i ii个样本x i x_ixi属于第j jj个簇的程度。
2)计算聚类中心
使用如下公式计算聚类的中心c j = ∑ i = 1 n u i j β x i ∑ i = 1 n u i j β , c_j=\frac{\sum_{i=1}^{n}u_{ij}^\beta x_i}{\sum_{i=1}^{n}u_{ij}^\beta},cj=∑i=1nuijβ∑i=1nuijβxi,其中β ( β > 1 ) \beta(\beta>1)β(β>1)表示模糊度。
3)计算目标函数值
使用如下公式计算目标函数J = ∑ i = 1 n ∑ j = 1 e u i j β d i j 2 , J=\sum_{i=1}^{n}\sum_{j=1}^{e}u_{ij}^\beta d_{ij}^2,J=i=1∑nj=1∑euijβdij2,其中d i j = ∣ ∣ x i − c j ∣ ∣ d_{ij}=||x_i-c_j||dij=∣∣xi−cj∣∣。
4)更新隶属度矩阵
使用如下公式更新隶属度矩阵u i j = 1 ∑ k = 1 e d i j d i k 2 / β − 1 u_{ij}=\frac{1}{\sum_{k=1}^{e}{\frac{d_{ij}}{d_{ik}}}^{2/\beta -1}}uij=∑k=1edikdij2/β−11
5)重复2-4步,不断迭代,使得目标函数值逐渐减小,直至收敛。
3、FCM原理解析
通过FCM算法一般步骤可以看出,FCM算法与传统的K-Means算法相比最大的特点就是引入了模糊数学的概念,并通过隶属度来表达模糊的性质,而与隶属度相关联的还有模糊度β \betaβ,通过β \betaβ来表达模糊的程度。注意到模糊度存在一个约束条件,即β > 1 \beta>1β>1,当β → 1 \beta \to1β→1时,在隶属度的更新公式中2 / β − 1 → + ∞ , 2/\beta -1 \to +\infty,2/β−1→+∞,则∑ k = 1 e d i j d i k 2 / β − 1 → 1 或 + ∞ 。 {\sum_{k=1}^{e}\frac{d_{ij}}{d_{ik}}}^{2/\beta -1}\to1或+\infty。k=1∑edikdij2/β−1→1或+∞。∵ \because∵当d i j = min { d i 1 , d i 2 , . . . , d i k , . . . , d i e } d_{ij}=\min\{d_{i1},d_{i2},...,d_{ik},...,d_{ie}\}dij=min{di1,di2,...,dik,...,die}时,d i j d i k { = 1 , k = j < 1 , k ≠ j , \frac{d_{ij}}{d_{ik}} \left \{ \begin{aligned} =1, k=j \\ <1, k\neq j\end{aligned} \right.,dikdij{=1,k=j<1,k=j,故有lim β → 1 ∑ k = 1 e d i j d i k 2 / β − 1 = 1 ; \lim_{\beta \to 1}{\sum_{k=1}^{e}\frac{d_{ij}}{d_{ik}}}^{2/\beta -1}=1;β→1limk=1∑edikdij2/β−1=1;当d i j ≠ min { d i 1 , d i 2 , . . . , d i k , . . . , d i e } d_{ij}\neq\min\{d_{i1},d_{i2},...,d_{ik},...,d_{ie}\}dij=min{di1,di2,...,dik,...,die}时,d i j d i k { = 1 , d i j = d i k ≻ 1 , d i j > d i k < 1 , d i j < d i k , \frac{d_{ij}}{d_{ik}} \left \{ \begin{aligned} =1, d_{ij}=d_{ik} \\ \succ1,d_{ij}>d_{ik}\\ <1,d_{ij}<d_{ik}\end{aligned} \right.,dikdij⎩⎪⎨⎪⎧=1,dij=dik≻1,dij>dik<1,dij<dik,故有lim β → 1 ∑ k = 1 e d i j d i k 2 / β − 1 = + ∞ , \lim_{\beta \to 1}{\sum_{k=1}^{e}\frac{d_{ij}}{d_{ik}}}^{2/\beta -1}=+\infty,β→1limk=1∑edikdij2/β−1=+∞,∴ lim β → 1 u i j = 0 或 1 , \therefore\lim_{\beta \to 1}u_{ij}=0或1,∴β→1limuij=0或1,且有x i x_ixi到距离最近的中心所在的簇的隶属度为1,到其余簇的隶属度为0,此时的FCM算法就等同于K-Means算法,而且此时FCM算法的中心的计算公式也与K-Means算法的中心更新方式相同,而它的目标函数就可以理解为整体的样本点到他们所属的簇中心的距离最小,也与K-Means算法的最终目标大同小异,因此可以将FCM算法视为K-Means算法的推广,K-Means算法是FCM算法在β \betaβ取极限为1时的特例。