clc;
clear;
x=[0 0;1 1;2 2;4 3;5 3;4 4;5 4;6 5];%样本点
figure(1);
plot(x(:,1),x(:,2),'.');
hold on;
w=zeros(1,length(x));%class type
%----------------------------------初始化参数-----------------------------------
%------C为类别,Tn为每类允许最少样本数,Ts为类内各分量标准差上限,Td为两类中心间最小距离下限
%------L为每次迭代可以合并的最多的类数目,I为允许的最大迭代次数,Nc为初始中心数
%------z_center为每类中心的存放(初始为一类),Ip为当前迭代次数
C=2;Tn=2;Ts=1;Td=4;
L=1;I=4;Nc=1;
z_center=[0,0];Ip=1;
plot(z_center(:,1),z_center(:,2),'ro');
while(Ip<=I)
%-----------------------------(2)clustering-----------------------------------
%----------------------------------------------------------------------
Center_d=pdist2(z_center,x);
[r,c]=size(Center_d);
for (i=1:c)
[value,w(i)]=min(Center_d(:,i));
end
x1=[x w'];%data and class type
%-----------------------------(3)if(class member <Tn)-----------------------------------
%----------------------------------------------------------------------
C_num=zeros(1,r);%class num
for(i=1:r)
for(j=1:c)
if(w(j)==i)
C_num(i)=C_num(i)+1;
end
end
end
sign=0;
for(i=r:1)
if(C_num(i)<Tn)
sign=1;
Nc=Nc-1;
z_center(i,:)=[];
end
end
if (sign==1)
sign=0;
continue;%goto (2)
end
%--------------------------(4)-----------------------------------------
%----------------------------------------------------------------------
avr_cd=zeros(1,r);
avr_d=0;
temp=0;
%compute the new class center
for i=1:r
x2=sum(x1(x1(:,3)==i,:));
x2(3)=[];
z_center(i,:)=x2/C_num(i);
end
%compute the average distance of each class
for i=1:r
for (j=1:length(x1))
if(x1(j,3)==i)
temp=temp+pdist2(z_center(i,:),x(j,:));
end
end
avr_cd(i)=temp/C_num(i);
temp=0;
end
%compute the whole average distance
for i=1:r
temp=temp+avr_cd(i)*C_num(i);
end
avr_d=temp/length(x);
temp=0;
%--------------------------(5)-----------------------------------------
%----------------------------------------------------------------------
if(Nc<=C/2)
for (i=1:r)
sigma(i,:)=std(x(x1(:,3)==i,:));
end
for (i=1:r)
max_sigma(i,1)=max(sigma(i,:));
end
for (i=1:r)
if ((max_sigma(i)>Ts)&&((avr_cd(i)>=avr_d&&(C_num(i)>2*(Tn+1)))))
Nc=Nc+1;
A=z_center(1:i-1,:);
B=z_center(i+1:end,:);
Z1=z_center(i,:)+[0.5*max_sigma(i),0.5*max_sigma(i)];
Z2=z_center(i,:)-[0.5*max_sigma(i),0.5*max_sigma(i)];
z_center=[A;Z1;Z2;B];
end
end
%------
else
if (Nc>=2*C||mod(Nc,2)~=0)
for(i=1:r-1)
for(j=i+1:r)
d(i,j)=pdist2(z(i,:),z(j,:));
end
end
d_order=zeros(L,3);
k=1;
for(i=1:r-1)
for(j=i+1:r)
if(d(i,j)<Td)
d_order(k,1)=d(i,j);
d_order(k,2)=i;
d_order(k,3)=j;
k=k+1;
end
end
end
clear k;
[d_order_value,ind]=sort(d_order(:,1));
k=zeros(L,c);
while (i<=L)
% z_center(d_order(ind(i),2),:)=[];
% z_center(d_order(ind(i),3),:)=[];
k(i,:)=[d_order(ind(i),2) d_order(ind(i),3)];
[n m]=size(k);
for j=1:n*m
if((k(j)==k(n,m))||(k(j)==k(n,m-1)))
sign=1;
end
end
if (sign==1)
sign=0;
k(n,:)=[];
continue;
end
z_center1(i,:)=(C_num(d_order(ind(i),2))*z_center(d_order(ind(i),2),:)+C_num(d_order(ind(i),3))*z_center(d_order(ind(i),3),:))/(C_num(d_order(ind(i),2))+C_num(d_order(ind(i),3)));
i=i+1;
end
[n m]=size(k);
a=zeros(1,n*m);
for i=1:n*m
a(i)=k(i);
end
a=rot90(sort(a),2);
i=1;
while (i<=length(a))
z_center(a(i),:)=[];
i=i+1;
end
z_center=[z_center;z_center1];
Nc=Nc-L;
end
end
%----------------------------------------------------------------------
%----------------------------------------------------------------------
Ip=Ip+1;
end
figure(2);
str=['k*';'g*';'k*';'m*'];
[r c]=size(z_center);
x2=x(:,1);
x3=x(:,2);
for i=1:r
% A=x1(:,3)==i;
plot(x2(x1(:,3)==i),x3(x1(:,3)==i),str(i,:));
hold on;
end
plot(z_center(:,1),z_center(:,2),'ro');
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
ISODATA.rar (2个子文件)
isodata.m 5KB
ISODATA流程图.vsd 83KB
共 2 条
- 1
houzhongjie
- 粉丝: 1
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页