在传统的k-means聚类算法的每步迭代中,每个数据点被硬划分到一个cluster。Fuzzy k-means试图松弛上述条件,即认为每个数据点与cluster center之间的membership不是取自{0,1},而是[0,1],而上述membership就是当前数据点属于一个cluster center所代表的cluster的概率。
Fuzzy k-means聚类算法试图最小化如下cost function:
Jfuz = sum(sum(P(wi|xj,theta)^b*||xj-mi||^2)),其中第一个sum对所有cluster求和,第二个sum对所有数据点求和,theta是上述membership函数对应的参数向量,P(wi|xj,theta)是当前数据点xj属于由第i个cluster的概率,b是自由参数,当b = 0时,上述目标函数变成硬划分,即一个数据点被指定给一个cluster。当 b>1 时,上述目标函数将允许数据点在一定概率下从属于所有cluster。
当P(wi|xj,theta)满足:
P(wi|xj,theta) = 1, 当xj距离第i个cluster center mi最近;
P(wi|xj,theta) = 0,其他
则上述目标函数即为k-means的目标函数,即k-means是Fuzzy k-means的一种特殊情况。
Fuzzy k-means的迭代过程如下:
1、给定cluster number 为K,以及初始中心m1,m2,...,mK,以及自由参数b(一般取b>=1)
2、计算每个数据点从属于每个cluster的概率,例如令a(j,i) = exp(-(xj-mi)),其中xj为第j个数据点(j=1,2,...,N),
定义p(j,i) = a(j,i)/sum(a(j,i))(其中sum对j求和)
3、重新计算中心mi = (sum(p(j,i)^b*xj))/(sum(p(j,i)^b))(其中sum对j求和)
4、循环2,3,直至中心m1,m2,...,mK不再变化,或者变化小于给定的阈值。