Радиальное базисное приближение

Этот пример использует функцию 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 точке данных. Один способ сделать это с радиальной базисной сетью. Радиальная базисная сеть является сетью с двумя слоями. Скрытый слой радиальных базисных нейронов и выходной слой линейных нейронов. Вот радиальная базисная передаточная функция, используемая скрытым слоем.

x = -3:.1:3;
a = radbas(x);
plot(x,a)
title('Radial Basis Transfer Function');
xlabel('Input p');
ylabel('Output a');

Веса и смещения каждого нейрона в скрытом слое задают положение и ширину радиальной основной функции. Каждый линейный выходной нейрон формирует взвешенную сумму этих радиальных основных функций. С правильным весом и значениями смещения для каждого слоя и достаточными скрытыми нейронами, радиальная базисная сеть может соответствовать любой функции любой желаемой точностью. Это - пример трех радиальных основных функций (в синем), масштабируются и суммируются, чтобы произвести функцию (в пурпурном).

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 берет два аргумента, цель квадратичной невязки суммы и постоянное распространение.

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'})