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

七个RBF神经网络的源程序

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
: F1 ?6 L% q" _, o( N3 {
RBF_cluster:
( V: T0 K) G9 W/ V  G
( f+ T7 A' l+ H* ]) p# x
0 P2 r* S0 B, `0 I% 1.基于聚类的RBF 网设计算法 ; M% v7 t* F' O
% 一维输入,一维输出,逼近效果很好! + ?* V! L  Y# @; n; Q+ Y
SamNum = 100; % 总样本数   R# n$ ]' i% O' _9 W" v- N) O' e
TestSamNum = 101; % 测试样本数
8 w9 J' f" K+ S, ^( SInDim = 1; % 样本输入维数
, {( }. q' j8 }ClusterNum = 10; % 隐节点数,即聚类样本数 $ g' T3 J8 y/ {+ n
Overlap = 1.0; % 隐节点重叠系数 - Q4 U1 ^1 }+ X
7 |: f4 U" m- f6 Q  r) N9 D! {) x6 v
% 根据目标函数获得样本输入输出
$ T3 p# p, |/ u2 `) @rand('state',sum(100*clock)) ! k* [1 ~7 p  ~: K, m
NoiseVar = 0.1;
. z$ l7 ~9 O4 iNoise = NoiseVar*randn(1,SamNum);
  J, h, y3 M. i+ iSamIn = 8*rand(1,SamNum)-4;
( S2 i2 [0 K. y( {4 aSamOutNoNoise = 1.1*(1-SamIn+2*SamIn.^2).*exp(-SamIn.^2/2);
4 x- w" S6 n% J3 uSamOut = SamOutNoNoise + Noise;
, T% }! d3 c  S& l) b4 i  M
8 _1 |5 f$ G" ?6 s$ x7 ?TestSamIn = -4:0.08:4;
0 }! a9 p) k( y, M: w' R$ B2 B& pTestSamOut = 1.1*(1-TestSamIn+2*TestSamIn.^2).*exp(-TestSamIn.^2/2);
3 ~/ g: S! n' R) {7 Z! P
& P5 a/ U" X& N: K( M; |figure
/ k+ ~; a* y* K' N* }hold on / U9 f5 u5 a1 {' c. Y
grid
. a, L8 h+ i8 j! v9 d6 nplot(SamIn,SamOut,'k+')
& h5 p- s: c, R5 e  a$ e: yplot(TestSamIn,TestSamOut,'r--')
8 c; X2 O! @; w3 r5 Ixlabel('Input x'); ! e- A  v3 O' w
ylabel('Output y'); 2 W. V& ^4 F  f9 r! O. H
: I* [  X2 Y6 X, n
Centers = SamIn(:,1:ClusterNum);
/ \( m1 U. ?3 O
3 P- D3 a/ r! e& e3 O5 INumberInClusters = zeros(ClusterNum,1); % 各类中的样本数,初始化为零 2 z5 s: G3 a8 [7 ~( _$ R
IndexInClusters = zeros(ClusterNum,SamNum); % 各类所含样本的索引号
8 p. q( i. N8 N  ^while 1,
5 L% l5 F; o# ]0 NNumberInClusters = zeros(ClusterNum,1); % 各类中的样本数,初始化为零 : o* Z8 t5 K4 w" I5 k
IndexInClusters = zeros(ClusterNum,SamNum); % 各类所含样本的索引号
9 F; ]2 w: g0 j. O) Y
# O+ v  b, ^, p$ B; q0 A2 w% 按最小距离原则对所有样本进行分类 / y* n* F4 o2 r* e
for i = 1:SamNum : P1 m& m( {" R6 R! X$ N* `  t" j7 j
AllDistance = dist(Centers',SamIn(:,i)); ' z& \3 c, |9 W7 ?% ]
[MinDist,Pos] = min(AllDistance);
, h" M/ @% t* k: a. ]# z' y- X  oNumberInClusters(Pos) = NumberInClusters(Pos) + 1; 5 A! m8 d7 R# {8 B2 k+ J* `
IndexInClusters(Pos,NumberInClusters(Pos)) = i; / l4 F# I) `; V! t; n1 z) }
end
* d3 L. y) S' r% \; v" g2 d/ D3 C- x% 保存旧的聚类中心 2 j. H, f( X8 _
OldCenters = Centers; ) n. D& k" a4 C: T/ r9 W' O
2 K3 E8 H1 r2 \1 s
for i = 1:ClusterNum 6 a- b1 M# z0 Q% c; L
Index = IndexInClusters(i,1:NumberInClusters(i)); 5 h% B: v- Z" I( ~0 |' @2 }
Centers(:,i) = mean(SamIn(:,Index)')';
2 S* K; Q2 f4 v: R5 X# Kend
6 {. G/ l# m% Z8 A/ `% 判断新旧聚类中心是否一致,是则结束聚类 % r7 Q  K+ h3 A; O
EqualNum = sum(sum(Centers==OldCenters)); - G( V* ]8 S8 g+ ~+ x+ A; y
if EqualNum == InDim*ClusterNum,
2 Z7 D, V% U1 P" b- X0 M7 ?break,
2 J1 G0 ?) {7 e6 x# lend 4 \; a  s1 u7 k  I
end / H* k; m/ l) }4 T. T
! ]( T) ]6 T( S# T+ S* g
% 计算各隐节点的扩展常数(宽度)
3 @& B1 |! f8 e: X3 \AllDistances = dist(Centers',Centers); % 计算隐节点数据中心间的距离(矩阵)
2 F' N$ f; @* r/ L; ~Maximum = max(max(AllDistances)); % 找出其中最大的一个距离
4 v" a  P& W' s  l: k; g. hfor i = 1:ClusterNum % 将对角线上的0 替换为较大的值 ( r" I5 Z- G9 J- a1 B" B+ `
AllDistances(i,i) = Maximum+1;
* w' i8 w) n3 ~- \end % @: }, S& F2 }8 [+ Q6 R& i& Y
Spreads = Overlap*min(AllDistances)'; % 以隐节点间的最小距离作为扩展常数
$ |% v3 a7 |/ |+ e% a+ s: q! u5 R1 o
5 p: x7 {; z2 y4 h6 @* w% 计算各隐节点的输出权值
& |; u5 ~; J) r0 k! qDistance = dist(Centers',SamIn); % 计算各样本输入离各数据中心的距离 ; K/ F  G3 B7 k; B; {  f! I+ Q
SpreadsMat = repmat(Spreads,1,SamNum);
6 m  n" ^/ w9 z; aHiddenUnitOut = radbas(Distance./SpreadsMat); % 计算隐节点输出阵
$ z" T+ b2 m0 ?) O0 c. p6 }/ X# {+ PHiddenUnitOutEx = [HiddenUnitOut' ones(SamNum,1)]'; % 考虑偏移
  {; `& ?' W$ e. Z& [W2Ex = SamOut*pinv(HiddenUnitOutEx); % 求广义输出权值 . r7 a5 h* b0 m# p3 p  ^
W2 = W2Ex(:,1:ClusterNum); % 输出权值 # ]7 \: Z( q. [# G9 @) `* F
B2 = W2Ex(:,ClusterNum+1); % 偏移
  M/ O3 v+ {/ y- Z7 `0 J; P5 |0 b
( A9 I5 C* c8 e! @  y% 测试 8 U* |1 V( X8 w4 B! a
TestDistance = dist(Centers',TestSamIn);
4 Z( i$ m4 }6 q1 T+ fTestSpreadsMat = repmat(Spreads,1,TestSamNum); " z2 ~1 ?# G! m; |
TestHiddenUnitOut = radbas(TestDistance./TestSpreadsMat);
) Z( x: D! W, ~TestNNOut = W2*TestHiddenUnitOut+B2;
9 O, q$ ]& q+ p: O* `; s- \/ |0 g& G* _plot(TestSamIn,TestNNOut,'b-') . S4 _8 D- _! I# I
W2 1 a+ c# J4 |0 ]. G, T2 j

; R3 ]: t3 H( M9 v; Q
" R5 X$ J* K9 X/ `7 r& N8 Z# Y0 U; d) n7 D1 q& Z
/ ]' @6 f" V3 k7 g1 `

' H& ?* ]$ D) q% \
: Q8 f, h5 ~0 f/ d) L0 X: r4 _
游客,如果您要查看本帖隐藏内容请回复
- v( |% ?) {* O% K# u) W

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-24 01:41 , Processed in 0.171875 second(s), 27 queries , Gzip On.

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

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

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