找回密码
 注册
关于网站域名变更的通知
查看: 445|回复: 1
打印 上一主题 下一主题

七个RBF神经网络的源程序

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-3-20 11:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x

/ s# k. ^, t" j9 NRBF_cluster:3 K& z9 D# ^7 M8 ?2 _- A2 d# `
& s& t# d) D# Q3 B0 O/ z: A5 a6 k
% c% \' A% Z% N* K% @, R# `' @
% 1.基于聚类的RBF 网设计算法
$ D- \6 C3 c, B% 一维输入,一维输出,逼近效果很好!
  Y' ^3 |" M" w# b4 V( o! ZSamNum = 100; % 总样本数
2 v4 \0 R6 {2 e# ~2 Q" TTestSamNum = 101; % 测试样本数
$ v, t9 y3 e9 \# `3 C" _InDim = 1; % 样本输入维数 $ M7 E' U, Z5 v
ClusterNum = 10; % 隐节点数,即聚类样本数
3 n: y$ o' f4 A" q" P& r) eOverlap = 1.0; % 隐节点重叠系数
* @2 ^2 P0 e7 q6 b
; c. p& E5 I+ p% 根据目标函数获得样本输入输出 ! y: m* m2 e( {  o8 N
rand('state',sum(100*clock))
& d6 d' b  ], \7 J7 DNoiseVar = 0.1; & k5 o! Q6 U6 ^! d9 R: G
Noise = NoiseVar*randn(1,SamNum);
$ f- N) o" h: kSamIn = 8*rand(1,SamNum)-4;
, D/ ]; H7 D2 r# dSamOutNoNoise = 1.1*(1-SamIn+2*SamIn.^2).*exp(-SamIn.^2/2); 2 y( e) `; U3 j9 E7 i
SamOut = SamOutNoNoise + Noise;
) J; O3 b& W' C% X3 U$ ~$ ?+ O, `1 E( r- p( W4 }) U
TestSamIn = -4:0.08:4;
" w1 J& R4 Y+ Q8 N0 xTestSamOut = 1.1*(1-TestSamIn+2*TestSamIn.^2).*exp(-TestSamIn.^2/2); + _  k/ ?- [7 y8 ^7 s

( e( s) u$ d2 s  j. Rfigure - ~( F3 f0 q  J4 b1 Q9 {7 M% d
hold on
- F6 Y6 F* D  a$ ?9 I/ Tgrid
+ h. n& f+ @0 m. qplot(SamIn,SamOut,'k+') " {& t( g/ S& L2 \
plot(TestSamIn,TestSamOut,'r--') + n: O7 o) {7 `4 R* e; ^
xlabel('Input x'); % E% H. U% d" T, Z4 m! H
ylabel('Output y');
! q+ d/ n. J5 }% n2 x7 W
; w5 P" @% T$ ]& sCenters = SamIn(:,1:ClusterNum);
6 e+ s7 {6 v7 s5 T4 ?4 L9 w2 d2 [. P+ c: X8 R- b8 x
NumberInClusters = zeros(ClusterNum,1); % 各类中的样本数,初始化为零 7 M. W3 w  k# R6 `* t7 a! Z
IndexInClusters = zeros(ClusterNum,SamNum); % 各类所含样本的索引号 , _# ^% P* i" T1 R9 n* h0 P
while 1,
) r+ b, G/ W# U. dNumberInClusters = zeros(ClusterNum,1); % 各类中的样本数,初始化为零 # i+ O0 d4 y; A% X* u: x. |' a
IndexInClusters = zeros(ClusterNum,SamNum); % 各类所含样本的索引号
6 K: S* }( @4 \$ A6 S, ]" \7 e7 d4 j- H9 Y/ G& u* M  H8 x8 [
% 按最小距离原则对所有样本进行分类
8 S( @: x: c. `- `9 G: Afor i = 1:SamNum
5 f7 E$ s! q. ?! s( y3 o- }AllDistance = dist(Centers',SamIn(:,i)); 9 y6 f+ l) m% r9 h3 P1 l5 B
[MinDist,Pos] = min(AllDistance);
4 S- X3 D6 F: g9 bNumberInClusters(Pos) = NumberInClusters(Pos) + 1; ) G3 I+ [2 Q6 s, `' j
IndexInClusters(Pos,NumberInClusters(Pos)) = i; 4 a; x2 b- _- [6 Y5 I- d1 A
end ' N% e: O( q. b/ ~% X
% 保存旧的聚类中心 5 i) ]; Z% y+ v4 j4 K/ z, ^
OldCenters = Centers;
6 c0 w4 |: P8 l! P7 V7 D7 n& e, Z) ~% p2 }- }  N! L  v8 f6 N/ R
for i = 1:ClusterNum
" R; H- E( f) [7 p' QIndex = IndexInClusters(i,1:NumberInClusters(i));
% d- X" T0 z, Q# L( s& \! \Centers(:,i) = mean(SamIn(:,Index)')';
# b3 p8 }5 l" oend , ~: H6 g4 _  {- n' v; y5 H
% 判断新旧聚类中心是否一致,是则结束聚类
3 ?) ?1 a, O, {* M" A* y3 b9 aEqualNum = sum(sum(Centers==OldCenters)); 6 K- K2 n% P- x! w
if EqualNum == InDim*ClusterNum, - |% F# i; W1 A3 K
break,
' n) w  w+ m$ N1 y; l3 Cend 7 o. Z# k# L1 g! B
end ; j8 f9 c# O' X& n' `: M% E3 w
6 f2 r  R' o) x, h% S" }
% 计算各隐节点的扩展常数(宽度)
0 w3 Y4 a3 v/ O4 j" X3 TAllDistances = dist(Centers',Centers); % 计算隐节点数据中心间的距离(矩阵) & @# }0 l+ `- v9 r) J
Maximum = max(max(AllDistances)); % 找出其中最大的一个距离
8 W9 H* O) q- K9 J* ufor i = 1:ClusterNum % 将对角线上的0 替换为较大的值
0 ~: Y  s3 {! h/ u0 c- m' lAllDistances(i,i) = Maximum+1;
. i+ O. R1 G) C* o' ~( Nend
* B, y# t; V; aSpreads = Overlap*min(AllDistances)'; % 以隐节点间的最小距离作为扩展常数 % K9 A; O5 A7 d9 h; D$ Z

, z$ U8 b- i. N" V% 计算各隐节点的输出权值
! Z7 u6 Q* @( {0 {Distance = dist(Centers',SamIn); % 计算各样本输入离各数据中心的距离 1 b# M) J3 d3 E8 ^3 d. B
SpreadsMat = repmat(Spreads,1,SamNum); & V& z$ F+ m, t
HiddenUnitOut = radbas(Distance./SpreadsMat); % 计算隐节点输出阵
" g" {' l7 y. p1 H0 r8 J3 {HiddenUnitOutEx = [HiddenUnitOut' ones(SamNum,1)]'; % 考虑偏移
5 G, M, ]4 w8 m% g. o) AW2Ex = SamOut*pinv(HiddenUnitOutEx); % 求广义输出权值
0 x5 Y9 ?, F' Z* l* ~# nW2 = W2Ex(:,1:ClusterNum); % 输出权值
: x0 ?" l2 z, R. i  `B2 = W2Ex(:,ClusterNum+1); % 偏移
, }4 f' i9 r5 ]6 X
% j7 N' r$ j5 r2 ?& @) S% 测试
8 q, x7 ^+ e1 I  A% \5 ~& M9 j4 {TestDistance = dist(Centers',TestSamIn); + ]5 J8 N# Z/ Y; F" |  c
TestSpreadsMat = repmat(Spreads,1,TestSamNum);
7 Z: b: l* _( L9 S- J1 m# s% CTestHiddenUnitOut = radbas(TestDistance./TestSpreadsMat); 6 d  Z, e" L' K. v9 U* u
TestNNOut = W2*TestHiddenUnitOut+B2; ( n3 c1 ~, k* s* s. {1 d: }
plot(TestSamIn,TestNNOut,'b-') , F: C; J9 A" p  ^% m/ I
W2
0 Q* g- r! t9 U$ }; b/ J0 F- T
& @) @" ~# Q( [' w/ G) ~4 Q; x; Q  N% Z5 X; m; _5 O

5 V5 G( H: x. D7 m) Y  R3 l( h  I5 ]& F: y' N
' h9 v2 s. H8 g3 q2 G; W
' t; t, @. V% q+ r8 F
游客,如果您要查看本帖隐藏内容请回复

2 W' E  Y5 x5 S* g: a! D* \

该用户从未签到

2#
发表于 2020-3-20 18:34 | 只看该作者
RBF神经网络的源程序。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 03:26 , Processed in 0.140625 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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