📄 cmean.m
字号:
function w=CMean(CLassNum,Sample)
n=size(Sample);
InitialCenter=zeros(CLassNum,n(2));%初始化C个类中心
for i=1:CLassNum
InitialCenter(i,:)=Sample(i,:);
end;
a=0;b=0;w=zeros(1,n(1));
w1=ones(1,n(1));
while w1~=w %循环迭代条件
w1=w;
for i=1:n(1)
C=inf;
for j=1:CLassNum
Dis(i,j)=dis(Sample(i,:),InitialCenter(j,:)); %计算矢量之间距离,Dis为自定义求向量之间距离函数
if C>Dis(i,j),
C=Dis(i,j); %找出 d min,记录它的位置
a=i;
b=j;
end;
end;
w(i)=b; %分类
end;
num=zeros(1,CLassNum);
for i=1:n(1)
for j=1:CLassNum
if w(i)==j,
num(j)=num(j)+1; %计算每类所含模式个数
end;
end;
end;
InitialCenter=zeros(CLassNum,n(2));%初始化C个类中心
CLass=InitialCenter;
for j=1:CLassNum
for i=1:n(1)
if w(i)==j
InitialCenter(j,:)=InitialCenter(j,:)+Sample(i,:); %重新分类的类心
end;
end;
InitialCenter(j,:)=InitialCenter(j,:)/num(j);
end;
end;
j=1;k=1;ii=1;
for i=1:n(1)
if w(i)==1,
j=j+1; %%第一类个数
end;
if w(i)==2,
k=k+1; %%第二类个数
end;
if w(i)==3
ii=ii+1;
end;
end;
w1=zeros(j-1,n(2));
w2=zeros(k-1,n(2));
j=1;k=1;
for i=1:n(1)
if w(i)==1,
w1(j,:)=Sample(i,:);
j=j+1; %%第一类个数
end;
if w(i)==2,
w2(k,:)=Sample(i,:);
k=k+1; %%第二类个数
end;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -