⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kmeansga.m

📁 kmeans算法,许多同学做毕设需要用到
💻 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 + -