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

📄 all.m

📁 模式识别分类器的设计
💻 M
字号:
clear all
tic
k=3;                                         %类别数
x=xlsread('Iris.xls');
[n,d] = size(x);
nc=[x(1,:);x(51,:);x(121,:)];                %初始聚类中心
cid = zeros(1,n);                            %用于存储聚类结果
oldcid = ones(1,n);
nr = zeros(1,k); 
maxgn= 100;                                  %最大迭代次数
iter = 1;
while iter < maxgn
for i = 1:n                                  %计算每个数据到聚类中心的距离
  dist = sum((repmat(x(i,:),k,1)-nc).^2,2);
  [m,ind] = min(dist);                       %将当前聚类结果存入cid中
  cid(i) = ind;
end
for i = 1:k
  ind = find(cid==i);%找到每一类的所有数据,计算他们的平均值,作为下次计算的聚类中心
  nc(i,:) = mean(x(ind,:));
  nr(i) = length(ind);                       % 统计每一类的数据个数
end
  iter = iter + 1;
end
maxiter = 2;
iter = 1;
move = 1;
while iter < maxiter & move ~= 0 
move = 0;
for i = 1:n                           % 对所有的数据进行再次判断,寻求最佳聚类结果
  dist = sum((repmat(x(i,:),k,1)-nc).^2,2);
  r = cid(i);                         % 将当前数据属于的类给r
  dadj = nr./(nr+1).*dist';           % 计算调整后的距离
  [m,ind] = min(dadj);                % 找到该数据距哪个聚类中心最近
  if ind ~= r                         % 如果不等则聚类中心移动
   cid(i) = ind;                      % 将新的聚类结果送给cid
   ic = find(cid == ind);             % 重新计算调整当前类别的聚类中心
   nc(ind,:) = mean(x(ic,:));
   move = 1;
  end
end
iter = iter+1;
end
centers = nc;

for ii=1:3
    c=0;                          
    for i=(50*(ii-1)+1):(50*ii)
         if(cid(i)==ii)              % 判断分到第一类中的样本是否正确
             c=c+1;                  % C记录分类正确的个数
         end
    end
 str=num2str(ii);
 s=(c/50)*100;                       % 求第一类分类正确的百分比
 s=num2str(s);
 disp(['第',str,'类的分类正确率为:',s,'%']); 
end
 

disp('属于第一类的数据有:{')
j=1;
for i=1:150,
     if cid(i)==1,
        p1(j)=i;                      %将属于第一类的数据写入数组p1,便于输出
        j=j+1;
     end
end
disp(p1)
disp('}')
disp('属于第二类的数据有:{')
j=1;
for i=1:150,
     if cid(i)==2,
        p2(j)=i;                      %将属于第二类的数据写入数组p2,便于输出
        j=j+1;
     end
end
disp(p2)
disp('}')

disp('属于第三类的数据有:{')
j=1;
for i=1:150,
     if cid(i)==3,
        p3(j)=i;                       %将属于第三类的数据写入数组p3,便于输出
        j=j+1;
     end
end
disp(p3)
disp('}')
t4=toc

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -