模糊聚类FCM算法和基于GA遗传优化的FCM聚类算法matlab仿真

1.算法概述

在各种糊聚类算法中,模糊C -均值聚类算法FCM (FuzzyC MeanClusteringAlgorithm )的应用最为广泛.但在实际的应用中 ,FCM算法却容易陷入局部最优解.因此 ,提出了一种基于遗传算法GA(GeneticAlgorithm )的模糊聚类分析方法 ,它利用了遗传算法随机搜索的特点 ,可以避免陷入局部最优解.实验表明 ,将该遗传算法与FCM算法结合起来进行聚类分析 ,比单一使用遗传算法或单一使用FCM算法进行聚类分析的效果都要好.


针对FCM聚类,GA-FCM聚类采用了GA与FCM(GA-FCM)聚类进行全局搜索,克服了FCM聚类容易陷入局部极小值的问题.GA-FCM聚类是以全局最优个体将GA聚类用一个最优个体,迭代过程中既包括了GA运算.它依据GA的随机性扩大了搜索范围,之后在所找到的个体.


模糊C均值算法是普通C均值算法的改进,普通C均值算法对于数据的划分是硬性的,而FCM则是一种柔性的模糊划分。

首先,需要一种方法度量两个样本的相似性,这个就是距离。FCM是一种重要的聚类算法,其目标是将n维空间中的数据X = {x_1, ..., x_N}分配到C个聚类中心v_1, ..., v_C。在欧氏距离意义下,数据靠近哪个聚类中心就属于哪个类。


把这种一个样本属于结果的这种相似的程度称为样本的隶属度,一般用表示,表示一个样本相似于不同结果的一个程度指标。


基于此,假定数据集为X,如果把这些数据划分成c类的话,那么对应的就有c个类中心为C,每个样本j属于某一类i的隶属度为,则定义一个FCM目标函数及其约束条件如下所示:




分别对其中的变量、求导数,求该目标函数的极值。


在最终的结果中,与是相互包含的,在fcm算法的初始阶段既没有,也没有,所以在程序开始时可以任意赋值给和其中一个,迭代计算。


FCM类中心的更新法则:




看式子可以发现也是一个加权平均,类i确定后,首先将所有点到该类的隶属度求和,然后对每个点,隶属度除以这个和就是所占的比重,乘以就是这个点对于这个类i的贡献值了。   


2.仿真效果预览

matlab2022a仿真结果如下:


3.MATLAB部分代码预览

data=rand(100,2).*10;

max=10;%最大值

min=0;%最小值

cluster_n=5;%所要聚类的个数

pop_size=150;%种群大小

Pc=0.25;%交叉概率

Pm=0.05;%变异概率

max_run=300;%最大运行次数

N=size(data,2);%特征维数

Num_boolean=8;%表示“7.5“所要得二进制个数

G_F=zeros(pop_size,1);%染色体适应度

U=zeros(cluster_n, size(data,1));%初始化隶度矩U

expo=2;%权值m大小

SL=2;

min_impro=0.0001;



G=round(rand(pop_size,cluster_n*N*Num_boolean));

for h=1:max_run

for i=1:pop_size %遍历整个种群

center=zeros(cluster_n,N);%初始化单个染色体中心

center=code(G(i,:),cluster_n,N,max,min,Num_boolean);%(1)对染色体解码,得到实数表示的聚类中心

[U,obj_fitness(i),obj(i)]=Uconvert(data, cluster_n, expo,center);

end

  if i > 1,

if abs(obj(i) - obj(i-10)) < min_impro, break; end,

end

T(h)=h;    

Fit=obj;

[Order,Index]=sort(Fit);

BF=Order(1);

BFI=BF;

BG=G(Index(1),:);

ln=1;

for i=1:1:SL

BGG(i,:)=G(Index(ln),:);

ln=ln+1;

end

Best_value(h)=Order(1);

Best_chrom=G(Index(1),:);



NG=selection(G,obj_fitness,pop_size);

NG=crossover(NG,Pc,pop_size);

NG=mutation(NG,Pm,pop_size);

Rs=4;

for i=1:1:SL

NG(pop_size-Rs,:)=BGG(i,:);

Rs=Rs-1;

end

G=NG;

end

center

b=sort(Best_value);

Pbest=b(1)


plot(T,Best_value);

plotflag=2;

M=2;

[U2,P,Dist,Cluster_Res,Obj_Fcn,iter]=fuzzycm(data,cluster_n,plotflag,M)

A_019

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容