本文涉及的模糊聚类算法——Fuzzy C-means 算法,笔者之前并没有接触过,来源于笔者 CUDA 交流群的一位读者同学(@被你逮到了呢),在他的建议下笔者对 Fuzzy C-means 算法做了一个简单的 CUDA 实现,本文将对代码逻辑进行详细介绍。 1 FCM 聚类算法简介 提到聚类算法,通常我们想到的就是 Kmeans、层次聚类等算法,...
FCM[1-3]是一种重要的聚类算法,其目标是将n维空间中的数据X = {x_1, ..., x_N}分配到C个聚类中心v_1, ..., v_C。在欧氏距离意义下,数据靠近哪个聚类中心就属于哪个类,如图1所示。 图1 FCM聚类示意图 该问题可以使用下面的优化模型表示: 其中‖∙‖表示欧氏距离,m > 1表示模糊水平,C ≥ 2且...
FCM算法首先是由E. Ruspini提出来的,后来J. C. Dunn与J. C. Bezdek将E. Ruspini算法从硬聚类算法推广成模糊聚类算法。FCM算法是基于对目标函数的优化基础上的一种数据聚类方法。聚类结果是每一个数据点对聚类中心的隶属程度,该隶属程度用一个数值来表示。FCM算法是一种无监督的模糊聚类方法,在算法实现过程中不...
Fuzzy C-means算法主要是比较RGB空间的每个像素值与Cluster中的每个中心点值,最终给 每个像素指派一个值(0~1之间)说明该像素更接近于哪里Cluster的中心点,模糊规则是该像 素对所有cluster的值之和为1。简单的举例:假设图像中有三个聚类cluster1,cluster2,cluster3, ...
dummy_sum_num= 0.0dummy_sum_dum= 0.0forkinrange(0, len(data)):#分子dummy_sum_num += (U[k][j] ** m) *data[k][i]#分母dummy_sum_dum += (U[k][j] **m)#第i列的聚类中心current_cluster_center.append(dummy_sum_num /dummy_sum_dum)#第j簇的所有聚类中心C.append(current_cluster...
相较于k-means的硬聚类,模糊c提供了更加灵活的聚类结果。因为大部分情况下,数据集中的对象不能划分成为明显分离的簇,指派一个对象到一个特定的簇有些生硬,也可能会出错。故,对每个对象和每个簇赋予一个权值,指明对象属于该簇的程度。当然,基于概率的方法也可以给出这样的权值,但是有时候我们很难确定一个合适的...
模糊c均值聚类融合了模糊理论的精髓。相较于k-means的硬聚类,模糊c提供了更加灵活的聚类结果。因为大部分情况下,数据集中的对象不能划分成为明显分离的簇,指派一个对象到一个特定的簇有些生硬,也可能会出错。故,对每个对象和每个簇赋予一个权值,指明对象属于该簇的程度。当然,基于概率的方法也可以给出这样的权值...
FCM(Fuzzy c-means)算法的基本过程: 假设需要将数据集中的数据分为C种类型,那么就存在C个聚类中心,每个数据样本i属于某一类型的隶属度(概率)为$\mu_ij$,因此目标函数可以写成$J = \sum^C_{i=1}\sum^n_{j=1}\mu^m_{ij}(x_j-C_i)^2$(当样本靠近其隶属的类型中心点时,其距离小,概率大,反之距...
function [U,P,Dist,Cluster_Res,Obj_Fcn,iter]=fuzzycm(Data,C,plotflag,M,epsm) % 模糊 C 均值聚类 FCM: 从随机初始化划分矩阵开始迭代 % [U,P,Dist,Cluster_Res,Obj_Fcn,iter] = fuzzycm(Data,C,plotflag,M,epsm) % 输入: % Data: N×S 型矩阵,聚类的原始数据,即一组有限的观测样本集, ...