📄 jingxiangji.m
字号:
%采用径向基函数
CHA1=zeros(3,8);
CHA2=zeros(3,8);
for k=3:10
S1(k)=k;
[Q,R]=size(p);
for i=1:R
A=mean(p(:,i));
B=std(p(:,i));
p(:,i)=(p(:,i)-A)./B;
end%对输入进行归一化
P=p';
T=C';
[S2,Q]=size(T);
hidout=zeros(S1(k),Q);
netout=zeros(S2,Q);
%单层感知器的最大训练次数
overlap=2.0;
centers=P(:,1:S1(k));%选前S1个训练样本作为聚类中心
tic
%子类训练
while 1,
numberinS1=zeros(S1(k),1);
indexinS1=zeros(S1(k),Q);
for i=1:Q
AllDistance=dist(centers',P(:,i));
[MinDist,pos]=min(AllDistance);%对第i个样本进行聚类归类
numberinS1(pos)=numberinS1(pos)+1;%将该聚类的样本数目累加
indexinS1(pos,numberinS1(pos))=i;%将该样本归入索引
end
oldcenters=centers;%保存上次的聚类中心
for i=1:S1(k)
index=indexinS1(i,1:numberinS1(i));
centers(:,i)=mean(P(:,index)')';%取新聚类的样本均值作为新的聚类中心
end
bijiao=(oldcenters==centers);
if sum(sum(bijiao))==S1(k)*R
break,
end%比较新旧聚类中心是否一致
end
AllDistances=dist(centers',centers);%计算聚类中心之间的距离
spread=overlap*(max(AllDistances))'.*(max(AllDistances))';%计算gaussian函数的宽度参数
Distance=dist(centers',P);%计算没有隐层的输入值
spreadmat=repmat(spread,1,Q);%扩展到S1*Q
hidout=exp(-1*(Distance./(spreadmat/sqrt(2*S1(k)))));%隐含层的输出
hidoutEX=[hidout' ones(Q,1)]';
W2EX=T*pinv(hidoutEX);
W2=W2EX(:,1:S1(k));
B2=W2EX(:,S1(k)+1);
netout=W2*hidout+repmat(B2,1,Q);
%查全率和查准率的计算
class1=zeros(S2,1);
class2=zeros(S2,1);
class3=zeros(S2,1);
class4=zeros(S2,1);
indexout1=zeros(S2,Q);
indexout2=zeros(S2,Q);
for i=1:Q
[m1,count1]=max(T(:,i));
class1(count1)=class1(count1)+1;
indexout1(count1,class1(count1))=i;
end
for i=1:S2
index1=indexout1(i,1:class1(i));
[b1,pos1]=max(T(:,index1));
[b2,pos2]=max(netout(:,index1));
for j=1:class1(i)
if pos1(j)==pos2(j),
class3(i)=class3(i)+1;
end
end
end
cha1=class3./class1;
CHA1(:,k-2)=cha1;
for i=1:Q
[m2,count2]=max(netout(:,i));
class2(count2)=class2(count2)+1;
indexout2(count2,class2(count2))=i;
end
for i=1:S2
index2=indexout2(i,1:class2(i));
[b3,pos3]=max(T(:,index2));
[b4,pos4]=max(netout(:,index2));
for j=1:class2(i)
if pos3(j)==pos4(j),
class4(i)=class4(i)+1;
end
end
end
cha2=class4./class2;
CHA2(:,k-2)=cha2;
toc
end
CHA1
CHA2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -