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

📄 kmeansga1.m

📁 kmeans算法,许多同学做毕设需要用到
💻 M
字号:
clc
close all
clear all
load('data\D4DWin13.mat');
data=Stodata;
zz=zeros(2,16);
data=standardize(data);
%**********************主函数*****************************************
%遗传算法主函数
maxgen=50;         %遗传代数
N=100;             %种群大小
lchrom=16*2;       %染色体长度
pc=0.6;            %交叉概率
pm=0.01;           %变异概率
P0=Population(N,data) ;      %初始种群
%**************************初始化种群***************************************
%遗传操作
for i=1:N
        chrom1=P0(i,:);
        % 依次计算每个染色体的适应度;
        Fit0(i)=Fitness(chrom1,data,zz);
end
%*************************************************   
for gen=1:maxgen
                                           % 保存当前最优;
    fitmax=max(Fit0)                        %  对应的适应度值fitmax=MAX(Fit)
    s=find(Fit0==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,zz);
    end
    
    % 保存当前最优;
    fitmax=max(Fit1)  % 1 最优染色体best1
    s=find(Fit1==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)=sqrt(sum((abs(data(j,:)-center(i,:))).^2));
    end
end% D=[2 3 7 9;2 8 4 7]
[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 + -