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

七个RBF神经网络的源程序

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
6 t/ v7 b/ V5 Z1 ]
RBF_cluster:0 }: z9 C& r" j" C1 q0 u2 {6 l4 S
3 c$ [7 \+ Q# d, {  ~
* `! M6 _+ ]! M8 o; @& [* u. Y
% 1.基于聚类的RBF 网设计算法 / {& {8 n5 U& N7 S
% 一维输入,一维输出,逼近效果很好! 3 [2 J& Y3 q) P+ w9 x. y* p/ t6 U
SamNum = 100; % 总样本数
1 Z. q( ]/ n, D+ k, N" f" P+ s9 nTestSamNum = 101; % 测试样本数 2 R9 U/ M: H# `" K- z+ ?' U
InDim = 1; % 样本输入维数
8 X6 x" V' g2 C7 ?- [  _& W# y. G( J( e8 lClusterNum = 10; % 隐节点数,即聚类样本数 7 W) b* @! Y2 A8 }2 R" r: U" J
Overlap = 1.0; % 隐节点重叠系数
) L9 b& k9 c# f
5 K3 k" T) V# X. k" C2 j, |1 g+ Z% 根据目标函数获得样本输入输出 ' U7 D! V' e, |( ~
rand('state',sum(100*clock))
) D0 C; V' Z2 C. Q( eNoiseVar = 0.1; $ G5 d$ F/ o" Z, O& h) a
Noise = NoiseVar*randn(1,SamNum); 1 `! J2 u, R' |% M" G
SamIn = 8*rand(1,SamNum)-4;
6 Q% y. @* b2 s7 d' V: f" NSamOutNoNoise = 1.1*(1-SamIn+2*SamIn.^2).*exp(-SamIn.^2/2); $ f/ w  E8 X7 f
SamOut = SamOutNoNoise + Noise;
; \/ r; J9 A! ~$ o) @1 Y/ T# i  O. H7 F7 B) q, B+ F4 \" \
TestSamIn = -4:0.08:4;
: }7 W4 S5 r+ Y2 G3 H% TTestSamOut = 1.1*(1-TestSamIn+2*TestSamIn.^2).*exp(-TestSamIn.^2/2); , p& h6 Z, u" d, ]6 n! ^

- q5 Z4 T- H( tfigure ! i' U+ R) ]3 I. W7 p$ f3 ~$ v1 L
hold on + C5 ~" j, d9 G9 q$ S- V3 z
grid
& G# l# i1 l1 w! Q- t2 G8 qplot(SamIn,SamOut,'k+') 6 B: R& q$ G% J4 a) r0 w, f1 F) @
plot(TestSamIn,TestSamOut,'r--') " R7 ?8 j3 X/ i
xlabel('Input x');
1 T+ a7 o% p4 S) U8 \& t5 [' Wylabel('Output y'); 0 g: P; b7 r2 N6 k

2 T' w0 H7 j' {9 X" SCenters = SamIn(:,1:ClusterNum); " W7 w+ P& b# E0 t. C% [* H& h% v2 h
7 h3 o9 x- o1 p! V" D
NumberInClusters = zeros(ClusterNum,1); % 各类中的样本数,初始化为零 . v+ L; c7 G1 B( [: w( k0 f
IndexInClusters = zeros(ClusterNum,SamNum); % 各类所含样本的索引号
3 ~) ?$ W- ~: `5 W; C4 q6 nwhile 1,
& Z/ |3 z, S# ]NumberInClusters = zeros(ClusterNum,1); % 各类中的样本数,初始化为零 * H6 d2 R; v4 _) M$ C
IndexInClusters = zeros(ClusterNum,SamNum); % 各类所含样本的索引号
# s$ r! F' t$ W3 b5 N+ T# s6 \% D5 r5 ?- v( M$ L
% 按最小距离原则对所有样本进行分类 , `/ Y; ^, b( [3 O
for i = 1:SamNum 7 I& O9 N4 w2 J, n" o
AllDistance = dist(Centers',SamIn(:,i));
5 x: @1 Q' [6 C/ q: ~# O4 J[MinDist,Pos] = min(AllDistance); % Y4 X0 _: H1 O/ t% z, R
NumberInClusters(Pos) = NumberInClusters(Pos) + 1; 0 ~  f4 U; p: `; W
IndexInClusters(Pos,NumberInClusters(Pos)) = i; 2 P/ T* z3 O2 _! p; m
end
9 B  g" q  X0 G. Q0 l' J% 保存旧的聚类中心 % `- I0 y" a$ Q# ~2 C4 D
OldCenters = Centers;   d% x; J5 y" D/ D& u9 Z
& @: I5 Y- [" C: b" n, A- r8 [
for i = 1:ClusterNum
3 l) x8 v1 R* l  V6 hIndex = IndexInClusters(i,1:NumberInClusters(i)); / m* s$ t9 Z+ Q2 `# Z
Centers(:,i) = mean(SamIn(:,Index)')'; 3 N+ j# ?; r2 l6 f
end ( u8 i# t1 a- e* {  b
% 判断新旧聚类中心是否一致,是则结束聚类
( A, d2 F+ D: K2 p$ |1 V9 e5 ^, O- H. [) MEqualNum = sum(sum(Centers==OldCenters)); . U6 q; P. G8 [+ H& m3 _' t
if EqualNum == InDim*ClusterNum, 5 a* _" O! V6 [% c3 U/ `4 \
break,
5 f/ q- ^+ L# {end 1 S6 h) ^  \6 \4 @
end
6 p9 ]; F( r, B; E, j( g/ \* K7 ?! c1 ?9 b2 |! e1 a) ?: O
% 计算各隐节点的扩展常数(宽度) " ^% P0 \, m" \* _. j0 S
AllDistances = dist(Centers',Centers); % 计算隐节点数据中心间的距离(矩阵) $ c( z+ H- a9 q/ W. O6 S4 N- F" u
Maximum = max(max(AllDistances)); % 找出其中最大的一个距离
5 E% V" M& a9 Zfor i = 1:ClusterNum % 将对角线上的0 替换为较大的值
0 R4 [0 F, `) e- ^% ~4 CAllDistances(i,i) = Maximum+1; , \/ n. F! u" K1 |" J
end   |1 C# ^2 I0 f' E& [4 O* b# ]
Spreads = Overlap*min(AllDistances)'; % 以隐节点间的最小距离作为扩展常数
8 B% L) s/ ^. Y, J2 O. u
  q  e4 R) }; R+ U9 K" ~" I: v+ x/ c/ L% 计算各隐节点的输出权值
( W! x) N2 o- x( I: ?Distance = dist(Centers',SamIn); % 计算各样本输入离各数据中心的距离
6 Z6 P6 |0 D2 ~, x, eSpreadsMat = repmat(Spreads,1,SamNum);
. ]% r9 I4 \- c2 jHiddenUnitOut = radbas(Distance./SpreadsMat); % 计算隐节点输出阵
0 ]1 {1 z# k! I$ S& nHiddenUnitOutEx = [HiddenUnitOut' ones(SamNum,1)]'; % 考虑偏移 $ a8 g) y5 _4 f$ D/ e4 J4 }( e
W2Ex = SamOut*pinv(HiddenUnitOutEx); % 求广义输出权值 . p, x9 c- v! L$ B3 g
W2 = W2Ex(:,1:ClusterNum); % 输出权值 * S2 P0 `2 G$ R% ]. a8 B6 N
B2 = W2Ex(:,ClusterNum+1); % 偏移
: c' W. W, m$ A' Q$ y4 i" G  y! \' y6 ^- c+ h
% 测试 + M% K# A; s: l% H6 D0 n
TestDistance = dist(Centers',TestSamIn); ' c$ R/ K: |6 A8 Y
TestSpreadsMat = repmat(Spreads,1,TestSamNum);
  I& g# B' q- U2 }TestHiddenUnitOut = radbas(TestDistance./TestSpreadsMat);
: b7 l! r5 R  j" G5 sTestNNOut = W2*TestHiddenUnitOut+B2; 5 ~: ~: u( c" g( H, P4 i8 ?5 Y
plot(TestSamIn,TestNNOut,'b-')
0 ~8 [$ k- O* E. `) Z/ O( z4 j$ U; f$ ]W2 6 a3 M6 }, j3 Y5 K

; I9 p* l' H( M) @1 }) Y) N4 u/ w8 m: \9 W4 E1 g! g1 S
9 Y& o4 U+ u& F& l

- K# i0 z" G. |" z6 G! l* {- B* j& e$ z' y9 `  P
2 I/ O9 Z$ M$ O: A: K4 h1 S1 K2 h% W
游客,如果您要查看本帖隐藏内容请回复
/ u- Q7 W( m4 J! \

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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