function[m_pattern]=K(m_pattern,patternNum)
disType=DisSelDlg();%获得距离计算类型
[centerNum, iterNum]=InputClassDlg();%获得类中心数和最大迭代次数;
for i=1:patternNum
m_pattern(i).distance=inf;
m_pattern(i).category=-1;
end
randPattern=randperm(patternNum);
for i=1:centerNum%初始化,随机分配centerNum个粒子为一类
m_pattern(randPattern(i)).category=i;
m_pattern(randPattern(i)).distance=0;
m_center(i).feature=m_pattern(randPattern(i)).feature;
m_center(i).index=i;
m_center(i).patternNum=1;
end
counter=0%记录当前已经循环的次数
change=1;
while(counter<iterNum&&change~=0)
counter=counter+1;
change=0;
for i=1:patternNum%对所有样品重新归类
%计算第i个模式到各个聚类中心的最小距离
index=-1;
distance=inf;
for j=1:centerNum
tenpDis=GetDistance(m_pattern(i),m_center(j),disType);
if(distance>tempDis);
distance=tempDis;
index=j;
end
end
%比较原中心号与新中心号
%相同:更新距离。
%不同:1,新距离小,则归入新中心,更新距离,重新计算前后两个聚类中心模式
%2,新距离大于原距离,不处理;
if(m_pattern(i).category==index)%属于原类
m_pattern(i).distance=distance;
else%不属于原类
oldIndex=m_pattern(i).category;%记录原类号
m_pattern(i).category=index;%归入新类
m_pattern(i).distance=distance;
if(oldIndex~=-1)
m_center(oldIndex)=CalCenter(m_center(oldIndex),m_pattern,patternNum);
end
m_center(index)=CalCenter(m_center(index),m_pattern,patternNum);
change=1;
end
end
end
disType=DisSelDlg();%获得距离计算类型
[centerNum, iterNum]=InputClassDlg();%获得类中心数和最大迭代次数;
for i=1:patternNum
m_pattern(i).distance=inf;
m_pattern(i).category=-1;
end
randPattern=randperm(patternNum);
for i=1:centerNum%初始化,随机分配centerNum个粒子为一类
m_pattern(randPattern(i)).category=i;
m_pattern(randPattern(i)).distance=0;
m_center(i).feature=m_pattern(randPattern(i)).feature;
m_center(i).index=i;
m_center(i).patternNum=1;
end
counter=0%记录当前已经循环的次数
change=1;
while(counter<iterNum&&change~=0)
counter=counter+1;
change=0;
for i=1:patternNum%对所有样品重新归类
%计算第i个模式到各个聚类中心的最小距离
index=-1;
distance=inf;
for j=1:centerNum
tenpDis=GetDistance(m_pattern(i),m_center(j),disType);
if(distance>tempDis);
distance=tempDis;
index=j;
end
end
%比较原中心号与新中心号
%相同:更新距离。
%不同:1,新距离小,则归入新中心,更新距离,重新计算前后两个聚类中心模式
%2,新距离大于原距离,不处理;
if(m_pattern(i).category==index)%属于原类
m_pattern(i).distance=distance;
else%不属于原类
oldIndex=m_pattern(i).category;%记录原类号
m_pattern(i).category=index;%归入新类
m_pattern(i).distance=distance;
if(oldIndex~=-1)
m_center(oldIndex)=CalCenter(m_center(oldIndex),m_pattern,patternNum);
end
m_center(index)=CalCenter(m_center(index),m_pattern,patternNum);
change=1;
end
end
end

