模糊聚类分析是模糊数学中应用最为广泛的方法之一。近年来也涌现出了多种不同的模糊聚类方法,本文直接从其操作流程出发,介绍模糊聚类分析的主要内容。
1、一般流程
2、数据预处理方法
这一过程通常是将数据压缩到区间 [ 0 , 1 ] [0,1] [0,1]上以便于建立模糊矩阵。常用方法如下:
- 平移-标准差变换
x i k ′ = x i k − x k ‾ s k ( i = 1 , … , n ; k = 1 , … , m ) x_{i k}^{\prime}=\frac{x_{i k}-\overline{x_{k}}}{s_{k}}(i=1, \ldots, n ; k=1, \ldots, m) xik′=skxik−xk(i=1,…,n;k=1,…,m)
其中, x k ‾ = 1 n ∑ i = 1 n x i k , s k = 1 n ∑ i = 1 n ( x i k − x k ) 2 \overline{x_{k}}=\frac{1}{n} \sum_{i=1}^{n} x_{i k}, s_{k}=\sqrt{\frac{1}{n} \sum_{i=1}^{n}\left(x_{i k}-x_{k}\right)^{2}} xk=n1∑i=1nxik,sk=n1∑i=1n(xik−xk)2
- 平移-极差变换
x ′ ′ = x i k ′ − min 1 ≤ i ≤ n { x i k ′ } max 1 ≤ i ≤ n { x i k ′ } − min 1 ≤ i ≤ n { x i k ′ } ( k = 1 , … , m ) x^{\prime \prime}=\frac{x_{i k}^{\prime}-\min _{1 \leq i \leq n}\left\{x_{i k}^{\prime}\right\}}{\max _{1 \leq i \leq n}\left\{x_{i k}^{\prime}\right\}-\min _{1 \leq i \leq n}\left\{x_{i k}^{\prime}\right\}}(k=1, \ldots, m) x′′=max1≤i≤n{xik′}−min1≤i≤n{xik′}xik′−min1≤i≤n{xik′}(k=1,…,m)
3、相似关系的建立方法
相似关系建立主要分为:相似系数法、距离法和主观评分法,其中前2者使用最多。
第一类:相似系数法
- 数量积法
r i j = { 1 i = j 1 M ∑ k = 1 m x i k x j k i ≠ j r_{i j}=\left\{\begin{matrix} 1 & i=j \\ \frac{1}{M} \sum_{k=1}^{m} x_{i k} x_{j k} & i \neq j \end{matrix} \right. rij={1M1∑k=1mxikxjki=ji=j
其中 M = max i ≠ j ∑ k = 1 m x i k x j k M=\max _{i \neq j} \sum_{k=1}^{m} x_{i k} x_{j k} M=maxi=j∑k=1mxikxjk, 此时 r i j ∈ [ − 1 , 1 ] r_{i j} \in[-1,1] rij∈[−1,1]
若存在 r i j < 0 r_{i j}<0 rij<0 令所有 r i j ′ = ( 1 + r i j ) / 2 r_{i j}^{\prime}=\left(1+r_{i j}\right) / 2 rij′=(1+rij)/2 使得 r i j ′ ∈ [ 0 , 1 ] r_{i j}^{\prime} \in[0,1] rij′∈[0,1]
-
夹角余弦法: r i j = ∑ k = 1 m x i k x j k ∑ k = 1 m x i k 2 ∑ k = 1 m x 2 j k \quad r_{i j}=\frac{\sum_{k=1}^{m} x_{i k} x_{j k}}{\sqrt{\sum_{k=1}^{m} x_{i k}^{2}} \sqrt{\sum_{k=1}^{m} x^{2}}_{j k}} rij=∑k=1mxik2∑k=1mx2jk∑k=1mxikxjk
-
相关系数法:
r i j = ∑ k = 1 m ∣ x i k − x ˉ i ∥ x j k − x ˉ j ∣ ∑ k = 1 m ( x i k − x ˉ i ) 2 ∑ k = 1 m ( x j k − x ˉ j ) 2 r_{i j}=\frac{\sum_{k=1}^{m}\left|x_{i k}-\bar{x}_{i} \| x_{j k}-\bar{x}_{j}\right|}{\sqrt{\sum_{k=1}^{m}\left(x_{i k}-\bar{x}_{i}\right)^{2}} \sqrt{\sum_{k=1}^{m}\left(x_{j k}-\bar{x}_{j}\right)^{2}}} rij=∑k=1m(xik−xˉi)2∑k=1m(xjk−xˉj)2∑k=1m∣xik−xˉi∥xjk−xˉj∣
其中 x ˉ i = 1 m ∑ k = 1 m x i k , x ˉ j = 1 m ∑ k = 1 m x j k , i , j = 1 , 2 , … \bar{x}_{i}=\frac{1}{m} \sum_{k=1}^{m} x_{i k}, \quad \bar{x}_{j}=\frac{1}{m} \sum_{k=1}^{m} x_{j k}, i, j=1,2, \dots xˉi=m1∑k=1mxik,xˉj=m1∑k=1mxjk,i,j=1,2,…
-
指数相似系数法
r i = 1 m ∑ k = 1 m exp { − 3 4 ( x i k − x j k ) 2 s k 2 } , i , j = 1 , 2 , … , n . s k = 1 n ∑ k = 1 n ( x i k − x k ‾ ) 2 , x k ‾ = 1 n ∑ k = 1 n x i k ( k = 1 , … m ) \begin{array}{l} r_{i}=\frac{1}{m} \sum_{k=1}^{m} \exp \left\{-\frac{3}{4} \frac{\left(x_{i k}-x_{j k}\right)^{2}}{s_{k}^{2}}\right\}, i, j=1,2, \dots, n. \\ s_{k}=\sqrt{\frac{1}{n} \sum_{k=1}^{n}\left(x_{i k}-\overline{x_{k}}\right)^{2}}, \overline{x_{k}}=\frac{1}{n} \sum_{k=1}^{n} x_{i k}(k=1, \ldots m) \end{array} ri=m1∑k=1mexp{−43sk2(xik−xjk)2},i,j=1,2,…,n.sk=n1∑k=1n(xik−xk)2,xk=n1∑k=1nxik(k=1,…m)
- 最大最小法
r i j = ∑ k = 1 m ( x i k ∧ x j k ) ∑ k = 1 m ( x i k ∨ x j k ) r_{i j}=\frac{\sum_{k=1}^{m}\left(x_{i k} \wedge x_{j k}\right)}{\sum_{k=1}^{m}\left(x_{i k} \vee x_{j k}\right)} rij=∑k=1m(xik∨xjk)∑k=1m(xik∧xjk)
- 算术平均最小法
r i j = 2 ∑ k = 1 m ( x i k ∧ x j k ) ∑ k = 1 m ( x i k + x j k ) r_{i j}=\frac{2 \sum_{k=1}^{m}\left(x_{i k} \wedge x_{j k}\right)}{\sum_{k=1}^{m}\left(x_{i k}+x_{j k}\right)} rij=∑k=1m(xik+xjk)2∑k=1m(xik∧xjk)
- 几何平均最小法
r i j = ∑ k = 1 m ( x i k ∧ x j k ) ∑ k = 1 m x i k x j k r_{i j}=\frac{\sum_{k=1}^{m}\left(x_{i k} \wedge x_{j k}\right)}{\sum_{k=1}^{m} \sqrt{x_{i k} x_{j k}}} rij=∑k=1mxikxjk∑k=1m(xik∧xjk)
第二类:距离法
- 绝对值倒数法
r i j = { 1 , i = j M m ∣ x i k − x j k ∣ , i ≠ j r_{i j} =\left\{\begin{matrix} 1, i=j \\ \frac{M}{m}\left|x_{i k}-x_{j k}\right| \end{matrix}, i \neq j\right. rij={1,i=jmM∣xik−xjk∣,i=j
-
绝对值指数法
$$
r_{i j} =\exp \left{-\sum_{k=1}^{m}\left|x_{i k}-x_{j k}\right|\right}$$
-
绝对值减数法
r i j = { 1 − c ∑ k = 1 m ∣ x i k − x j k ∣ , i ≠ j r_{i j} =\left\{1-c \sum_{k=1}^{m}\left|x_{i k}-x_{j k}\right|, \quad i \neq j\right. rij={1−ck=1∑m∣xik−xjk∣,i=j
其中 c c c适当选取,使得 r i j r_{ij} rij在 [ 0 , 1 ] [0,1] [0,1] 内分散开
- 海明距离
r i j = d ( x i , x j ) = ∑ k = 1 m ∣ x i k − x j k ∣ r_{ij}=d\left(x_{i}, x_{j}\right)= \sum_{k=1}^{m}\left|x_{i k}-x_{j k}\right| rij=d(xi,xj)=k=1∑m∣xik−xjk∣
- 欧式距离
r i j = d ( x i , x j ) = ∑ k = 1 m ( x i k − x j k ) 2 r_{ij}=d\left(x_{i}, x_{j}\right) =\sqrt{\sum_{k=1}^{m}\left(x_{i k}-x_{j k}\right)^{2}} rij=d(xi,xj)=k=1∑m(xik−xjk)2
- 切比雪夫距离
r i j = d ( x i , x j ) = ⋁ k = 1 m ∣ x i k − x j k ∣ r_{ij}=d\left(x_{i}, x_{j}\right)=\bigvee_{k=1}^{m}\left|x_{i k}-x_{j k}\right| rij=d(xi,xj)=k=1⋁m∣xik−xjk∣
第三类:主观判别法
这类方法是最为简单的一类,首先由专家打分,给出所有关系的值,再对专家的意见进行加权求和即可。
用上述方法生成一个矩阵 R = ( r i j ) n × n R=(r_{ij})_{n\times n} R=(rij)n×n即是相似矩阵,由于通常都要进行归一化处理,其所有元素均在 [ 0 , 1 ] [0,1] [0,1]区间上,因此该矩阵是一个模糊矩阵。
4、动态聚类的方法I-传递闭包法
-
传递闭包法:
- 求出模糊相似矩阵 R R R的传递闭包 t ( R ) t(R) t(R);
- 按 λ \lambda λ由大到小进行聚类, 这里 λ \lambda λ是传递闭包中的元素,由大到小排列即可
- 画出动态聚类图
-
传递闭包法举例:
设有5组数据:
x
1
=
(
80
,
10
,
6
,
2
)
,
x
2
=
(
50
,
1
,
6
,
4
)
,
x
3
=
(
90
,
6
,
4
,
6
)
,
x
4
=
(
40
,
5
,
7
,
3
)
,
x
5
=
(
10
,
1
,
2
,
4
)
x_{1}=(80,10,6,2), x_{2}=(50,1,6,4), x_{3}=(90,6,4,6), x_{4}=(40,5,7,3), x_{5}=(10,1,2,4)
x1=(80,10,6,2),x2=(50,1,6,4),x3=(90,6,4,6),x4=(40,5,7,3),x5=(10,1,2,4)
先对其进行归一化处理,得到特性矩阵(每一行对应一组数据):
X
=
(
0.89
1
0.86
0.33
0.56
0.10
0.86
0.67
1
0.60
0.57
1
0.44
0.5
1
0.5
0.11
0.10
0.29
0.67
)
\boldsymbol{X}=\left(\begin{matrix} 0.89 & 1 & 0.86 & 0.33 \\ 0.56 & 0.10 & 0.86 & 0.67 \\ 1 & 0.60 & 0.57 & 1 \\ 0.44 & 0.5 & 1 & 0.5 \\ 0.11 & 0.10 & 0.29 & 0.67 \end{matrix}\right)
X=⎝⎜⎜⎜⎜⎛0.890.5610.440.1110.100.600.50.100.860.860.5710.290.330.6710.50.67⎠⎟⎟⎟⎟⎞
通过两次合成,得到其传递闭包:
t
(
R
)
=
R
4
=
(
1
0.63
0.62
0.63
0.53
0.63
1
0.62
0.70
0.53
0.62
0.62
1
0.62
0.53
0.63
0.70
0.62
1
0.53
0.53
0.53
0.53
0.53
1
)
t(R)=R^{4}=\left(\begin{matrix} {1} & {0 . 6 3} & {0 . 6 2} & {0 . 6 3} & {0 . 5 3} \\ {0 . 6 3} & {1} & {0 . 6 2} & {0 . 7 0} & {0 . 5 3} \\ {0 . 6 2} & {0 . 6 2} & {1} & {0 . 6 2} & {0 . 5 3} \\ {0 . 6 3} & {0 . 7 0} & {0 . 6 2} & {1} & {0 . 5 3} \\ {0 . 5 3} & {0 . 5 3} & {0 . 5 3} & {0 . 5 3} & {1} \end{matrix}\right)
t(R)=R4=⎝⎜⎜⎜⎜⎛10.630.620.630.530.6310.620.700.530.620.6210.620.530.630.700.6210.530.530.530.530.531⎠⎟⎟⎟⎟⎞
对所有元素排序,容易得到:
1
>
0.70
>
0.63
>
0.62
>
0.53
1>0.70>0.63>0.62>0.53
1>0.70>0.63>0.62>0.53
因此依次取
λ
\lambda
λ截矩阵,便可得到聚类结果:
- λ = 1 \lambda=1 λ=1时: X X X 被分成 5 类:
{ x 1 } , { x 2 } , { x 3 } , { x 4 } , { x 5 } \left\{x_{1}\right\},\left\{x_{2}\right\},\left\{x_{3}\right\},\left\{x_{4}\right\},\left\{x_{5}\right\} {x1},{x2},{x3},{x4},{x5}
- λ = 0.7 \lambda=0.7 λ=0.7时: X X X 被分成 4 类:
{ x 1 } , { x 3 } , { x 2 , x 4 } , { x 5 } \left\{x_{1}\right\},\left\{x_{3}\right\},\left\{x_{2},x_{4}\right\},\left\{x_{5}\right\} {x1},{x3},{x2,x4},{x5}
- λ = 0.63 \lambda=0.63 λ=0.63时: X X X 被分成 3 类:
{ x 1 , x 2 , x 4 } , { x 3 } , { x 5 } \left\{x_{1},x_{2},x_{4}\right\},\left\{x_{3}\right\},\left\{x_{5}\right\} {x1,x2,x4},{x3},{x5}
- λ = 0.62 \lambda=0.62 λ=0.62时: X X X 被分成 2 类:
{ x 1 , x 2 , x 3 , x 4 } , { x 5 } \left\{x_{1},x_{2},x_{3},x_{4}\right\},\left\{x_{5}\right\} {x1,x2,x3,x4},{x5}
- λ = 0.53 \lambda=0.53 λ=0.53时: X X X 被分成 1 类:
{ x 1 , x 2 , x 3 , x 4 , x 5 } \left\{x_{1},x_{2},x_{3},x_{4},x_{5}\right\} {x1,x2,x3,x4,x5}
5、动态聚类的方法II-直接聚类法
- 直接聚类法:
直接聚类法实际上与传递闭包法只有一个区别:即不用计算传递闭包,而是直接由相似矩阵进行聚类。
- 例:
仍以上例数据为基础,直接根据相似矩阵给出
λ
\lambda
λ由大到小的排序:
1
>
0.70
>
0.63
>
0.62
>
0.56
>
0.55
>
0.54
>
0.53
>
0.38
>
0.37
>
0.24
1>0.70>0.63>0.62>0.56>0.55>0.54>0.53>0.38>0.37>0.24
1>0.70>0.63>0.62>0.56>0.55>0.54>0.53>0.38>0.37>0.24
类似传递闭包的方法,此时仍然要考虑
λ
=
1
,
0.7
,
0.63
,
0.62
\lambda=1,0.7,0.63,0.62
λ=1,0.7,0.63,0.62几种情况的聚类,而上述方法已经将这些聚类结果给出了,因此只需要考虑其后的聚类。
- λ = 0.56 , 0.55 , 0.54 \lambda=0.56,0.55,0.54 λ=0.56,0.55,0.54时: X X X 被分成 2 类:
{ x 1 , x 2 , x 3 , x 4 } , { x 5 } \left\{x_{1},x_{2},x_{3},x_{4}\right\},\left\{x_{5}\right\} {x1,x2,x3,x4},{x5}
也就是说,实际上 0.54 ≤ λ ≤ 0.62 0.54 \leq \lambda \leq 0.62 0.54≤λ≤0.62时聚类水平不变。而由上例知,在 λ = 0.53 \lambda=0.53 λ=0.53时所有类别已全部归为同一类,因此不需要再继续聚类了。
6、小结
模糊聚类的操作步骤内容丰富,但其主干框架实际上只有几个关键的步骤,即本文开头的那副图。其中最关键的地方在于具体的聚类方法。
通过上述两个例子的对比,可以看到这两类方法各有优缺点:
- 传递闭包:
- 优点:由传递闭包进行聚类时不会出现重复的聚类,在考虑聚类水平时操作简单
- 缺点:需要计算传递闭包,也就是在继续聚类之前需要额外的操作
- 直接聚类:
- 优点:不需要计算传递闭包,手工操作更加简单
- 缺点:由于相似矩阵本身不一定具有传递性,因此聚类过程中可能会出现较多的重复聚类的情况
那么自然地,在具体的问题中应根据实际情况选择更有优势的方法。