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

七个RBF神经网络的源程序

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

% r" y4 A! a7 d9 F6 r; O* cRBF_cluster:
# D0 I7 i) |! Z7 k! _2 ?" Z8 k, P8 p- J% ?: g$ Q5 u" X
" D- d, X$ G- B
% 1.基于聚类的RBF 网设计算法
' Z& I3 s( h7 j3 K% 一维输入,一维输出,逼近效果很好!
: L7 o( z4 F! Q; V  u6 MSamNum = 100; % 总样本数
" u& o0 {; G) H7 w0 M5 y+ \& GTestSamNum = 101; % 测试样本数 ) M9 {, l+ t0 g7 z- |- w! c
InDim = 1; % 样本输入维数 - u4 R9 T2 k0 F; ?+ f- e( e
ClusterNum = 10; % 隐节点数,即聚类样本数 % r9 }% q- B+ F+ `6 D
Overlap = 1.0; % 隐节点重叠系数 & e. A! y+ R! x+ V# D

$ H& D' Q; x) N+ c7 L7 c% 根据目标函数获得样本输入输出 4 a5 B8 c& C- n9 e1 y) `
rand('state',sum(100*clock))   ]( W6 G5 x2 S! \& l
NoiseVar = 0.1;
7 u3 D$ h5 w) a; b/ hNoise = NoiseVar*randn(1,SamNum); * Z; j6 G* ~! z& [% t) o! w
SamIn = 8*rand(1,SamNum)-4;
/ w8 O& C" _5 C: w$ i7 f# zSamOutNoNoise = 1.1*(1-SamIn+2*SamIn.^2).*exp(-SamIn.^2/2);   ^7 {# d! F1 \  q5 `9 _
SamOut = SamOutNoNoise + Noise; 5 O5 y; \5 Z4 L  I$ G. A
& D. g# @! [5 E7 y/ S  t8 p
TestSamIn = -4:0.08:4; ; f! N  k( B0 k
TestSamOut = 1.1*(1-TestSamIn+2*TestSamIn.^2).*exp(-TestSamIn.^2/2); : n% ?! [. \# p  c) m& n

1 s" M8 Y* c3 N; M4 I$ Qfigure
+ P- e+ d2 Q( ~hold on # |8 I, `3 S1 o
grid
3 t  A$ v* R+ J$ u" P. iplot(SamIn,SamOut,'k+') 6 @, G5 o6 @' y/ {. r% _
plot(TestSamIn,TestSamOut,'r--') 7 s3 j8 y; @1 }" c8 v7 _8 Z
xlabel('Input x');
# V6 S1 w4 }. ]0 P; S2 n& Kylabel('Output y');
& W$ n$ w: {$ S( N2 \* h" k1 j& Y
4 v1 I/ V; |% w; f; y% R: _Centers = SamIn(:,1:ClusterNum); . |* e8 X4 ^6 h6 y) Y

. l& m# I- w  F: ?NumberInClusters = zeros(ClusterNum,1); % 各类中的样本数,初始化为零
/ P* j2 @' v+ x* F) RIndexInClusters = zeros(ClusterNum,SamNum); % 各类所含样本的索引号   ~6 Z0 j$ `( A& n2 w. }9 ^
while 1, 9 v- D% l0 k% w  s. ~' f' l/ S
NumberInClusters = zeros(ClusterNum,1); % 各类中的样本数,初始化为零 " v5 t9 v6 ~6 Q/ _! {, \$ H; `
IndexInClusters = zeros(ClusterNum,SamNum); % 各类所含样本的索引号 1 A  z& i: O; ^2 E9 S" t2 {! @
  ~% U4 ]2 [- w$ U7 R
% 按最小距离原则对所有样本进行分类 - x5 s9 b+ _7 U4 I
for i = 1:SamNum
8 n. E1 ^* G2 g4 a" I+ AAllDistance = dist(Centers',SamIn(:,i));
' j$ ]. Y6 ^( }6 a' |% G[MinDist,Pos] = min(AllDistance); ( R) n! [; p# ^/ U
NumberInClusters(Pos) = NumberInClusters(Pos) + 1;
6 t+ {' T- B' [6 @2 ?" p/ jIndexInClusters(Pos,NumberInClusters(Pos)) = i;
) r& B$ X( J+ s3 h3 U/ a/ G' z7 C+ Xend ; M5 k3 I2 z: m( t
% 保存旧的聚类中心
& j9 H/ {7 f+ |; e" i( ]OldCenters = Centers;
; \0 Q9 I0 r4 o& y$ `0 o* b2 ~& v! O( u
for i = 1:ClusterNum
- X3 N$ s' W  W" a! EIndex = IndexInClusters(i,1:NumberInClusters(i)); ( m! C: i1 }; i& f6 ?
Centers(:,i) = mean(SamIn(:,Index)')'; 3 N& P. w# v- L7 X6 \
end
% [3 k$ {) l" w% x3 A. @- O% 判断新旧聚类中心是否一致,是则结束聚类
3 G% S$ v% Y: z! ]( \/ |EqualNum = sum(sum(Centers==OldCenters));
8 ~+ e" T: _& X6 j- U$ x- zif EqualNum == InDim*ClusterNum,
; `9 L; B# u/ U6 xbreak,
) Y% D5 ?& ]5 x$ ^% ?5 L* h+ x6 k- xend & l3 x3 M/ P" N: @$ h; h1 `2 B* t
end
8 t- G: r% J  o: a9 E
; k# H2 ~3 y/ A5 L% 计算各隐节点的扩展常数(宽度)
/ g5 ^$ t7 Q/ R. u$ _' C9 SAllDistances = dist(Centers',Centers); % 计算隐节点数据中心间的距离(矩阵) 3 G( L% I; m8 o, A
Maximum = max(max(AllDistances)); % 找出其中最大的一个距离 0 T( R5 _. [9 j0 v" H
for i = 1:ClusterNum % 将对角线上的0 替换为较大的值 - e. Z7 K( g& G( s( h1 {0 ~9 x: e
AllDistances(i,i) = Maximum+1;
; |- \8 }% j! }6 ]. R' iend 8 q6 M! k* U! u
Spreads = Overlap*min(AllDistances)'; % 以隐节点间的最小距离作为扩展常数 ) F+ F8 ]7 _( R

& n* H' y1 k$ f9 g& K& I' d* [% 计算各隐节点的输出权值   \, J- [! d4 H1 P
Distance = dist(Centers',SamIn); % 计算各样本输入离各数据中心的距离
/ k4 |# C, J) G* FSpreadsMat = repmat(Spreads,1,SamNum);
9 I' r' D2 S2 F. vHiddenUnitOut = radbas(Distance./SpreadsMat); % 计算隐节点输出阵 ; i0 g0 W& U5 x% X% t5 H
HiddenUnitOutEx = [HiddenUnitOut' ones(SamNum,1)]'; % 考虑偏移 * ~& [3 i" O1 `( I1 z! ^
W2Ex = SamOut*pinv(HiddenUnitOutEx); % 求广义输出权值 4 f( S$ X2 c. z8 ?, v" T; q
W2 = W2Ex(:,1:ClusterNum); % 输出权值 $ X0 T) K$ c3 d
B2 = W2Ex(:,ClusterNum+1); % 偏移 * S# z  @" c( M6 [8 j( e' S

& w, c* x0 H0 ~8 P& K6 C% 测试
! a" P3 c0 l+ h8 s4 b$ m' yTestDistance = dist(Centers',TestSamIn);
; k' `7 j+ t$ VTestSpreadsMat = repmat(Spreads,1,TestSamNum); " m- w3 F" Z- o
TestHiddenUnitOut = radbas(TestDistance./TestSpreadsMat); 4 D5 }! s2 j% ?  x% _" |
TestNNOut = W2*TestHiddenUnitOut+B2; + A% H$ L' |: I0 c
plot(TestSamIn,TestNNOut,'b-') ; D9 `  f# Z( @+ W4 r! n
W2
- V% ]: m, J% C5 c2 K$ N! Y% k3 Z, G' Q) _' I0 P* `

, \. a. n5 J9 O! m. D3 K  P5 B* t/ `* }1 a- C5 d

1 Z. x  {8 r! j" `8 m2 _1 {  A  m2 ^
0 j0 B6 M) A- W$ a, C% s- y) r! }7 J
游客,如果您要查看本帖隐藏内容请回复
- S- x" [" C+ ]! |- b) C' E2 R0 y

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-4 09:35 , Processed in 0.140625 second(s), 27 queries , Gzip On.

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

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

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