mo模糊聚类算法总结
基础的常用聚类算法:k-means (Macqueen, 1967), C-means (Bezdek, 1981) (Dunn, 1974), and possibilistic C-means (Krishnapuram & Keller, 1996).
根据模糊聚类的更新公式和参数,模糊聚类可从以下方式改进:
Fuzzy-C-means:
目标函数:最小化簇内误差平方和(Within-Cluster Sum of Squares, WCSS)
J
=
∑
i
=
1
c
∑
k
=
1
N
μ
i
k
m
d
i
k
2
J = \sum_{i=1}^{c} \sum_{k=1}^{N}\mu_{ik}^m d_{ik}^2
J=i=1∑ck=1∑Nμikmdik2
其中,
N
N
N是训练集中的样本数量,
μ
i
k
\mu_{ik}
μik是第
i
i
i个簇中第
k
k
k个样本的隶属度,
m
m
m是模糊化参数,
d
i
k
d_{ik}
dik是第
k
k
k个样本与第
i
i
i个簇之间的距离。令
x
k
x_k
xk 为样本,
v
i
v_i
vi 为
i
i
i 簇的原型(簇中心)。距离
d
i
k
d_{ik}
dik定义为:
d
i
k
=
∣
∣
x
k
−
v
i
∣
∣
d_{ik} = \mid\mid x_k - v_i \mid\mid
dik=∣∣xk−vi∣∣
这是一个距离函数。针对不同问题,可采用欧式距离、核函数距离、曼哈顿距离、切比雪夫距离或马哈拉诺比斯距离等。
簇中心更新公式:
v
i
=
∑
k
=
1
N
μ
i
k
m
x
k
∑
k
=
1
N
μ
i
k
m
v_i = \frac{\sum_{k=1}^{N}\mu_{ik}^m x_k}{\sum_{k=1}^{N}\mu_{ik}^m}
vi=∑k=1Nμikm∑k=1Nμikmxk
其中,
i
=
1
,
2
,
…
,
c
i = 1,2,\dots,c
i=1,2,…,c.
模糊划分矩阵更新公式为:
μ
i
k
=
1
∑
j
=
1
c
(
d
i
k
d
i
k
)
2
m
−
1
\mu_{ik} = \frac{1}{\sum_{j=1}^{c}(\frac{d_{ik}}{d_{ik}})^{\frac{2}{m-1}}}
μik=∑j=1c(dikdik)m−121
其中,
i
=
1
,
2
,
…
,
c
i = 1,2,\dots,c
i=1,2,…,c,
k
=
1
,
2
,
…
,
N
k = 1,2,\dots,N
k=1,2,…,N.
基于Minkowski 距离的模糊聚类算法:
优势:
适用不同的簇形状
优势:\textbf{适用不同的簇形状}
优势:适用不同的簇形状
Minkowski 距离距离公式:
d
(
x
,
y
)
=
(
∑
i
=
1
n
∣
x
i
−
y
i
∣
p
)
1
p
d(\mathbf{x}, \mathbf{y}) = \left( \sum_{i=1}^n |x_i - y_i|^p \right)^{\frac{1}{p}}
d(x,y)=(i=1∑n∣xi−yi∣p)p1
Groenen、Kaymak 和 van Rosmalen (2007) 提出了采用 Minkowski 距离函数方法的模糊聚类。最小化目标函数:
J
=
∑
i
=
1
c
∑
k
=
1
N
u
i
k
m
d
i
k
2
λ
J = \sum_{i=1}^c \sum_{k=1}^N u_{ik}^m d_{ik}^{2\lambda}
J=i=1∑ck=1∑Nuikmdik2λ
限制条件:
0
≤
u
i
k
≤
1
,
∑
i
=
1
c
u
i
k
=
1
0 \leq u_{ik} \leq 1, \quad \sum_{i=1}^c u_{ik} = 1
0≤uik≤1,∑i=1cuik=1。其中,λ 为 Minkowski 距离的 λ 次根,sh 为定义簇形状的参数。样本
x
k
x_k
xk 和簇
c
i
c_i
ci之间的距离可以通过以下方式定义:
d
i
k
2
λ
=
(
∑
j
=
1
n
∣
x
k
j
−
v
i
j
∣
s
h
)
2
λ
s
h
,
1
≤
s
h
<
∞
,
0
≤
λ
≤
1
d_{ik}^{2\lambda} = \left( \sum_{j=1}^n \left| x_{kj} - v_{ij} \right|^{sh} \right)^{\frac{2\lambda}{sh}}, \quad 1 \leq sh < \infty, \quad 0 \leq \lambda \leq 1
dik2λ=(j=1∑n∣xkj−vij∣sh)sh2λ,1≤sh<∞,0≤λ≤1
注意:
j
=
1
,
2
⋯
,
n
j = 1,2\cdots,n
j=1,2⋯,n是样本为度。其实,Minkowski 距离公式没变,只是等式两边都进行了
2
λ
2\lambda
2λ次方。 λ 值越大,小距离和大距离之间的差异非常显著。λ 值越大,差异会减小。
注意 \textbf{注意} 注意:可以使用参数 sh 调整簇的形状以适应特定问题。对于 sh = 2,簇是圆形的。当 sh = 1 时,簇呈菱形或旋转方形。 s h → ∞ sh \rightarrow ∞ sh→∞ ,簇是矩形且平行于轴。当数据结构的形状类似于矩形且具有锐利边缘时,接近 1 或 ∞ 的参数 sh 值可能很有用(Bobrowski & Bezdek,1991)。
簇中心更新公式:
v
i
j
=
∑
k
=
1
N
a
i
j
k
x
k
j
∑
k
=
1
N
a
i
j
k
,
i
=
1
,
2
,
…
,
c
,
j
=
1
,
2
,
…
,
n
v_{ij} = \frac{\sum_{k=1}^N a_{ijk} x_{kj}}{\sum_{k=1}^N a_{ijk}}, \quad i = 1, 2, \dots, c, \quad j = 1, 2, \dots, n
vij=∑k=1Naijk∑k=1Naijkxkj,i=1,2,…,c,j=1,2,…,n
其中,
a
i
j
k
=
u
i
k
m
d
i
k
2
λ
−
s
h
(
x
k
j
−
v
i
j
)
s
h
−
2
a_{ijk} = u_{ik}^m d_{ik}^{2\lambda - sh} \left( x_{kj} - v_{ij} \right)^{sh - 2}
aijk=uikmdik2λ−sh(xkj−vij)sh−2。
隶属度更新公式为:
u
i
k
=
(
d
i
k
2
λ
)
−
1
m
−
1
∑
l
=
1
c
(
d
l
k
2
λ
)
−
1
m
−
1
u_{ik} = \frac{\left( d_{ik}^{2\lambda} \right)^{-\frac{1}{m-1}}}{\sum_{l=1}^c \left( d_{lk}^{2\lambda} \right)^{-\frac{1}{m-1}}}
uik=∑l=1c(dlk2λ)−m−11(dik2λ)−m−11
其中 m 是模糊化参数,其取值范围为 m ≥ 1 , m 越大,
−
1
m
−
1
\frac{−1}{ m−1 }
m−1−1越接近 0。因此,
(
d
i
k
2
λ
)
−
1
m
−
1
\left( d_{ik}^{2\lambda} \right)^{-\frac{1}{m-1}}
(dik2λ)−m−11越接近 1。大多数情况下 m 值相对较小,常取值2.
基于包含度的模糊聚类算法:
将距离概念换为包含度:
基于包含的模糊聚类的概念是在(Nefti-Meziani & Oussalah,2007)中提出的。在执行该聚类方法之前应该做的第一件事是构建包含索引。设
G
i
G_i
Gi 为第
i
i
i 个高斯模糊集,
m
i
m_i
mi 为第
i
i
i个高斯模糊集的平均值,
σ
i
σ_i
σi 为第 i 个高斯模糊集的标准差(SD),
σ
i
\sigma_i
σi =
σ
i
\sigma_i
σi为第
i
i
i 个高斯模糊集的 SD 乘以3(这种简化是因为高斯模糊集 98% 的值集中在区间
[
m
−
σ
,
m
+
σ
]
[m − \sigma, m + \sigma]
[m−σ,m+σ]。包含索引可以定义为:
I
d
1
(
G
1
,
G
2
)
=
{
σ
1
′
+
σ
2
′
−
∣
m
1
−
m
2
∣
2
σ
1
′
,
if
0
≤
σ
1
′
+
σ
2
′
−
∣
m
1
−
m
2
∣
≤
2
σ
1
′
0
,
if
σ
1
′
+
σ
2
′
−
∣
m
1
−
m
2
∣
<
0
1
,
if
σ
1
′
+
σ
2
′
−
∣
m
1
−
m
2
∣
>
2
σ
1
′
Id_1(G_1, G_2) = \begin{cases} \frac{\sigma_1' + \sigma_2' - |m_1 - m_2|}{2\sigma_1'}, & \text{if } 0 \leq \sigma_1' + \sigma_2' - |m_1 - m_2| \leq 2\sigma_1' \\ 0, & \text{if } \sigma_1' + \sigma_2' - |m_1 - m_2| < 0 \\ 1, & \text{if } \sigma_1' + \sigma_2' - |m_1 - m_2| > 2\sigma_1' \end{cases}
Id1(G1,G2)=⎩
⎨
⎧2σ1′σ1′+σ2′−∣m1−m2∣,0,1,if 0≤σ1′+σ2′−∣m1−m2∣≤2σ1′if σ1′+σ2′−∣m1−m2∣<0if σ1′+σ2′−∣m1−m2∣>2σ1′
为了避免在计算
i
d
1
id_1
id1 时使用绝对值,可以用以下方式:
I
d
2
(
G
1
,
G
2
)
=
{
(
σ
1
′
+
σ
2
′
)
2
−
(
m
1
−
m
2
)
2
4
(
σ
1
′
)
2
,
if
0
≤
(
σ
1
′
+
σ
2
′
)
2
−
(
m
1
−
m
2
)
2
≤
4
(
σ
1
′
)
2
0
,
if
(
σ
1
′
+
σ
2
′
)
2
−
(
m
1
−
m
2
)
2
<
0
1
,
if
(
σ
1
′
+
σ
2
′
)
2
−
(
m
1
−
m
2
)
2
>
4
(
σ
1
′
)
2
Id_2(G_1, G_2) = \begin{cases} \frac{(\sigma_1' + \sigma_2')^2 - (m_1 - m_2)^2}{4(\sigma_1')^2}, & \text{if } 0 \leq (\sigma_1' + \sigma_2')^2 - (m_1 - m_2)^2 \leq 4(\sigma_1')^2 \\ 0, & \text{if } (\sigma_1' + \sigma_2')^2 - (m_1 - m_2)^2 < 0 \\ 1, & \text{if } (\sigma_1' + \sigma_2')^2 - (m_1 - m_2)^2 > 4(\sigma_1')^2 \end{cases}
Id2(G1,G2)=⎩
⎨
⎧4(σ1′)2(σ1′+σ2′)2−(m1−m2)2,0,1,if 0≤(σ1′+σ2′)2−(m1−m2)2≤4(σ1′)2if (σ1′+σ2′)2−(m1−m2)2<0if (σ1′+σ2′)2−(m1−m2)2>4(σ1′)2
使用阶跃函数 ST 定义为:
S
T
(
x
,
a
)
=
{
0
,
if
x
<
a
1
2
,
if
x
=
a
1
,
if
x
>
a
ST(x, a) = \begin{cases} 0, & \text{if } x < a \\ \frac{1}{2}, & \text{if } x = a \\ 1, & \text{if } x > a \end{cases}
ST(x,a)=⎩
⎨
⎧0,21,1,if x<aif x=aif x>a
公式改为:
I
d
2
(
G
1
,
G
2
)
=
(
σ
1
′
+
σ
2
′
)
2
−
(
m
1
−
m
2
)
2
4
(
σ
1
′
)
2
S
T
(
(
σ
1
′
+
σ
2
′
)
2
−
(
m
1
−
m
2
)
2
)
+
4
(
σ
1
′
)
2
−
(
σ
1
′
+
σ
2
′
)
2
+
(
m
1
−
m
2
)
2
4
(
σ
1
′
)
2
S
T
(
(
σ
1
′
+
σ
2
′
)
2
−
(
m
2
−
m
2
)
2
−
4
(
σ
1
′
)
2
)
Id_2(G_1, G_2) = \frac{(\sigma_1' + \sigma_2')^2 - (m_1 - m_2)^2}{4(\sigma_1')^2} ST\left((\sigma_1' + \sigma_2')^2 - (m_1 - m_2)^2\right)+ \frac{4(\sigma_1')^2 - (\sigma_1' + \sigma_2')^2 + (m_1 - m_2)^2}{4(\sigma_1')^2} ST\left((\sigma_1' + \sigma_2')^2 - (m_2 - m_2)^2 - 4(\sigma_1')^2\right)
Id2(G1,G2)=4(σ1′)2(σ1′+σ2′)2−(m1−m2)2ST((σ1′+σ2′)2−(m1−m2)2)+4(σ1′)24(σ1′)2−(σ1′+σ2′)2+(m1−m2)2ST((σ1′+σ2′)2−(m2−m2)2−4(σ1′)2)
当第一组完全包含于第二组中时,以上形式的方程达到最大值。当第一组包含第二组时,下面的公式可以处理这种情况:
I
d
3
(
G
1
,
G
2
)
=
{
(
σ
1
′
+
σ
2
′
)
2
−
(
m
1
−
m
2
)
2
4
(
σ
1
′
)
2
,
for
(
σ
1
′
+
σ
2
′
)
2
−
(
m
1
−
m
2
)
2
≥
0
0
,
for
(
σ
1
′
+
σ
2
′
)
2
−
(
m
1
−
m
2
)
2
<
0
Id_3(G_1, G_2) = \begin{cases} \frac{(\sigma_1' + \sigma_2')^2 - (m_1 - m_2)^2}{4(\sigma_1')^2}, & \text{for } (\sigma_1' + \sigma_2')^2 - (m_1 - m_2)^2 \geq 0 \\ 0,& \text{for } (\sigma_1' + \sigma_2')^2 - (m_1 - m_2)^2 < 0 \end{cases}
Id3(G1,G2)={4(σ1′)2(σ1′+σ2′)2−(m1−m2)2,0,for (σ1′+σ2′)2−(m1−m2)2≥0for (σ1′+σ2′)2−(m1−m2)2<0
或者使用阶跃函数的形式
I
d
3
(
G
1
,
G
2
)
=
(
σ
1
′
+
σ
2
′
)
2
−
(
m
1
−
m
2
)
2
4
(
σ
1
′
)
2
S
T
(
(
σ
1
′
+
σ
2
′
)
2
−
(
m
1
−
m
2
)
2
)
Id_3(G_1, G_2) = \frac{(\sigma_1' + \sigma_2')^2 - (m_1 - m_2)^2}{4(\sigma_1')^2} ST\left((\sigma_1' + \sigma_2')^2 - (m_1 - m_2)^2\right)
Id3(G1,G2)=4(σ1′)2(σ1′+σ2′)2−(m1−m2)2ST((σ1′+σ2′)2−(m1−m2)2)
通过这种方式获得的包含指数用于基于包含的模糊聚类方法。该算法是为每个类找到一个原型,使属于该类的高斯集合上的总体包含度最大化。问题转换为最大化目标函数(加了负号):
J
=
−
∑
i
=
1
c
∑
k
=
1
N
I
d
3
(
G
k
,
G
v
i
)
u
i
k
m
J = - \sum_{i=1}^c \sum_{k=1}^N Id_3(G_k, G_{vi}) u_{ik}^m
J=−i=1∑ck=1∑NId3(Gk,Gvi)uikm
以上方程容易导致所有原型的分布(SD)趋向于其最大值。为了避免这种影响,可以使用以下公式:
J
=
−
∑
i
=
1
c
∑
k
=
1
N
I
d
3
(
G
k
,
G
v
i
)
u
i
k
m
w
+
∑
i
=
1
c
∑
k
=
1
N
(
x
k
−
v
i
)
T
I
(
x
k
−
v
i
)
u
i
k
m
w
>
0
J = - \sum_{i=1}^c \sum_{k=1}^N Id_3(G_k, G_{vi}) u_{ik}^m w+ \sum_{i=1}^c \sum_{k=1}^N (x_k - v_i)^T I (x_k - v_i) u_{ik}^m w > 0
J=−i=1∑ck=1∑NId3(Gk,Gvi)uikmw+i=1∑ck=1∑N(xk−vi)TI(xk−vi)uikmw>0
其中
I
I
I是单位矩阵,
w
w
w 是权重。
在这种形式中,方程表示最大化簇中心 G v i Gv_i Gvi 中每个元素的包含指数与最小化原型到这些元素的距离之间的平衡。该方程可用于实现划分矩阵 U 值的迭代过程。该算法将一直工作,直到该矩阵达到稳定值。
基于上下文的模糊聚类
Context-based clustering(Pedrycz,1996)的思想是通过应用上下文来搜索数据组。聚类的一般任务,表述为揭示数据 X X X 中的结构,基于上下文的聚类被重新表述为揭示上下文 A A A 中数据 X X X 的结构,其中 A A A 是感兴趣的信息颗粒(聚类的上下文)。
算法中使用聚类机制的条件方面(上下文敏感性),考虑条件变量(上下文),假设相应样本上的值
f
1
f_1
f1,
f
2
,
…
,
f
N
f_2,\dots, f_N
f2,…,fN。换句话说,
f
k
f_k
fk 是
x
k
x_k
xk 在所考虑的上下文中的参与度,
f
k
=
A
(
x
k
)
f_k = A(x_k)
fk=A(xk)。
f
k
f_k
fk 与
x
k
x_k
xk 对各个簇隶属度值(例如
μ
1
k
,
μ
2
k
,
.
.
.
,
μ
C
k
\mu_{1k}, \mu_{2k},..., \mu_{Ck}
μ1k,μ2k,...,μCk)连接,如下式所示:
∑
i
=
1
c
u
i
k
=
f
k
,
k
=
1
,
2
,
…
,
N
\sum_{i=1}^c u_{ik} = f_k, \quad k = 1, 2, \dots, N
i=1∑cuik=fk,k=1,2,…,N
所选上下文直接影响聚类结果。上下文
A
A
A的有限的支持没有考虑这些隶属值等于0的数据点。这意味着只有原始数据的某个子集可用于进一步聚类。考虑到这一事实,划分矩阵
U
U
U 之前的定义
U
=
{
u
i
k
∈
[
0
,
1
]
∣
∑
i
=
1
c
u
i
k
=
1
and
0
<
∑
k
=
1
N
u
i
k
<
N
∀
i
}
U = \left\{ u_{ik} \in [0, 1] \, \Bigg| \, \sum_{i=1}^c u_{ik} = 1 \text{ and } 0 < \sum_{k=1}^N u_{ik} < N \forall i \right\}
U={uik∈[0,1]
i=1∑cuik=1 and 0<k=1∑Nuik<N∀i}
被修改为
U
(
A
)
=
{
u
i
k
∈
[
0
,
1
]
∣
∑
i
=
1
c
u
i
k
=
f
k
∀
k
and
0
<
∑
k
=
1
N
u
i
k
<
N
∀
i
}
U(A) = \left\{ u_{ik} \in [0, 1] \, \Bigg| \, \sum_{i=1}^c u_{ik} = f_k \, \forall k \text{ and } 0 < \sum_{k=1}^N u_{ik} < N \forall i \right\}
U(A)={uik∈[0,1]
i=1∑cuik=fk∀k and 0<k=1∑Nuik<N∀i}
整个基于上下文的模糊聚类算法可以概括为以下步骤:
- 聚类数 C C C,确定聚类终止条件 ε (ε > 0)、距离函数 ∣ ∣ ∗ ∣ ∣ \mid\mid * \mid\mid ∣∣∗∣∣,模糊化参数 m m m(默认 2),然后初始化划分矩阵 U U U,目标函数为: J = ∑ i = 1 c ∑ k = 1 N μ i k m d i k 2 J = \sum_{i=1}^{c} \sum_{k=1}^{N}\mu_{ik}^m d_{ik}^2 J=i=1∑ck=1∑Nμikmdik2
- 使用标准 FCM 算法计算簇中心
v i = ∑ k = 1 N μ i k m x k ∑ k = 1 N μ i k m v_i = \frac{\sum_{k=1}^{N}\mu_{ik}^m x_k}{\sum_{k=1}^{N}\mu_{ik}^m} vi=∑k=1Nμikm∑k=1Nμikmxk - 更新分区矩阵
μ i k = f k ∑ j = 1 c ( d i k d i k ) 2 m − 1 \mu_{ik} = \frac{f_k}{\sum_{j=1}^{c}(\frac{d_{ik}}{d_{ik}})^{\frac{2}{m-1}}} μik=∑j=1c(dikdik)m−12fk
其中, i , j = 1 , 2 , … , c i , j= 1,2,\dots,c i,j=1,2,…,c, k = 1 , 2 , … , N k = 1,2,\dots,N k=1,2,…,N. - 比较 U o l d U_{old} Uold和 U n e w U_{new} Unew。如果 ∣ U n e w − U o l d ∣ ≤ ε \mid U_{new}-U_{old}\mid \leq ε ∣Unew−Uold∣≤ε,则停止聚类(这里也可以设置更新前后的目标函数差小于一个常数 δ \delta δ)。否则返回步骤2,并设置 U n e w U_{new} Unew等于 U o l d U_{old} Uold继续迭代计算。
参考文献:Fuzzy trees and forests—Review 为了解模糊聚类提供了不一样的视角