⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jingxiangji.m

📁 用径向基函数法实现模式分类
💻 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 + -