特注:这里所讲的模糊聚类不等同于FCM。(小提一下:如果将Kmeans聚类作为硬均值聚类(HCM),那么FCM就是软均值聚类。两者之间最大的区别在于硬均值聚类中每个数据是只能明确归属于一个类别。而软均值聚类则是每个数据可以归属于多个类别,并且使用隶属度来衡量隶属度。)。

    本文要谈及模糊聚类,主要从以下几个方面进行讲解:

(1)与模糊聚类相关一些数学概念;

(2)模糊聚类过程;

(3)模糊聚类的一个应用。

一、与模糊聚类相关的一些数学概念

  谈及模糊聚类,就不得不谈及模糊数学。模糊数学是在模糊集合模糊逻辑的基础上发展起来的模糊拓扑、模糊测度论等数学领域的统称。模糊集理论是对传统集合理论的一种推广,在传统集合理论中,一个元素或者属于一个集合,或者不属于;而对于模糊集来说,每一个元素都是以一定的程度属于某个集合,也可以同时以不同的程度属于几个集合。以下是几个较为重要的定义:

定义1:隶属函数:表示一个对象X隶属于集合Python 模糊聚类 模糊聚类fcm_ML and DM的程度的函数,通常记作

Python 模糊聚类 模糊聚类fcm_传递闭包_02

,其自变量范围是所有可能属于集合Python 模糊聚类 模糊聚类fcm_聚类分析_03的对象,取值范围是[0,1]。

定义2:隶属度:表示一个对象隶属于一个集合的程度。例如,35岁的人可以认为是以隶属程度为0.7属于中年人这个概念,其隶属度就是0.7。

定义3:模糊子集:对于任意

Python 模糊聚类 模糊聚类fcm_聚类_04

,都确定了一个数

Python 模糊聚类 模糊聚类fcm_ML and DM_05

,称

Python 模糊聚类 模糊聚类fcm_聚类_06

为X对Python 模糊聚类 模糊聚类fcm_聚类分析_07的隶属度。比如对象集合{a,b,c,d,e}5个人年龄,对于“中年人”这个模糊概念的隶属程度为:

Python 模糊聚类 模糊聚类fcm_ML and DM_08

,则其所确定的模糊子集为{1,0.1,0.5,1,0},可写为

Python 模糊聚类 模糊聚类fcm_聚类_09

定义4:模糊矩阵:对于U,V两个论域,则U和V的笛卡尔乘积集,可记作

Python 模糊聚类 模糊聚类fcm_传递闭包_10

。笛卡尔乘积集是两个集合元素间的无约束搭配。若对这种搭配加以一定的限制,便表现了U,V之间的某种特殊关系,称为U、V的模糊关系R。

Python 模糊聚类 模糊聚类fcm_ML and DM_11

,表示U、V具有关系R的程度。模糊关系R可以用矩阵形式来表示,即:

Python 模糊聚类 模糊聚类fcm_ML and DM_12


模糊矩阵旨在表示两个论域之间的关系。因而,在对象不明的情况下,其将失去意义。

定义5:设R是U上的一个关系。

(1)若对于

Python 模糊聚类 模糊聚类fcm_聚类分析_13

,都有

Python 模糊聚类 模糊聚类fcm_传递闭包_14

,则称R具有自反性; (2)对

Python 模糊聚类 模糊聚类fcm_Python 模糊聚类_15

,若

Python 模糊聚类 模糊聚类fcm_ML and DM_16

时,恒有

Python 模糊聚类 模糊聚类fcm_聚类分析_17

,则称R具有对称性; (3)对

Python 模糊聚类 模糊聚类fcm_Python 模糊聚类_18

,若

Python 模糊聚类 模糊聚类fcm_传递闭包_19


Python 模糊聚类 模糊聚类fcm_聚类分析_20

时,恒有

Python 模糊聚类 模糊聚类fcm_ML and DM_21

,则称R具有传递性。

当R具有自反性,对称性和传递性时,称R为模糊等价矩阵。

当R具有自反性,对称性时,则称R是模糊相似矩阵。

在实际情况中,一般难于直接地给出一个模糊矩阵是模糊等价矩阵,但是如果要给出一个矩阵是模糊相似矩阵,则其难度相对而言就较小。而通过模糊相似矩阵来求得模糊等价矩阵是有相应的算法。一般采用是平方法[3]进行计算获得:即

Python 模糊聚类 模糊聚类fcm_聚类_22

。在经过有限次运算后,一定会有

Python 模糊聚类 模糊聚类fcm_Python 模糊聚类_23

。至此,就可以得到一个模糊等价矩阵

Python 模糊聚类 模糊聚类fcm_聚类分析_24

。可以证明的是,

Python 模糊聚类 模糊聚类fcm_传递闭包_25

,(其中n为模糊相似矩阵的维数。)

二、模糊聚类过程

将模糊集理论引入传统的聚类分析问题中,就可以得到模糊聚类分析。比较典型的模糊聚类方法有:基于相似性和模糊关系的方法、基于模糊等价挂系的传递壁报方法、基于模糊图论最大树方法以及基于数据集的凸分解、动态规划和难以辨识关系等方法。本文主要讲解的模糊聚类过程是基于模糊等价关系的传递闭包方法。

基于模糊等价关系的传递闭包方法的过程如下:

(1)构建模糊矩阵

模糊聚类分析的应用细节和所应用的领域有关。一般是根据实际情况,建立分类对象和设定属性之间的所属关系矩阵。这个可以从之后的例子中看出,在这里先不进行明确。

(2)矩阵数据标准化:

由于(1)中所构建的模糊矩阵,是根据其所属于的应用领域进行构建,矩阵的元素中的数值情况与具体情况相关。因而,有时为了更好地进行分析,需要对该矩阵数据进行标准化处理。矩阵数据标准化是指对原始数据进行无量纲处理,将矩阵中的元素数值压缩在[0,1]区间内,进而构建模糊矩阵。目前,对于数据标准化有两种常见的变换:

(a)平移标准差变换:

Python 模糊聚类 模糊聚类fcm_传递闭包_26

(i=1,2,...,n;k=1,2,3...,m)

其中:

Python 模糊聚类 模糊聚类fcm_Python 模糊聚类_27

Python 模糊聚类 模糊聚类fcm_传递闭包_28

经过标准差变换后,每个变量的均值都为0,标准差为1,并且消除了量纲的影响。但是,这样得到的Python 模糊聚类 模糊聚类fcm_Python 模糊聚类_29还不一定在[0,1]上,所以还要作下一个变换,即平移极差变换。

(a)平移极差变化:

Python 模糊聚类 模糊聚类fcm_聚类_30

(k=1,2,...,n)

经过平移极差变换后,可使

Python 模糊聚类 模糊聚类fcm_ML and DM_31

,而且也消除了量纲的影响。

(3)建立模糊相似矩阵:

模糊相似矩阵:具有自反性和对称性的模糊矩阵。对于模糊相似矩阵的构造方法有13种。在此列举其中常用的8种。(其中,

Python 模糊聚类 模糊聚类fcm_传递闭包_32

Python 模糊聚类 模糊聚类fcm_聚类_33

Python 模糊聚类 模糊聚类fcm_传递闭包_34

)为模糊矩阵中的元素,

Python 模糊聚类 模糊聚类fcm_聚类分析_35

Python 模糊聚类 模糊聚类fcm_ML and DM_36

)为生成的模糊相似矩阵中的元素)

【1】海明距离法:

                     

Python 模糊聚类 模糊聚类fcm_传递闭包_37

【2】切比雪夫距离法:

                      

Python 模糊聚类 模糊聚类fcm_聚类分析_38

【3】绝对指数法:

                      

Python 模糊聚类 模糊聚类fcm_聚类分析_39

【4】欧氏距离法:

                      

Python 模糊聚类 模糊聚类fcm_聚类分析_40

【5】兰式距离法:

                       

Python 模糊聚类 模糊聚类fcm_ML and DM_41

【6】夹角余弦法:

                        

Python 模糊聚类 模糊聚类fcm_聚类_42

【7】最大最小法:

                       

Python 模糊聚类 模糊聚类fcm_ML and DM_43

【8】几何平均法最小法:

                       

Python 模糊聚类 模糊聚类fcm_ML and DM_44

选择构造模糊相似矩阵时,需要遵行三个原则:正确性原则、不变性原则、可区分性原则;并且对常用的模糊矩阵构造方法在整体分辨率和类间分辨率两个指标上进行比较,从而才能选择一个合适的构造模糊相似矩阵的方法。

(4)构建模糊等价矩阵

与模糊相似矩阵相比,模糊等价矩阵会更多一个性质,传递性。

使用传递闭包法可以将模糊相似矩阵转化为模糊等价矩阵。方法如下:

                

Python 模糊聚类 模糊聚类fcm_Python 模糊聚类_45

(5)聚类

对于模糊等价矩阵,进行聚类主要是使用分割值λ,获得在该分割值情况下等价类。动态直接聚类法是直接在模糊相似矩阵上进行聚类分析。给出不同的分割值λ。从而得到不同的相似类。在分割值λ=1时,所得到的相似类,取其的并集就可以得到传递闭包在此分割值λ时得到的等价类。而在分割值λ不为1的情况下,要获得在该分割值下的由传递闭包才可求得的等价类,是将在该分割值λ情况下获得的相似元素对,对在上一个分割值所获得的等价类含有该元素对的归并操作。一直到获得的等价类为全集。

三、模糊聚类的一个应用

(1)假设有8个用户和6个网页。根据用户访问各个网页的情况,如图1所示,建立用户与网页之间的矩阵关系。并将此矩阵关系作为用户与网页之间的模糊矩阵,记为H,如图2所示:

Python 模糊聚类 模糊聚类fcm_传递闭包_46


图1

Python 模糊聚类 模糊聚类fcm_聚类分析_47


图2

(2)将模糊矩阵H采用最大最小法转换为模糊相似矩阵R,用来表示用户之间的模糊相似程度,所得到的模糊相似矩阵R如图3所示:

Python 模糊聚类 模糊聚类fcm_Python 模糊聚类_48


图3

(3)采用传递闭包法,来进行聚类分析。在进行聚类分析之前,需要将模糊相似矩阵R转化为模糊等价矩阵T。所得到的模糊等价矩阵T如图4所示:

Python 模糊聚类 模糊聚类fcm_Python 模糊聚类_49


图4

(4)设定合适的分割值λ,令其由1降至0。得到相应的Python 模糊聚类 模糊聚类fcm_聚类分析_50,然后进行聚类[5][6]。其中用户Python 模糊聚类 模糊聚类fcm_传递闭包_51与用户Python 模糊聚类 模糊聚类fcm_传递闭包_52归为一类的充分必要条件是:

Python 模糊聚类 模糊聚类fcm_聚类_53

。在此,只是取分割值λ的值为1,0.8,07,0.6这些值,从而分别得到的Python 模糊聚类 模糊聚类fcm_聚类_54和聚类结果如下:

Python 模糊聚类 模糊聚类fcm_聚类分析_55

所得的聚类结果为:

Python 模糊聚类 模糊聚类fcm_聚类分析_56


Python 模糊聚类 模糊聚类fcm_聚类_57

所得的聚类结果为:

Python 模糊聚类 模糊聚类fcm_ML and DM_58


Python 模糊聚类 模糊聚类fcm_聚类分析_59

所得的聚类结果为:

Python 模糊聚类 模糊聚类fcm_聚类分析_60


Python 模糊聚类 模糊聚类fcm_聚类_61

所得的聚类结果为:

Python 模糊聚类 模糊聚类fcm_Python 模糊聚类_62


因为现实情况的复杂性,因而对于在模糊聚类分析的过程中,采用何种方法进行分类是难于确定的。一般情况下,是将所有的方法对一些样本实例进行尝试过之后,再从中选择一个较优结果的方法。但是有时即使是尝试过所有的方法也找不到一个合适的模糊聚类方法,此时需要根据具体情况,设计一些新的方法进行聚类分析。

(5)分割值λ的确定

在模糊聚类分析中,一个合适的分割值λ对分类的结果的影响是十分大的。因而,现实情况的复杂性和多样性,因而在实际情况中,一般是采用人为设定的方法来确定的分割值λ。有时为了慎重起见,会让多人进行设定分割值λ。

基于专家团的设定的分割值λ确定方法[7]

假设有p个专家组成一个专家团,其中:

(1)Python 模糊聚类 模糊聚类fcm_聚类分析_63为专家团中,第i个专家所给与分割值λ的权值,且

Python 模糊聚类 模糊聚类fcm_ML and DM_64

。 (2)Python 模糊聚类 模糊聚类fcm_聚类_65为第i个专家对第j个专家可信度的估计值。

Python 模糊聚类 模糊聚类fcm_Python 模糊聚类_66

。 (3)由此就可以得到一个方程组:

Python 模糊聚类 模糊聚类fcm_聚类_67

通过此就可以求出

Python 模糊聚类 模糊聚类fcm_ML and DM_68


Python 模糊聚类 模糊聚类fcm_聚类分析_69

,其中Python 模糊聚类 模糊聚类fcm_传递闭包_70为第k个专家给出的分割值λ,通过此就可以得到最终的分割值λ。

四、小结

经过如上的处理方法,就可以实现一个简单的模糊聚类。可以看出使用基于传递闭包等价矩阵进行模糊聚类的原理虽然简单,但是所花费的代价却是极大的。特别是在将模糊相似矩阵转为模糊等价矩阵