📄 julei.m
字号:
function julei();
load N11;
N=length(n); % n为输入数据
load k11;
k=k1; %分类数
Flag=1; %迭代标志,若为false,则迭代结束
i=0;
j=0;
min=0;
index=1;
%if k>N 最后要加个判断
center(k)=0;
centerIndex(k)=0;
centercopy(k)=0;
Top(k)=0;
%AllData
cluster(k,N)=0;
p(k)=0; %用于判断质心是否有变化
%初始化K个簇集合
%InitCenter();//初始化质心集合
% CreateRandomArray(N,K,CenterIndex);//产生随机的K个<N的不同的序列
for j=1:k %先设定k个质心
center(j)=n(j);
end
for i=1:k
centercopy(i)=center(i);
end
% UpdateCluster();//初始化K个簇集合
for i=1:N
%tindex=GetIndex(AllData(i),Center);//得到与当前数据最小的质心索引
min=abs(n(i)-center(1)); %//距质心最小距离
for j=1;k
if abs(n(i)-center(j))<min %//如果比当前距离还小,更新最小的质心序号和距离值
index=j;
min=abs(n(i)-center(j));
end
end
Top(index)=Top(index)+1;
cluster(index,Top(index))=n(i); %把这个值给这个簇
end
while Flag==1 %//开始迭代
%UpdateCluster();//更新各个聚类
for i=1:N %得到与当前数据最小的质心索引
min=abs(n(i)-center(1)); %//距质心最小距离
for j=1:k
if abs(n(i)-center(j))<min %//如果比当前距离还小,更新最小的质心序号和距离值
index=j;
min=abs(n(i)-center(j));
end
end
Top(index)=Top(index)+1;
cluster(index,Top(index))=n(i); %把这个值给这个簇
end
% UpdateCenter();//更新质心数组
sum=0;
for i=1:k
sum=0;
%//计算簇i的元素和
for j=1:Top(i)
sum=sum+cluster(i,j);
end
if Top(i)>0 %//如果该簇元素不为空
center(i)=sum/Top(i); %//求其平均值
end
end
%if(IsEqual(Center,CenterCopy))//如果本次迭代与前次的质心聚合相等,即已收敛,结束退出
for i=1:k
p(i)=center(i)-centercopy(i);
end
x=0;
for i=1:k
x=x+p(i);
end
if x==0
Flag=0;
else
for i=1:k
centercopy(i)=center(i);
end
end
% 将聚类的结果打印出来
t=1:n;
for i=1:k
subplot(k,1,i);%作图
plot(t,cluster(i,1:n),'o'); %因为长度要一样。
grid;
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -