FCM(Fuzzy C-Means)模糊C聚类

来源:互联网 发布:电视机看电视软件 编辑:程序博客网 时间:2024/05/01 17:37

1. FCM初识

FCM的C跟K-Means的K是一样的,指的是聚类的数目。F—Fuzzy是模糊的意思,指的是”一个事件发生的程度“。用在我们的聚类上面,第一条记录以怎样的概率或者说程度属于第一类,又以怎样的程度属于第二类等等。跟传统的聚类有所区别的地方就是,他改变了传统分类的时候非此即彼的一个现象,一个对象可以以不同的程度同时属于多个类。这个其实是跟我们的现实世界是更契合的。比如说,“秃与不秃”,一个人有多少发量就说他是秃的,下面这几张图:

                                            

究竟那几个可以分成:秃“,这个就具有一定的模糊性。

所以说,”模糊“概念的提出,更能描述现实。

模糊的程度我们用模糊函数来衡量 \[{\mu _A}(x)\]他表示的是集合X中的元素x对集合A的隶属程度。



2.FCM算法

作为一个算法,FCM的输入就是一个待聚类的数据集,每一个数据都有p个特征。它的输出是一个cn列的矩阵Uc刚才提到是聚类数目,n是数据集中元素的个数,用这个矩阵就可以表示分类的结果,因为你看某一列,表示的就是这个元素对各个类的隶属程度,哪一个值最大,就说这个元素属于哪一类。

还有一个输出是各个类的聚类中心向量集合V,一共有c个元素。每个元素也是有p维的。

\[X = \{ {x_1},{x_2},...,{x_n}\} ,{x_k} \in {\Re ^P}\]

\[V = \{ {v_1},{v_2},...,{v_c}\}  \subset {\Re ^P}\]
\[U = {\left( {\begin{array}{*{20}{c}}
{{u_{11}}}& \ldots &{{u_{1c}}}\\
 \vdots & \ddots & \vdots \\
{{u_{n1}}}& \cdots &{{u_{nc}}}
\end{array}} \right)_{nxc}}\]

举个例子,直观感受一下,比如现在待分类的数据集有188个点,每个点是二维的,我们要把他分成4类,通过FCM算法得到的输出V就是下面第一张图表示这4个中心向量,下面这第二张图表示的就是矩阵U,横坐标是188个元素,纵坐标是隶属度值,可以看到,可以根据这个值把大家区分开。

                

那我们怎么实现这样的结果呢?FCM有他自己的目标函数[1],
\[{J_m}(U,V) = \sum\limits_{i = 1}^c {\sum\limits_{j = 1}^n {u_{ij}^md_{ij}^2} } \]

μij指的就是隶属度值,元素j对类别i的隶属程度,dij平方指的就是欧氏距离下元素j跟中心点i之间的距离,整个表示的就是各个点到各个类的加权距离的和。

m是一个模糊化程度的参数,待会我们会提到它对算法性能的影响。这个算法有一个约束条件,就是某一个元素对所有类别的隶属程度的值加起来要等于1.

聚类要达到的最终效果就是类内相似度最小,类间相似度最大,这个时候点和中心的加权距离之和就是最小的。所以我们我们只要使得目标函数取得最小值就可以了。所以最优解的的表达式就是:
\[\min ({J_m}(U,V)) = \min (\sum\limits_{i = 1}^c {\sum\limits_{j = 1}^n {u_{ij}^md_{ij}^2)} } \]

对于有约束条件的求极值问题,一般使用拉格朗日乘子法解决。先构造拉格朗日函数:

\[F = \sum\limits_{i = 1}^c {\sum\limits_{j = 1}^n {u_{ij}^md_{ij}^2} }  + \sum\limits_{j = 1}^n {{\lambda _j}(\sum\limits_{i = 1}^c {{u_{ij}} - 1} )} \]
函数中共有三个变量,μij, vi, 和(lanmuda)j,分别求偏导


得到U和V的最优解
\[{u_{ij}} = {\left[ {\sum\limits_{k = 1}^c {{{(\frac{{{d_{ij}}}}{{{d_{kj}}}})}^{\frac{2}{{m - 1}}}}} } \right]^{ - 1}}\]

 \[{v_{i}}={\frac{\sum_{j=1}^{n}x_{j}\mu ^{_{ij}^{m}}}{\sum_{j=1}^{n}\mu _{ij}^{m}}}\]


算法的步骤

  • 初始化

             设定聚类个数c (1<c<n), 模糊指数m(m>1),最大迭代数T,收敛的精度ε,用随机数初始化隶属度矩阵U(0)

  • 优化过程

\[t \leftarrow 0\]
\[t \leftarrow t + 1\]

             计算类中心
\[{V_t} = F\left( {{U_{t - 1}}} \right)\]
             更新隶属度矩阵
\[{U_t} = G({V_{t - 1}})\]

  • 重复优化过程,直到满足如下的终止条件

\[t = T{\rm{OR}}\parallel {U_t} - {U_{t - 1}}\parallel  < \varepsilon ,t \ge 1\]

\[(U,V) \leftarrow ({U_t},{V_t})\]


3. 参数的选择

前面提到,在应用FCM对给定数据集进行聚类分析时,需要涉及两个参数的选取问题:cm。只有选取正确了才能得到好的聚类效果。所以说怎样选取好的参数是关键所在。

3.1   聚类数目c的选择

c的选取我们有一个评价指标,就是L(c)这个函数,分子表示的是类间距离之和,分母表示的是类内间距之和,因此整个L的值就越大越好。

\[{\rm{L}}c) = \frac{{\sum\limits_{i = 1}^c {\sum\limits_{j = 1}^n {u_{ij}^m\parallel {v_i} - \overline x {\parallel ^2}/(c - 1)} } }}{{\sum\limits_{i = 1}^c {\sum\limits_{j = 1}^n {u_{ij}^m\parallel {x_j} - {v_i}{\parallel ^2}/(n - c)} } }}\]

下面四个图是论文[2]里面对不同的c做的一个实验,表格第一行指的是最佳的分类数目,第二行是L函数对不同分类数目的值,可以看到用L函数就可以选择出最佳的c



3.2   模糊系数m的选择

另外,目标函数里面的m值也是需要我们确定好的。那这个m值我们怎样选择呢,首先m代表的是模糊C平均算法的模糊系数,它可以影响分类的准确程度。

我们看下面四张图,第一个图是原始的数据集,我们给定c等于9,23,4这三个图里我们只给出中心向量,当m=1.2的时候,这9个点比较分散,这样就会受噪声点的影响比较大,远离了我们的主流,而当m=3.5的时候这些点又比较集中,对偏离主流的点的控制力又比较弱。

通常来说,m选取2.0是比较合理的。


References

[1] J.Bezdek,“Cluster validity with fuzzy sets”, Cybernetics and Systems, 1973

[2] “FCM算法中参数优选方法及应用实例




1 0
原创粉丝点击