FUZZY c-MEANS 算法
硬聚类(hard clustering),把数据点划分到确切的某一聚类中,如K-均值聚类。而模糊聚类(亦称软聚类,soft clustering)中,数据点则可能归属于不止一个聚类中,并且这些聚类与数据点通过一个成员水平(实际上类似于模糊集合中隶属度的概念)联系起来。成员水平显示了数据点与某一聚类之间的联系有多强。模糊聚类就是计算这些成员水平,按照成员水平来决定数据点属于哪一个或哪些聚类的过程。
1、隶属度函数
隶属度函数 是表示一个对象 x 隶属于集合 A 的程度的函数,通常记作 μ A ( x ) \mu_A(x) μA(x) 。其自 变量范围是所有可能属于集合 A 的对象,取值范围是 [0, 1],即 0 ≤ µA(x) ≤ 1。µA(x) = 1 表示 x 完全隶属于集合 A,相当于传统集合概念上的 x ∈ A。
2、K-means聚类算法
先随机选取K个对象作为初始的聚类中心。然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。一旦全部对象都被分配了,每个聚类的聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件。
目标函数可定义为:
J
m
(
U
,
V
)
=
∑
i
=
1
c
∑
j
=
1
n
∥
X
j
−
V
i
∥
A
2
J_m(U,V)=\sum_{i=1}^{c}\sum_{j=1}^n\parallel X_j - V_i \parallel^2_A
Jm(U,V)=i=1∑cj=1∑n∥Xj−Vi∥A2
算法实现主要步骤包括:
1、随机确定 k 个初始点作为质心:
2、对数据集中的每个数据点找到距离最近的簇:
3、对于每一个簇,计算簇中所有点的均值并将均值作为质心:
4、重复步骤 2,直到任意一个点的簇分配结果不变。
3、模糊聚类算法
对每个对象和每个簇赋予一个权值,指明对象属于该簇的程度。
模糊聚类算法的目标函数为:
J
m
(
U
,
V
)
=
∑
i
=
1
c
∑
j
=
1
n
μ
i
j
m
∥
X
j
−
V
i
∥
A
2
J_m(U,V)=\sum_{i=1}^{c}\sum_{j=1}^n \mu_{ij}^m\parallel X_j - V_i \parallel^2_A
Jm(U,V)=i=1∑cj=1∑nμijm∥Xj−Vi∥A2
其中
U
=
[
u
i
j
]
U=[u_{ij}]
U=[uij]为隶属度矩阵,
u
i
j
u_{ij}
uij是第 j 个样本对于第 i 类的隶属度,m 是模糊常数。
约束条件:对于任意一个样本,它对各个聚类的隶属度之和为 1。
∑
i
=
1
c
u
i
j
=
1
\sum_{i=1}^{c} u_{i j}=1
i=1∑cuij=1
使用拉格朗日乘子法:
F
=
∑
i
=
1
c
u
i
j
m
∥
X
j
−
V
i
∥
2
+
λ
(
∑
i
=
1
c
u
i
j
−
1
)
F=\sum_{i=1}^{c} u_{i j}^{m}\left\|X_{j}-V_{i}\right\|^{2}+\lambda\left(\sum_{i=1}^{c} u_{i j}-1\right)
F=i=1∑cuijm∥Xj−Vi∥2+λ(i=1∑cuij−1)
对
F
F
F 函数求极值得最优化条件如下:
∂
F
∂
λ
=
(
∑
i
=
1
c
u
i
j
−
1
)
=
0
∂
F
∂
u
i
j
=
[
m
(
u
i
j
)
m
−
1
∥
X
j
−
V
i
∥
2
−
λ
]
=
0
∂
F
∂
v
i
=
∑
j
=
1
n
(
u
i
j
)
m
x
j
−
v
i
∑
i
=
1
c
u
i
j
m
=
0
\frac{\partial F}{\partial \lambda}=\left(\sum_{i=1}^{c} u_{i j}-1\right)=0 \\ \frac{\partial F}{\partial u_{i j}}=\left[m\left(u_{i j}\right)^{m-1}\left\|X_{j}-V_{i}\right\|^{2}-\lambda\right]=0 \\ \frac{\partial F}{\partial v_{i}}=\sum_{j=1}^{n}\left(u_{i j}\right)^{m} x_{j}-v_{i} \sum_{i=1}^{c} u_{i j}^{m}=0 \\
∂λ∂F=(i=1∑cuij−1)=0∂uij∂F=[m(uij)m−1∥Xj−Vi∥2−λ]=0∂vi∂F=j=1∑n(uij)mxj−vii=1∑cuijm=0
解得:
u
i
j
=
[
∑
k
=
1
c
(
∥
X
j
−
V
i
∥
2
∥
X
j
−
V
k
∥
2
)
2
m
−
1
]
−
1
v
i
=
∑
j
=
1
n
u
i
j
m
X
j
∑
j
=
1
n
(
u
i
j
m
)
u_{i j}=\left[\sum_{k=1}^{c}\left(\frac{\left\|X_{j}-V_{i}\right\|^{2}}{\left\|X_{j}-V_{k}\right\|^{2}}\right)^{\frac{2}{m-1}}\right]^{-1} \\ v_{i}=\frac{\sum_{j=1}^{n} u_{i j}^{m} X_{j}}{\sum_{j=1}^{n}\left(u_{i j}^{m}\right)}
uij=⎣⎡k=1∑c(∥Xj−Vk∥2∥Xj−Vi∥2)m−12⎦⎤−1vi=∑j=1n(uijm)∑j=1nuijmXj
上面两式便是算法更新公式。
算法实现主要步骤包括:
1、选取模式类数K;
2、初始化隶属度矩阵:
3、求算聚类中心,并更新隶属度矩阵:
4、重复步骤3
5、根据隶属度进行划分,完成聚类。
4、FCM算法实验结果
编程实现模糊聚类算法,对鸢尾花分类问题,实现模糊聚类相关方法分析。分别选择聚类个数为3,4,5进行分析如下:
4.1分类结果
首先对不同聚类结果进行可视化,分别选用前两个特征以及后两个特征为横纵坐标进行绘图,并画出聚类中心如下:
3类情况
4类情况
5类情况
4.2 XB指标及对应准确度情况
Xin-Beni指标是评价聚类有效性的常用指标。它能显示类内紧凑度和类间分离度之间平衡值。类内紧凑度 = 该公式分子部分/样本数m,越小越好;类间分离度 = 该公式分母部分*样本数m,越大越好。所以XB指标计算结果越小,聚类效果最好。XB指标计算结果越小,聚类效果最好。分别对3类、4类、5类聚类方法求XB指标作图如下:
由图可知,分类为3时,性能指标最优,符合数据集真实情况,分别计算3、4、5类分类时准确度情况作图如下:
4.3与BP算法分类效果比较
设置最大迭代次数为50,将鸢尾花分为三类时训练误差(左图)及测试误差(右图)随迭代次数变化曲线如下:
使用BP神经网络对鸢尾花数据集进行分类的误差曲线如下:
分析可知,模糊聚类算法收敛速度要更快,实际操作过程中迭代十次以内便达到停止条件完成聚类过程,相比BP算法,迭代次数远小于BP算法,训练时间时间更短。但训练准确度要劣于BP算法,模糊聚类算法收敛后分类准确度稳定在90%-92%之间,BP算法则能够达到95%以上。