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

📄 simplerbf.m

📁 一个基于K均值聚类的RBF神经网络
💻 M
字号:
%一个最基本的rbf算法,学习算法采用伪逆函数
%
%
%
%
%
%
%
%
%
%
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all;
close all;
clc;
%定义用到的变量
r=1;                  %领域半径,人为设定
nodenum=0;            %隐层节点数,由实际数据与r共同决定
inputdata=[];         %输入矩阵
inputpath=' ';        %存储原始输入数据的路径
nodeout=[];           %隐层输入阵 
netout=[];            %网络输出阵
weight=[];            %输出权值阵,也是唯一的权值
inputnum=0;           %输入维数
outputnum=0;          %输出维数
center=[];            %聚类中心
numtrain=0;           %学习样本的个数
row=0;                %学习样本的个数
simrow=0;             %全部样本的个数
numtest=0;            %泛化样本的个数
strength=1;           %归一化处理时用到的范围,一般为1
yout=[];              %输出的期望值

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%变量的初始化
r=1;
inputnum=9;
inputpath='e:\yinjia\data\yearsun.dat';
outputnum=1;
simrow=290;
source=load(inputpath);
%保存一个source的副本,为反归一化做准备
copysource=source;
%归一化处理
source=normalize(source,strength);
yout=source(inputnum+1:simrow+inputnum);
inputdata=phasespace(source,inputnum,simrow);
row=250;
numtrain=row;
numtest=simrow-row;
%把第一人输入变量定为初始的中心
%中心的位置在初始化后,不会再变化
center=inputdata(1,:)';

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%开始进行简单的聚类
%其基本思想是:给定一个固定的邻域半径,在中心点邻域半径内的点就算作
%是该邻域的点;半径外的点,取第一个不是半径内的点做为新的中心点
%设计一个函数iscenter,来计算一个点是否为中心点。
for step=2:row
    if iscenter(inputdata(step,:)',center,r)
        center=[center inputdata(step,:)'];
        nodenum=nodenum+1;
    end % this end for iscenter(inputdata(step,:))
end % this end for step=2:row
%聚类完成.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%准备进行神经网络的前向计算
[centerrow nodenum]=size(center);
%网络的初始化
nodeout=zeros(row,nodenum);
netout=zeros(row,outputnum);
weight=zeros(nodenum,outputnum);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%网络的计算
for step=1:row
    for step1=1:nodenum
        nodeout(step,step1)=GaussRadialBasisFunction(inputdata(step,:)',...
            center(:,step1),r);
    end % this end for step1=1:nodenum
end %this end for step=1:row
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%用伪逆来计算权值
weight=pinv(nodeout)*yout(1:250);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%进行仿真
for step=1:simrow
    for step1=1:nodenum
        nodeout(step,step1)=GaussRadialBasisFunction(inputdata(step,:)',...
            center(:,step1),r);
    end % this end for step1=1:nodenum
end %this end for step=1:simrow

mydata=nodeout*weight;
%反归一化
mydata=unnomal(mydata,copysource,strength);
rldata=copysource(inputnum+1:inputnum+simrow);
plot(rldata);hold on;plot(mydata,'r');

%计算一个评价函数
rmsetest=(norm(rldata(numtrain+1:simrow)-mydata(numtrain+1:simrow))...
    ^2/(numtest-1))^0.5

⌨️ 快捷键说明

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