matlab---RBF

28 篇文章 0 订阅
12 篇文章 0 订阅

这里写图片描述

data = importdata('rbf.txt');  %输入文件,只有一列数据,共312个,前252个作为训练
nTrain = 252;                  %训练数据个数
nTest = 60;                    %测试数据个数
n = 5;                         %用5个数据预测第6个

%训练  252个
i = 1;
x = zeros(n, nTrain);          %5行,252列
y = zeros(1, nTrain);
while i <= nTrain              %252组训练数据
    x(:, i) = data(i : i+n-1); %将数据以每5个一组,填入x的第i列中
    y(i) = data(i+n);          %将数据从第6个开始,依次填入y的第i列中
    i = i + 1;
end
%disp(x);   %打印x
%disp(y);
%[x, minX, maxX, y, minY, maxY] = premnmx(x, y);  %预处理,归一化
net = newrb(x, y, 0.01, 4);    %建立并训练RBF网络

%测试  60个
i = 1;
x2 = zeros(n, nTest-n);
y2 = zeros(1, nTest-n);
while i <= nTest - n
    x2(:, i) = data(i + nTrain : i + nTrain + n - 1);
    y2(i) = data(i + nTrain + n);
    i = i + 1;
end
%x3 = tramnmx(x2, minX, maxX);  %归一化
y3 = sim(net, x2);              %预测值
%y3 = postmnmx(y3, minY, maxY); %逆归一化
e = sum((y3 - y2).^2);          %误差
disp(e);                        %打印误差

%预测
xtest = [289 308 357 220 52];
xtest = xtest';                 %转置
%xtest = tramnmx(xtest, minX, maxX);  %归一化
i = 1;
while i <= 4                    %预测未来的4个数据
    ytest = sim(net, xtest(i : i+n-1));  %根据训练好的net,输入的xtest,输出ytest
    xtest = [xtest; ytest];     %xtest不断动态扩大
    i = i + 1;
end
%disp(xtest);
%xtest = postmnmx(xtest, minY, maxY) %逆归一化
fid=fopen('ytest.txt', 'w');        %将预测结果写入txt
fprintf(fid, '%d\r\n', xtest);   
fclose(fid);

这里写图片描述

参考文献
刘倩然. RBF人工神经网络在棉花膜下滴灌溉预测中的应用[D].乌鲁木齐:新疆农业大学,2009.

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
函数逼近(Function Approximation )是函数论的一个重要组成部分,其在数值计算的作用是十分重要的。运用神经网络进行函数逼近,为函数逼近的发展提供了一条新的思路。 用神经网络作函数的逼近有许多优点: 首先,它提供了一个标准的逼近结构及逼近工具,这个工具可以随着隐层个数改变来达到任意精度; 其次,有标准的学习算法用以确定逼近函数的参数,并且这一过程是拟人的,即很好地模拟了人的学习过程;最后,能处理的数据对象十分广泛:适用于大规模的,高度非线性的,不完备的数据处理。 本文以几种典型神经网络为例(BP神经网络Function Approximation 、RBF神经网络www.BoliLib.com Approximation 、正交多项式基函数神经网络、样条基函数神经网络),对基于神经网络的函数逼近方法进行了研究。神经网络的函数逼近能力受神经元个数、学习率、学习次数和训练目标等因素的影响,因此,在研究过程,充分运用神经网络的非线性逼近能力,首先对几种用于函数逼近的神经网络的结构及算法进行研究;再针对几种常用函数曲线,如正弦函数、指数函数、对数函数、三角函数等,分别用典型神经网络进行逼近,并对逼近效果进行比较,得到用于函数逼近的神经网络选取规律。所得结论经过实际仿真测试,证明了其有效性。 本文的研究结果对函数逼近的研究具有借鉴意义。
共有七个完整算法 % 1.基于聚类的RBF 网设计算法 % 一维输入,一维输出,逼近效果很好! SamNum = 100; % 总样本数 TestSamNum = 101; % 测试样本数 InDim = 1; % 样本输入维数 ClusterNum = 10; % 隐节点数,即聚类样本数 Overlap = 1.0; % 隐节点重叠系数 % 根据目标函数获得样本输入输出 rand('state',sum(100*clock)) NoiseVar = 0.1; Noise = NoiseVar*randn(1,SamNum); SamIn = 8*rand(1,SamNum)-4; SamOutNoNoise = 1.1*(1-SamIn+2*SamIn.^2).*exp(-SamIn.^2/2); SamOut = SamOutNoNoise + Noise; TestSamIn = -4:0.08:4; TestSamOut = 1.1*(1-TestSamIn+2*TestSamIn.^2).*exp(-TestSamIn.^2/2); figure hold on grid plot(SamIn,SamOut,'k+') plot(TestSamIn,TestSamOut,'r--') xlabel('Input x'); ylabel('Output y'); Centers = SamIn(:,1:ClusterNum); NumberInClusters = zeros(ClusterNum,1); % 各类的样本数,初始化为零 IndexInClusters = zeros(ClusterNum,SamNum); % 各类所含样本的索引号 while 1, NumberInClusters = zeros(ClusterNum,1); % 各类的样本数,初始化为零 IndexInClusters = zeros(ClusterNum,SamNum); % 各类所含样本的索引号 % 按最小距离原则对所有样本进行分类 for i = 1:SamNum AllDistance = dist(Centers',SamIn(:,i)); [MinDist,Pos] = min(AllDistance); NumberInClusters(Pos) = NumberInClusters(Pos) + 1; IndexInClusters(Pos,NumberInClusters(Pos)) = i; end % 保存旧的聚类心 OldCenters = Centers; for i = 1:ClusterNum Index = IndexInClusters(i,1:NumberInClusters(i)); Centers(:,i) = mean(SamIn(:,Index)')'; end % 判断新旧聚类心是否一致,是则结束聚类 EqualNum = sum(sum(Centers==OldCenters)); if EqualNum == InDim*ClusterNum, break, end end % 计算各隐节点的扩展常数(宽度) AllDistances = dist(Centers',Centers); % 计算隐节点数据心间的距离(矩阵) Maximum = max(max(AllDistances)); % 找出其最大的一个距离 for i = 1:ClusterNum % 将对角线上的0 替换为较大的值 AllDistances(i,i) = Maximum+1; end Spreads = Overlap*min(AllDistances)'; % 以隐节点间的最小距离作为扩展常数 % 计算各隐节点的输出权值 Distance = dist(Centers',SamIn); % 计算各样本输入离各数据心的距离 SpreadsMat = repmat(Spreads,1,SamNum); HiddenUnitOut = radbas(Distance./SpreadsMat); % 计算隐节点输出阵 HiddenUnitOutEx = [HiddenUnitOut' ones(SamNum,1)]'; % 考虑偏移 W2Ex = SamOut*pinv(HiddenUnitOutEx); % 求广义输出权值 W2 = W2Ex(:,1:ClusterNum); % 输出权值 B2 = W2Ex(:,ClusterNum+1); % 偏移 % 测试 TestDistance = dist(Centers',TestSamIn); TestSpreadsMat = repmat(Spreads,1,TestSamNum); TestHiddenUnitOut = radbas(TestDistance./TestSpreadsMat); TestNNOut = W2*TestHiddenUnitOut+B2; plot(TestSamIn,TestNNOut,'b-') W2

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值