声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2550|回复: 4

[共享资源] 基于OLS 的RBF 网设计算法

[复制链接]
发表于 2006-11-6 23:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
  1. SamNum = 100; % 训练样本数
  2. TestSamNum = 101; % 测试样本数
  3. SP = 0.6; % 隐节点扩展常数
  4. ErrorLimit = 0.9; % 目标误差
  5. % 根据目标函数获得样本输入输出
  6. rand('state',sum(100*clock))
  7. NoiseVar = 0.1;
  8. Noise = NoiseVar*randn(1,SamNum);
  9. SamIn = 8*rand(1,SamNum)-4;
  10. SamOutNoNoise = 1.1*(1-SamIn+2*SamIn.^2).*exp(-SamIn.^2/2);
  11. SamOut = SamOutNoNoise + Noise;
  12. TestSamIn = -4:0.08:4;
  13. TestSamOut = 1.1*(1-TestSamIn+2*TestSamIn.^2).*exp(-TestSamIn.^2/2);
  14. figure
  15. hold on
  16. grid
  17. plot(SamIn,SamOut,'k+')
  18. plot(TestSamIn,TestSamOut,'k--')
  19. xlabel('Input x');
  20. ylabel('Output y');
  21. [InDim,MaxUnitNum] = size(SamIn); % 样本输入维数和最大允许隐节点数
  22. % 计算隐节点输出阵
  23. Distance = dist(SamIn',SamIn);
  24. HiddenUnitOut = radbas(Distance/SP);
  25. PosSelected = [];
  26. VectorsSelected = [];
  27. HiddenUnitOutSelected = [];
  28. ErrHistory = []; % 用于记录每次增加隐节点后的训练误差
  29. VectorsSelectFrom = HiddenUnitOut;
  30. dd = sum((SamOut.*SamOut)')';
  31. for k = 1 : MaxUnitNum
  32. % 计算各隐节点输出矢量与目标输出矢量的夹角平方值
  33. PP = sum(VectorsSelectFrom.*VectorsSelectFrom)';
  34. Denominator = dd * PP';
  35. [xxx,SelectedNum] = size(PosSelected);
  36. if SelectedNum>0,
  37. [lin,xxx] = size(Denominator);
  38. Denominator(:,PosSelected) = ones(lin,1);
  39. end
  40. Angle = ((SamOut*VectorsSelectFrom) .^ 2) ./ Denominator;
  41. % 选择具有最大投影的矢量,得到相应的数据中心
  42. [value,pos] = max(Angle);
  43. PosSelected = [PosSelected pos];
  44. % 计算RBF 网训练误差
  45. HiddenUnitOutSelected = [HiddenUnitOutSelected; HiddenUnitOut(pos,];
  46. HiddenUnitOutEx = [HiddenUnitOutSelected; ones(1,SamNum)];
  47. W2Ex = SamOut*pinv(HiddenUnitOutEx); % 用广义逆求广义输出权值
  48. W2 = W2Ex(:,1:k); % 得到输出权值
  49. B2 = W2Ex(:,k+1); % 得到偏移
  50. NNOut = W2*HiddenUnitOutSelected+B2; % 计算RBF 网输出
  51. SSE = sumsqr(SamOut-NNOut)
  52. % 记录每次增加隐节点后的训练误差
  53. ErrHistory = [ErrHistory SSE];
  54. if SSE < ErrorLimit, break, end
  55. % 作Gram-Schmidt 正交化
  56. NewVector = VectorsSelectFrom(:,pos);
  57. ProjectionLen = NewVector' * VectorsSelectFrom / (NewVector'*NewVector);
  58. VectorsSelectFrom = VectorsSelectFrom - NewVector * ProjectionLen;
  59. end
  60. UnitCenters = SamIn(PosSelected);%%%%%%%%%%%
  61. % 测试
  62. TestDistance = dist(UnitCenters',TestSamIn);%%%%%%%%
  63. TestHiddenUnitOut = radbas(TestDistance/SP);
  64. TestNNOut = W2*TestHiddenUnitOut+B2;
  65. plot(TestSamIn,TestNNOut,'k-')
  66. k
  67. UnitCenters
  68. W2
  69. B2
复制代码

评分

1

查看全部评分

回复
分享到:

使用道具 举报

发表于 2007-1-31 15:39 | 显示全部楼层

运行出错!

HiddenUnitOutEx = [HiddenUnitOutSelected; ones(1,SamNum)];
Error in ==> jiyuolsderbf at 46
HiddenUnitOutEx = [HiddenUnitOutSelected; ones(1,SamNum)];
麻烦楼主看看!
发表于 2007-6-5 10:44 | 显示全部楼层

楼上的朋友,你的程序有点小错

楼上的朋友,你的程序有点小错,HiddenUnitOutSelected = [HiddenUnitOutSelected; HiddenUnitOut(pos,];在这句话里HiddenUnitOut(pos,]是不是写的不全?麻烦你看看,是不是忘了写什么东西?谢谢

评分

1

查看全部评分

发表于 2007-10-12 15:03 | 显示全部楼层
加上 :) 就可以了吧!
发表于 2010-3-24 20:29 | 显示全部楼层
:handshake
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-4 20:44 , Processed in 0.135162 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表