matlab聚类算法例子,案例20:基于遗传模拟退火算法的聚类算法

clear all;close all

load X

m=size(X,2);% 样本特征维数

% 中心点范围[lb;ub]

lb=min(X);

ub=max(X);

%% 模糊C均值聚类参数

% 设置幂指数为3,最大迭代次数为20,目标函数的终止容限为1e-6

options=[3,20,1e-6];

% 类别数cn

cn=4;

%% 模拟退火算法参数

q =0.8; % 冷却系数

T0=100; % 初始温度

Tend=1; % 终止温度

%% 定义遗传算法参数

sizepop=10; %个体数目(Numbe of individuals)

MAXGEN=10; %最大遗传代数(Maximum number of generations)

NVAR=m*cn; %变量的维数

PRECI=10; %变量的二进制位数(Precision of variables)

GGAP=0.9; %代沟(Generation gap)

pc=0.7;

pm=0.01;

trace=zeros(NVAR+1,MAXGEN);

%建立区域描述器(Build field descriptor)

FieldD=[rep([PRECI],[1,NVAR]);rep([lb;ub],[1,cn]);rep([1;0;1;1],[1,NVAR])];

Chrom=crtbp(sizepop, NVAR*PRECI); % 创建初始种群

V=bs2rv(Chrom, FieldD);

ObjV=ObjFun(X,cn,V,options); %计算初始种群个体的目标函数值

T=T0;

while T>Tend

gen=0; %代计数器

while gen

FitnV=ranking(ObjV); %分配适应度值(Assign fitness values)

SelCh=select('sus', Chrom, FitnV, GGAP); %选择

SelCh=recombin('xovsp', SelCh,pc); %重组

SelCh=mut(SelCh,pm); %变异

V=bs2rv(SelCh, FieldD);

ObjVSel=ObjFun(X,cn,V,options); %计算子代目标函数值

[newChrom newObjV]=reins(Chrom, SelCh, 1, 1, ObjV, ObjVSel); %重插入

V=bs2rv(newChrom,FieldD);

%是否替换旧个体

for i=1:sizepop

if ObjV(i)>newObjV(i)

ObjV(i)=newObjV(i);

Chrom(i,:)=newChrom(i,:);

else

p=rand;

if p<=exp((newObjV(i)-ObjV(i))/T)

ObjV(i)=newObjV(i);

Chrom(i,:)=newChrom(i,:);

end

end

end

gen=gen+1; %代计数器增加

[trace(end,gen),index]=min(ObjV); %遗传算法性能跟踪

trace(1:NVAR,gen)=V(index,:);

fprintf(1,'%d ',gen);

end

T=T*q;

fprintf(1,'\n温度:%1.3f\n',T);

end

[newObjV,center,U]=ObjFun(X,cn,[trace(1:NVAR,end)]',options); %计算最佳初始聚类中心的目标函数值

% 查看聚类结果

Jb=newObjV

U=U{1}

center=center{1}

figure

plot(X(:,1),X(:,2),'o')

hold on

maxU = max(U);

index1 = find(U(1,:) == maxU);

index2 = find(U(2, :) == maxU);

index3 = find(U(3, :) == maxU);

% 在前三类样本数据中分别画上不同记号 不加记号的就是第四类了

line(X(index1,1), X(index1, 2), 'linestyle', 'none','marker', '*', 'color', 'g');

line(X(index2,1), X(index2, 2), 'linestyle', 'none', 'marker', '*', 'color', 'r');

line(X(index3,1), X(index3, 2), 'linestyle', 'none', 'marker', '*', 'color', 'b');

% 画出聚类中心

plot(center(:,1),center(:,2),'v')

hold off

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值