📄 kmeansga.m
字号:
clc
close all
clear all
load('data\D4DWin13.mat');
data=Stodata;
data=standardize(data);
%**********************主函数*****************************************
%遗传算法主函数
maxgen=50; %遗传代数
N=100; %种群大小
lchrom=16*2; %染色体长度
pc=0.6; %交叉概率
pm=0.01; %变异概率
P0=Population(N,data); %初始种群
%**************************初始化种群***************************************
%遗传操作
chrom1=zeros(1,32);
L=length(chrom1);
center=zeros(2,16);
center=[chrom1(1:0.5*L);chrom1(0.5*L+1:end)];
Nc=2;
Nd=59536;
for k=1:N
chrom1=P0(k,:);
%L=length(chrom1); % 依次计算每个染色体的适应度;
%center=[chrom1(1:0.5*L);chrom1(0.5*L+1:end)];
%Nc=size(center,1);
%Nd=size(data,1);
for i=1:Nc % Nc 个聚类中心
for j=1:Nd % N 个数据样本
D(i,j)=-(sum((abs(data(j,:)-center(i,:))).^2))^(1/2);
end
end
Fit=sum(sum(D));
Fit0(k,:)=Fit; %Fit0(k,:)=Fitness(chrom1,data);
end
%*************************************************
for gen=1:maxgen
% 保存当前最优;
fitmax=max(Fit); % 对应的适应度值fitmax=MAX(Fit)
s=find(Fit==fitmax); % s=find(Fit==fitmax)
best0=P0(s,:); % 最优染色体best0=P0(s,:)
Ps=Selection(P0,Fit0); %选择操作
Pc=Crossover(Ps,pc,data); %交叉操作
Pm=Mutation(Pc,pm); %变异操作
%*************************************************
P1=Pm;
% 计算进化后的种群的适应度:
for i=1:N
chrom1=P1(i,:);
% 依次计算每个染色体的适应度;
Fit1(i)=Fitness(chrom1,data);
end
% 保存当前最优;
fitmax=max(Fit1) % 1 最优染色体best1
s=find(Fit==fitmax) % 2 对应的适应度值fit1
best1=P0(s,:)
% 更新当前最优染色体;
bestc=max(best0,best1);
% 循环设置
P0=P1;
end
% 解码最优染色体bestc
for i=1:Nc % Nc 个聚类中心
for j=1:N % N 个数据样本
D(i,j)=-(sum((abs(data(j,:)-center(i,:))).^2))^(1/2);
end
end %D=(2,59536)
[A Label]=max(D);
%得到类别标号Label=[]
%C1=find(Label==1);
%C2=find(Label==2);
cid=Label';
img=reshape(cid,244,244);
for i=1:244
for j=1:244
if img(i,j)==1
img(i,j)=0;
else
img(i,j)=255;
end
end
end
figure,imshow(img);%完成图像分类
img1= imread ('MoS244true.bmp'); %读入标准测试图像
img1=im2double(img1);%转换成double型
for i=1:244
for j=1:244
if img1(i,j)==1
img1(i,j)=255;
else img1(i,j)=0;
end
end
end
img0=img-img1;
sum=0
for i=1:244
for j=1:244
if img0(i,j)==0
sum=sum+1; %统计像素差为零的总个数
end
end
end
sum
accuracy=sum/(244*244);%计算分类的精度
accuracy
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -