admin管理员组

文章数量:1794759

模糊聚类分析(FCM)算法原理及实现

模糊聚类分析(FCM)算法原理及实现

说到FCM算法,就不得不先提一下Kmeans算法去对比着理解。Kmeans算法的本质是按照距离最近原则,样本离哪个类别的中心点最近,就将样本划分给哪个类别中。举个例子,如有怀孕后能同房吗一个样本集X,要分为A和B两类,X中的某个样众议院本x,到A类的中心点距离7850为2,到B类的中心点距离为1,那么阻燃塑料按照Kmeans算法,x毫无疑问的要100%划分给A类别,完全不属于B类别。(Kmeans算法可查看文章Kmeans聚类算法的原理及实现)

但是在FCM算法中,x是属于每个类别的,如x属于A的隶属度为0.8,属于B的隶属度为0.2。结合起来看,Kmeans算法中样本仅属于一个类别,但是在FCM算法中,样本属于每个类别,只不过隶属度有大有小。

下面来详细描述一下FCM算法的原理

一、FCM算法原理

FCM算法是fuzzy c-means 的简称,是一种基于目标函数的模糊聚类方法。

假设有个数据集X,要划分为C个类,那么对应就有C个类中心,每个样本j属油罐防腐于某一类的隶属度为 \\mu_{ij} ,FCM算法的目标网络舆情监测系统函数集约束条件如下(目标函数为样本到各类中心点的误差平方和,FCM算法中每个样本属于某个类有个隶属度,公式中要体现):

J=\\sum_{i=1}^{C}{\\sum_{j=1}^{n}{\\mu_{ij}^{m}(x_{j}-C_{i})地方债务^{2}}} ,使得, \\sum_{i}^{C}{\\mu_{ij}}=1,j=1,2,3,...,n (1)圆与圆的位置关系

J 越小,说明分类效果越好,那上面的最优化问题替代品就是找到使 J 最小的\\mu_{ij}和ppt设计 C_{i} (可跳过以下推到过程,直接查看公式(6)和(7) )

该最优化问题使用拉格朗日乘数法解决,将约束条件融合到目标函数中,对\\mu_{ij}和 C_{i}分别求偏导计算两个参数的取值

上述最优化问题转化为,求下面函数的偏导问题J=\\sum_{i=1}^{C}{\\sum_{j=1}^{n}{\\mu_{ij}^{m}(x_{j}-C_{i})^{2}}}+\\lambda_{1}(\\sum_{i=1}^{C}{\\mu_{i1}-1})+\\lambda_{2}(\\sum_{i=1}^{C}{\\mu_{i2}-1})+...+\\lambda_{n}(\\王晓松sum_{i=1}^{C}{\\mu_{in}-1})

先对\\mu_{ij}求偏导:

\\frac{\\parca1373tial J}{\\partial \\mu_{ij}}=m(x_{j}-C_{i})^{2}\\mu_{ij}^{m-1}+\\lambda_{j}=0

推到得出:

\\mu_{ij}^{m-1}=\\frac{-\\lambda_{j}}{m(x_{j}-C_{i})^{2}}

\\mu_{ij}=(\\frac{-\\lambda_{j}}{m(x_{j}-C_{i})^{2}})^{\\frac{1}{m-1}} (2)

接下来想办法将(2)式中的 \\lambda 和 m 消掉,已知条件中能用的仅有

\\sum_{i}^{C}{\\mu_{ij}}=1,j=1,2,3,...,n (3)

将(2)式代入(3)中,得到

\\sum_{i=1}^{C}{(\\frac{-\\lambda_{j}}{m(x_{j}-C_{i})^{2}})^{\\frac{1}{m-1}}}=1 (4)

从(4)式得出, (\\frac{-\\lambda_{j}}{m})^{\\frac{1}{m-1}}=\\sum_{i=1}^{C}{(\\frac{1}{x_{j}-C_{i}})^{\\frac{2}{m-1}}} 什么是机械运动 (5)

将谷丙转氨酶高(5)式中的i换成k后带入(格力售后电话2)式中,得到

\\mu_{ij}=\\frac{1}{\\sum_{k=1}^{C}{(\\frac{x_{j}-C_{i}}{x_{j}-C_{k}})^{\\frac{2}{m-1}}}} (6)

再对 C_截屏的快捷键是什么{i} 求偏导:

\\frac{\\partial J}{\\partial C_{i}}=\\sum_{j=1}^{n}{(-\\mu_{ij}^{m}*2*(x_{j-C_{i}}))}=0

推导出

C_{i}=\\frac{\\sum_{j=1}^{n}(x_{j}\\mu_{ij}^{m})}{\\sum_{j=1}^{n}{\\mu_{ij}^{m}}}=\\sum_{j=1}^{n}{\\f精算师rac{\\mu_{ij}^{m}}{\\sum_{j=1}^{n}{\\mu_{ij}^{m}}}}x_{j} (7)

(6爱思唯尔)(7)两式即为(1)式取最小值时两个参数的取值。可见, \\mu_{ij} 式中有 C_{i} ,C_{i}式中有\\mu_{ij},两个参数是相互联系的,有了\\mu_{ij} \\Rightarrow C_{i}\\Rightarrow\\mu_{ij}......,故在迭代程序开始之前可先随机给\\mu_{ij}一个值,继而可以计算出一个C_{i},再得到一个\\mu_{ij},按此迭代, J 也不断变化迭代,逐渐趋向最小值,腋下长了个疙瘩当J不再变化或到达指定迭代步数时,算法停止。

二、算法一般步骤

(1)确定分类数即指定m的取值,确定迭代次数

(2)初始化一个隶属度U

(3)根据U计算聚类中心C

(4)计算目标函数J

(5)根据(3)得到的三体吧C计算U,得到的U再去计算C,以此类推

迭代结束后,得到一个最终的U,对每一个点,它属于各个类都会有一个隶属度 \\mu ,找到其中最大的\\mu就认为这个点属于这一类

三、算法实现

基于R语言,fpc包中的fanny函数

本文标签: 算法模糊原理FCM