个人博客地址 Glooow,欢迎光临~~~
现在想要对 n n n 个目标 U = { x 1 , . . . , x n } U=\{x_1,...,x_n\} U={x1,...,xn} 分类,并且每个对象都有多个指标,也即 x i = { x i 1 , . . . , x i m } x_i=\{x_{i1},...,x_{im}\} xi={xi1,...,xim}。
模糊聚类通常包括三个步骤:
- 建立模糊矩阵
- 建立模糊等价矩阵
- 进行聚类
1. 数据标准化
实际中各个指标的量纲与数量级很可能相差很大,比如高校评价指标中,可能包括科研经费、论文数量、获奖数量等,数量级差别很大,这个时候就需要先对各项数据进行标准化。常用方法有
标准差标准化
x
i
j
′
=
x
i
j
−
x
ˉ
j
σ
j
x_{ij}'=\frac{x_{ij}-\bar{x}_j}{\sigma_j}
xij′=σjxij−xˉj
极差正规化
x
i
j
′
′
=
x
i
j
′
−
min
1
≤
i
≤
n
{
x
i
j
′
}
max
1
{
x
i
j
′
}
−
min
1
:
i
⩽
n
{
x
i
j
′
}
\boldsymbol{x}_{i j}^{\prime \prime}=\frac{\boldsymbol{x}_{i j}^{\prime}-\min _{1 \leq i \leq n}\left\{\boldsymbol{x}_{i j}^{\prime}\right\}}{\max _{1}\left\{\boldsymbol{x}_{i j}^{\prime}\right\}-\min _{1: i \leqslant n}\left\{\boldsymbol{x}_{i j}^{\prime}\right\}}
xij′′=max1{xij′}−min1:i⩽n{xij′}xij′−min1≤i≤n{xij′}
极差标准化
x
i
j
′
=
x
i
j
−
x
ˉ
i
max
{
x
i
j
}
−
min
{
x
i
j
}
x_{i j}^{\prime}=\frac{x_{i j}-\bar{x}_{i}}{\max \left\{x_{i j}\right\}-\min \left\{x_{i j}\right\}}
xij′=max{xij}−min{xij}xij−xˉi
最大值规格化
x
i
j
′
=
x
i
j
max
(
x
1
j
,
x
2
j
,
.
.
.
,
x
n
j
)
x_{ij}'=\frac{x_{ij}}{\max{(x_{1j},x_{2j},...,x_{nj})}}
xij′=max(x1j,x2j,...,xnj)xij
2. 建立模糊相似矩阵
接下来需要确定不同对象之间的相似度,相似度的确定也有几种常用度量:
1.1 相关系数类
1.2 距离类
1.3 贴近度类
3. 聚类
获得模糊相似矩阵以后,需要首先求出传递闭包 t ( R ) t(R) t(R),以获得模糊等价矩阵,然后根据不同的阈值 λ \lambda λ 进行聚类,然后再画出动态聚类图。
举个栗子
求解过程如下
0. 特性指标矩阵 | 1. 数据标准化 | 2. 求模糊相似矩阵 |
---|---|---|
3. 求传递闭包 | 4. 根据不同阈值聚类 | 5. 画动态聚类图 |
4. 其他问题
在实际应用过程中,还会出现一些其他问题,比如:
- 在实际应用中,如何选择适当的 λ \lambda λ?从而给出一个较明确的聚类。
实际中最佳阈值的确定,可以由专家给出值;也可以应用 F-统计量确定最佳阈值。
- 如果不用传递闭包,直接对相似矩阵进行聚类会怎么样?
直接应用模糊相似矩阵进行聚类时,可以首先确定一个阈值 λ \lambda λ,然后根据截集获得一系列聚类结果,由于模糊相似矩阵并不是等价矩阵,因此此时的聚类结果是不严谨的,后面需要对交集非空的集合进行合并(这里可能表述的不清楚,看下面的例子就明白了)
- 当样本点很多时(几百万甚至上千万个像素),例如需 要对一张图片上的样本点进行聚类,该怎么办?
可以应用模糊C均值法(FCM)
5. 模糊C均值法(FCM)
设
x
i
(
i
=
1
,
2
,
.
.
.
,
n
)
x_i(i=1,2,...,n)
xi(i=1,2,...,n) 是n个样本组成的样本集合,
c
c
c 为预定的类别数目,
u
i
j
u_{ij}
uij 是第
i
i
i 个样本对于第
j
j
j 类的隶属度函数。用隶属度函数定义的聚类损失函数可以写为
∑
j
=
1
c
∑
i
=
1
n
u
i
j
m
d
i
j
2
=
∑
j
=
1
c
∑
i
=
1
n
u
i
j
m
∥
p
j
−
x
i
∥
2
\sum_{j=1}^{c} \sum_{i=1}^{n} u_{i j}^{m} d_{i j}^{2}=\sum_{j=1}^{c} \sum_{i=1}^{n} u_{i j}^{m}\left\|\mathbf{p}_{j}-\mathbf{x}_{i}\right\|^{2}
j=1∑ci=1∑nuijmdij2=j=1∑ci=1∑nuijm∥pj−xi∥2
其中
m
>
1
m>1
m>1,
P
j
P_j
Pj 是第
j
j
j 类的聚类中心,后面会给出公式。通常也会假设
∑
j
u
i
j
=
1
\sum_j u_{ij}=1
∑juij=1。
下面则给出该算法的推导:为了最小化损失函数,则可以应用 Lagrange 乘子法
J
=
∑
i
=
1
n
∑
j
=
1
c
u
i
j
m
d
i
j
2
−
∑
i
=
1
n
λ
i
(
(
∑
j
=
1
c
u
i
j
)
−
1
)
J=\sum_{i=1}^{n} \sum_{j=1}^{c} u_{i j}^{m} d_{i j}^{2}-\sum_{i=1}^{n} \lambda_{i}\left(\left(\sum_{j=1}^{c} u_{i j}\right)-1\right)
J=i=1∑nj=1∑cuijmdij2−i=1∑nλi((j=1∑cuij)−1)
对
λ
i
,
u
i
j
\lambda_i,u_{ij}
λi,uij 求偏导等于 0,则可以得到迭代公式为
u
i
j
=
(
1
d
i
j
)
2
/
(
m
−
1
)
∑
k
=
1
c
(
1
d
i
k
)
2
/
(
m
−
1
)
p
j
=
∑
i
=
1
n
u
i
j
m
x
i
∑
i
=
1
n
u
i
j
m
u_{i j}=\frac{\left(\frac{1}{d_{i j}}\right)^{2 /(m-1)}}{\sum_{k=1}^{c}\left(\frac{1}{d_{i k}}\right)^{2 /(m-1)}} \\\mathbf{p}_{j}=\frac{\sum_{i=1}^{n} u_{i j}^{m} \mathbf{x}_{i}}{\sum_{i=1}^{n} u_{i j}^{m}}
uij=∑k=1c(dik1)2/(m−1)(dij1)2/(m−1)pj=∑i=1nuijm∑i=1nuijmxi
由此就可以给出 FCM 算法的框架