资源简介
自己编写了一个实现ISODATA聚类算法的程序。(目标程序是将样本分成两类,各个参数见程序注释)
代码片段和文件信息
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(1length(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=[00];Ip=1;
plot(z_center(:1)z_center(:2)‘ro‘);
while(Ip<=I)
%-----------------------------(2)clustering-----------------------------------
%----------------------------------------------------------------------
Center_d=pdist2(z_centerx);
[rc]=size(Center_d);
for (i=1:c)
[valuew(i)]=min(Center_d(:i));
end
x1=[x w‘];%data and class type
%-----------------------------(3)if(class member %----------------------------------------------------------------------
C_num=zeros(1r);%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) sign=1;
Nc=Nc-1;
z_center(i:)=[];
end
end
if (sign==1)
sign=0;
continue;%goto (2)
end
%--------------------------(4)-----------------------------------------
%----------------------------------------------------------------------
avr_cd=zeros(1r);
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(j3)==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(i1)=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(Nc2)~=0)
for(i=1:r-1)
for(j=i+1:r)
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 5222 2013-04-25 18:14 isodata.m
文件 84480 2013-04-25 18:04 ISODATA流程图.vsd
----------- --------- ---------- ----- ----
89702 2
- 上一篇:music算法频谱估计
- 下一篇:matlab 自动识别物体
相关资源
- matlab 自动识别物体
- 合成孔径雷达RD算法Matlab仿真
- 不变矩Matlab代码
- matlab-vs2012的编译配置文件
- 维纳在声音去噪中的应用MATLAB实现
- k均值聚类matlab
- BAYES决策的MATLAB程序设计
- matlab 混沌函数工具箱
- 基于MATLAB的PCM编码
- MATLAB建立的发动机的模型
- CRC校验 海明编码
- 基于单纯形寻优的PID参数整定方法
- MATLAB电机仿真模块
- 随机波束成型rbfmatlab代码
- RS编码MATLAB实现完整版
- 阶比仿真程序,matlab版
-
local self-similarity desc
riptor matlab cod - LPCC特征参数提取
- MATLAB去噪代码
- BP神经网络Matlab实现V1
- Matlab仿真ACO-OFDM信号发送与接收
- CroppedYale人脸数据降维 MATLAB
-
matlab simuli
nk 逆变器并网model VF/PQ控 - 优化问题测试函数matlab代码
- matlab 石头剪刀布
- ARIMA模型MATLAB实现代码
- ID3的MATLAB实现244799
- 最速下降法的MATLAB程序
- 彩色图像分割——matlab实现FCM算法
- 共轭梯度法的matlab实现
评论
共有 条评论