📄 c_antcluster.m
字号:
function [m_pattern]=C_AntCluster(m_pattern,patternNum)
disType=DisSelDlg(); %获得距离计算类型
m_min=inf;
m_max=0;
%计算最大最小距离
for i=1:patternNum-1
for j=i+1:patternNum
temp=GetDistance(m_pattern(i),m_pattern(j),disType);
if(m_min>temp)
m_min=temp;
end
if(m_max<temp)
m_max=temp;
end
end
end
%初始化参数
r=m_min+(m_max-m_min)/2;
counter=1;
a=1;
b=1;
pc=0.8;
%各个元素自成一类
for i=1:patternNum
m_center(i).index=i;
m_parttern(i).category=i;
m_center(i).feature=m_pattern(i).feature;
m_center(i).patternNum=1;
end
centerNum=patternNum;
%初始化参数
tao=zeros(patternNum,patternNum);
h=ones(patternNum,patternNum);
distance=ones(patternNum,patternNum);
p=zeros(1,centerNum);
while(counter<100&¢erNum==1)
%计算类间距离
for i=1:centerNum-1
temp(i)=0;
for j=i+1:centerNum
distance(i,j)=GetDistance(m_center(i),m_center(j),disType);
if(distance(i,j)<r)
tao(i,j)=1;
else
tao(i,j)=0;
end
h(i,j)=1;
temp(i)=temp(i)+(tao(i,j)^a)*(h(i,j)^b);
end
end
flag=1;
for i=1:centerNum-1
for j=i+1:centerNum
p(i,j)=(tao(i,j)^a)*(h(i,j)^b)/temp(i);
if(p(i,j)>pc)%归并j类到i类
pi=i;
pj=j;
flag=0;
break;
end
end
if(flag==0)
break;
end
end
if(flag==0)
break;
end
end
%归并类
if (flag==0)
for i=1:patternNum
if(m_pattern(i).category==pj)
m_pattern(i).category=pi;
else if (m_pattern(i).category>pj)
m_pattern(i).category=m_pattern(i).category-1;
end
end
centerNum=centerNum-1;
else %无归并时退出
break;
end
%重新计算聚类中心
for i=1:centerNum
m_center(i)=CalCenter(m_center(i),m_pattern,patternNum);
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -