模糊c均值聚类算法原理详细讲解

模糊c均值聚类算法详细讲解

  • (一)聚类和模糊简述
  • (二)模糊c均值聚类原理
    • (1)目标函数
    • (2)隶属度矩阵Uij和簇中心Cij
    • (3)终止条件
  • (三)模糊c均值聚类算法步骤

本文是在另一篇博客的基础上加上了自己的理解: 另一篇博客.

(一)聚类和模糊简述

聚类分析是多元统计分析的一种,也是无监督模式识别的一个重要分支,在模式分类、图像处理和模糊规则处理等众多领域中获得最广泛的应用。它把没有类别标记的样本按照某种准则划分为若干子集,使相似的样本尽可能归于一类,而把不相似的样本划分到不同的类中。硬聚类把每个待识别的对象严格的划分某类中,具有非此即彼的性质(非0即1),而模糊聚类建立了样本对类别的不确定描述,更能客观的反应客观世界,从而成为聚类分析的主流。

在很多问题中,结果只有两种可能,即取0或者1,比如一个学生不是男生就是女生。但是这样不能描述很多事物的属性,比如天气冷热程度,没有一个明确的定义来规定什么温度是热什么是冷。原因在于在很多情况下多个类别之间的界限并不是绝对的明确。
需要用模糊性词语来判断,模糊数学和模糊逻辑把只取1或0二值(属于/不属于)的普通集合概念推广[0,1]之间的实数,即隶属度。用“隶属度”来描述元素和集合之间的关系,通过隶属度来表示样本属于某一类的概率。

(二)模糊c均值聚类原理

模糊c-均值聚类算法 fuzzy c-means algorithm ( FCM)。在众多模糊聚类算法中,模糊C-均值( FCM) 算法应用最广泛且较成功,它通过优化目标函数得到每个样本点对所有类中心的隶属度,从而决定样本点的类属以达到自动对样本数据进行分类的目的。给每个样本赋予属于每个簇的隶属度函数,通过隶属度值大小来将样本归类。
模糊c均值聚类主要有三个关键参数,固定数量的集群、每个群集一个质心、每个数据点属于最接近质心对应的簇。

(1)目标函数

模糊c均值聚类通过最小化目标函数来得到聚类中心。目标函数本质上是各个点到各个类的欧式距离的和(误差的平方和)。聚类的过程就是最小化目标函数的过程,通过反复的迭代运算,逐步降低目标函数的误差值,当目标函数收敛时,可得到最终的聚类结果。
下面是目标函数:

模糊c均值聚类算法原理详细讲解_第1张图片

其中,m为聚类的簇数(类数),N 为样本数,C 为聚类中心数。cj 表示第 j 个聚类中心,和样本特征维数相同,xi 表示第 i 个样本,uij 表示样本 xi 对聚类中心 cj 的隶属度(即 xi 属于 cj 的概率)。||∗|| 可以是任意表示数据相似性(距离)的度量,最常见的就是欧几里得范数(又称欧氏范数,L2范数,欧氏距离):

在这里插入图片描述

(2)隶属度矩阵Uij和簇中心Cij

隶属度矩阵应当是 N∗C 的矩阵,隶属度矩阵表示的是每个样本点属于每个类的程度。对于单个样本xi,它对于每个簇的隶属度之和为1。对于每个样本点在哪个类的隶属度最大归为哪个类。越接近于1表示隶属度越高,反之越低。

求每组的聚类中心ci,使得目标函数最小(因为目标函数与欧几里德距离有关,目标函数达到最小时,欧式距离最短,相似度最高),这保证了组内相似度最高,组间相似度最低的聚类原则。

模糊c均值聚类算法原理详细讲解_第2张图片

模糊c均值聚类算法原理详细讲解_第3张图片
我们发现uij与ci是相互关联的,彼此包含对方,有一个问题就是在fcm算法开始的时候既没有uij也没有ci,那要怎么求解呢?很简单,程序开始的时候我们随便赋值给uij或者ci其中的一个,只要数值满足条件即可。然后就开始迭代,比如一般的都赋值给uij,那么有了uij就可以计算ci,然后有了ci又可以计算uij,反反复复,在这个过程中还有一个目标函数J一直在变化,逐渐趋向稳定值。那么当J不在变化的时候就认为算法收敛到一个比较好的解了。可以看到uij和ci在目标函数J下似乎构成了一个正反馈一样,所有我们可以不用求目标函数,不断迭代计算隶属度uij和簇中心cj达到我们的要求即可。

(3)终止条件

maxij{∣∣u(t+1)ij−u(t)ij∣∣}<ε

上图为终止条件,其中 t 是迭代步数,ε 是一个很小的常数表示误差阈值。也就是说迭代地更新 uij 和 cj 直到前后两次隶属度最大变化值不超过误差阈值。即继续迭代下去,隶属程度也不会发生较大的变化,认为隶属度不变了,已经达到比较优(局部最优或全局最优)状态了。这个过程最终收敛于 Jm 的局部极小值点或鞍点。

(三)模糊c均值聚类算法步骤

FCM算法步骤:
(1)选择类别的数目C,选择合适的m,初始化由隶属度函数确定的矩阵U0(随机值[0,1]之间初始化);
(2)计算聚类的中心值Cj;
(3)计算新的隶属度矩阵Uj
(4)比较Uj和U(j+1),如果两者的变化小于某个阈值,则停止算法,否则转向(2)。

你可能感兴趣的:(算法,聚类,算法)