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

📄 irisrbf1.m

📁 RBF神经网络应用于IRIS数据集的例子
💻 M
字号:
close all
clear
clc
load allirisdata.mat;
N1=40;    %每一类中用来训练的样本数
N2=50-N1;    %每一类中用来测试的样本数  
Train=[IrisData(1:N1,:);IrisData(51:(50+N1),:);IrisData(101:(100+N1),:)]';
Test=[IrisData((N1+1):50,:);IrisData((51+N1):100,:);IrisData((101+N1):150,:)]';
TrainOut=[Label(1:N1);Label(51:(50+N1));Label(101:(100+N1))]';
TestOut=[Label((N1+1):50);Label((51+N1):100);Label((101+N1):150)]';
TrainNum=size(Train,2);
TestNum=size(Test,2);
InDim=size(IrisData,1);
ClusterNum=3;
Overlap=1.0;
RandomNum=round(rand(1,ClusterNum)*TrainNum);
Centers=Train(:,RandomNum);

NumberInClusters=zeros(ClusterNum,1);
IndexInClusters=zeros(ClusterNum,TrainNum);

while 1
    NumberInClusters=zeros(ClusterNum,1);
    IndexInClusters=zeros(ClusterNum,TrainNum);
   
    OldCenters=Centers;
    for i=1:TrainNum
        AllDistance=dist(Centers',Train(:,i));
        [MinDist,Pos]=min(AllDistance);
        NumberInClusters(Pos)=NumberInClusters(Pos)+1;
        IndexInClusters(Pos,NumberInClusters(Pos))=i;
    end
    
    for i=1:ClusterNum
        Index=IndexInClusters(i,1:NumberInClusters(i));
        Centers(:,i)=mean(Train(:,Index)')';
    end
    
   
    if Centers==OldCenters
        break
    end
end


AllDistances=dist(Centers',Centers);
Maximum=max(max(AllDistances));
for i=1:ClusterNum
    AllDistances(i,i)=Maximum+1;
end
Spreads=Overlap*min(AllDistances)';
Distance=dist(Centers',Train);
SpreadsMat=repmat(Spreads,1,TrainNum);
HiddenUnitOut=radbas(Distance./SpreadsMat);
HiddenUnitOutEx=[HiddenUnitOut;ones(1,TrainNum)];
W2Ex=TrainOut*pinv(HiddenUnitOutEx);
W2=W2Ex(1:ClusterNum);
B2=W2Ex(ClusterNum+1);
%回判
TrainNNOut=W2*HiddenUnitOut+B2;
ErrInd1=find(round(TrainNNOut)~=TrainOut);
errorrate1=length(ErrInd1)/TrainNum;
disp('训练样本数')
disp(TrainNum)
disp('对训练样本的回判错误率为');
disp(errorrate1);
TestDistance=dist(Centers',Test);
TestSpreadsMat=repmat(Spreads,1,TestNum);
TestHiddenUnitOut=radbas(TestDistance./TestSpreadsMat);
TestNNOut=W2*TestHiddenUnitOut+B2;
ErrInd2=find(round(TestNNOut)~=TestOut);
errorrate2=length(ErrInd2)/TestNum;
disp('测试样本数')
disp(TestNum)
disp('对测试样本判断的错误率为');
disp(errorrate2);



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -