このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
放射基底近似
この例では、関数 NEWRB を使用して、一連のデータ点によって定義された関数を近似する、放射基底ネットワークを作成します。
21 個の入力 P および関連付けられたターゲット T を定義します。
X = -1:.1:1; T = [-.9602 -.5770 -.0729 .3771 .6405 .6600 .4609 ... .1336 -.2013 -.4344 -.5000 -.3930 -.1647 .0988 ... .3072 .3960 .3449 .1816 -.0312 -.2189 -.3201]; plot(X,T,'+'); title('Training Vectors'); xlabel('Input Vector P'); ylabel('Target Vector T');
21 個のデータ点に当てはまる関数を見つけましょう。これを行う 1 つの方法は、放射基底ネットワークを使うことです。放射基底ネットワークは、2 つの層で構成されるネットワークです。放射基底ニューロンの隠れ層と、線形ニューロンの出力層があります。次に、隠れ層によって使用される放射基底伝達関数を示します。
x = -3:.1:3; a = radbas(x); plot(x,a) title('Radial Basis Transfer Function'); xlabel('Input p'); ylabel('Output a');
隠れ層の各ニューロンの重みとバイアスによって、放射基底関数の位置および幅が定義されます。各線形出力ニューロンは、これらの放射基底関数の重み付き和を形成します。各層の重みとバイアスの値が正しく、隠れニューロンが十分にある場合、放射基底ネットワークはどの関数にも任意の精度で当てはめることができます。この例では、3 つの放射基底関数 (青で表示) がスケーリングおよび合計され、関数 (マゼンタで表示) が生成されます。
a2 = radbas(x-1.5); a3 = radbas(x+2); a4 = a + a2*1 + a3*0.5; plot(x,a,'b-',x,a2,'b--',x,a3,'b--',x,a4,'m-') title('Weighted Sum of Radial Basis Transfer Functions'); xlabel('Input p'); ylabel('Output a');
関数 NEWRB によってすぐに、P および T によって定義される関数を近似する放射基底ネットワークが作成されます。NEWRB は、学習セットおよびターゲットに加えて、残差平方和の目標値と広がり定数の 2 つの引数を取ります。
eg = 0.02; % sum-squared error goal sc = 1; % spread constant net = newrb(X,T,eg,sc);
NEWRB, neurons = 0, MSE = 0.176192
ネットワーク性能を確認するには、学習セットを再プロットします。次に、同じ範囲の入力に対するネットワーク応答のシミュレーションを行います。最後に、同じグラフに結果をプロットします。
plot(X,T,'+'); xlabel('Input'); X = -1:.01:1; Y = net(X); hold on; plot(X,Y); hold off; legend({'Target','Output'})