算法
模糊c均值(FCM)是一种聚类方法,它允许一个数据属于两个或多个聚类。这种方法(由Dunn于1973年开发,1981年由Bezdek改进)经常用于模式识别。它基于以下目标函数的最小化:
,
其中m 是大于1的任何实数,u ij是聚类j中x i的隶属度,x i 是d维测量数据的第i个,c j是聚类的d维中心,和|| * || 是表示任何测量数据与中心之间相似性的任何规范。
通过上面显示的目标函数的迭代优化来执行模糊划分,其中成员资格u ij和集群中心 c j的更新通过:
,
当迭代 在0和1之间的终止标准时
,该迭代将停止
,而k是迭代步骤。该过程收敛于J m的局部最小值或鞍点。
该算法由以下步骤组成:
然后停止; 否则返回第2步。
备注
如前所述,数据通过隶属函数绑定到每个集群,该函数表示该算法的模糊行为。要做到这一点,我们只需构建一个名为U的适当矩阵,其因子是介于0和1之间的数字,并表示数据和集群中心之间的成员资格程度。
为了更好地理解,我们可以考虑这个简单的单维示例。给定某个数据集,假设将其表示为分布在轴上。下图显示了这个:
查看图片,我们可以确定两个数据浓度附近的两个聚类。我们将使用'A'和'B'来引用它们。在本教程中显示的第一种方法 - k-means算法 - 我们将每个数据与特定的质心相关联; 因此,这个会员功能看起来像这样:
相反,在FCM方法中,相同的给定数据不仅仅属于定义明确的集群,而是可以放在中间位置。在这种情况下,隶属函数遵循更平滑的线以指示每个数据可以属于具有不同的隶属系数值的若干簇。
在上图中,显示为红色标记点的数据更多地属于B群集而不是A群集。'm'的值0.2表示对于这样的数据的A的隶属度。现在,我们不是使用图形表示,而是引入矩阵U,其因子是从隶属函数中获取的:
(a)(b)
行数和列数取决于我们考虑的数据和集群数量。更确切地说,我们有C = 2列(C = 2个簇)和N行,其中C是簇的总数,N是数据的总数。通用元素如此表示: u ij。
在上面的例子中,我们考虑了k-means(a)和FCM(b)的情况。我们可以注意到,在第一种情况下(a),系数总是单一的。这是为了表明每个数据只能属于一个集群的事实。其他属性如下所示:
示例
在此,我们考虑FCM的单维应用的简单情况。使用20个数据和3个簇来初始化算法并计算U矩阵。下图(摘自我们的交互式演示)显示每个数据和每个群集的成员资格值。根据隶属函数,数据的颜色是最近的聚类的颜色。
在上图所示的模拟中,我们使用了模糊系数m = 2,我们还强制终止算法
。图片显示了模糊分布取决于簇的特定位置的初始条件。尚未执行任何步骤,因此无法很好地识别群集。现在我们可以运行算法,直到验证停止条件。下图显示了在第8步达到的最终条件,m = 2且
= 0.3:
有可能做得更好吗?当然,我们可以使用更高的精度,但我们也需要付出更大的计算量。在下图中,我们可以看到使用相同初始条件和
= 0.01 的更好结果,但我们需要37个步骤!
同样重要的是要注意不同的初始化导致算法的不同演变。事实上,它可以收敛到相同的结果,但可能具有不同数量的迭代步骤。
参考书目
三个资料Q群下载不了也转发不了,先放这里Fine_tuning.zipLangChain.zipdata_clear.rar