Redes de base radial

Contenido

Problema 17.1

P17_1.png
Solución:
clear vars
syms p
g(p) = cos(pi*p);
pt = [-1,-0.5,0,0.5,1];
t = eval(g(pt))';
fplot(g(p),[-1.5,1.5])
ax = gca;
ax.XAxisLocation = "origin";
ax.YAxisLocation = "origin";
ax.Box = "off";
hold on
plot(pt,t,'or')
W = pt % 5 centros
W = 1×5
-1.0000 -0.5000 0 0.5000 1.0000
b = ones(1,5)
b = 1×5
1 1 1 1 1
n1 = vecnorm(W-pt(1),2,1)*b(1)
n1 = 1×5
0 0.5000 1.0000 1.5000 2.0000
a1 = radbas(n1)'
a1 = 5×1
1.0000 0.7788 0.3679 0.1054 0.0183
n2 = vecnorm(W-pt(2),2,1)*b(2);
a2 = radbas(n2)';
n3 = vecnorm(W-pt(3),2,1)*b(3);
a3 = radbas(n3)';
n4 = vecnorm(W-pt(4),2,1)*b(4);
a4 = radbas(n4)';
n5 = vecnorm(W-pt(5),2,1)*b(5);
a5 = radbas(n5)';
a = [a1 a2 a3 a4 a5]
a = 5×5
1.0000 0.7788 0.3679 0.1054 0.0183 0.7788 1.0000 0.7788 0.3679 0.1054 0.3679 0.7788 1.0000 0.7788 0.3679 0.1054 0.3679 0.7788 1.0000 0.7788 0.0183 0.1054 0.3679 0.7788 1.0000
z1 = [a1;1];
z2 = [a2;1];
z3 = [a3;1];
z4 = [a4;1];
z5 = [a5;1];
U = [z1';z2';z3';z4';z5']
U = 5×6
1.0000 0.7788 0.3679 0.1054 0.0183 1.0000 0.7788 1.0000 0.7788 0.3679 0.1054 1.0000 0.3679 0.7788 1.0000 0.7788 0.3679 1.0000 0.1054 0.3679 0.7788 1.0000 0.7788 1.0000 0.0183 0.1054 0.3679 0.7788 1.0000 1.0000
% paso i)
m1_s1 = U(:,1);
m1_s2 = U(:,2);
m1_s3 = U(:,3);
m1_s4 = U(:,4);
m1_s5 = U(:,5);
m1_s6 = U(:,6);
% paso ii)
h1_s1 = (m1_s1'*t) / (m1_s1'*m1_s1);
h1_s2 = (m1_s2'*t) / (m1_s2'*m1_s2);
h1_s3 = (m1_s3'*t) / (m1_s3'*m1_s3);
h1_s4 = (m1_s4'*t) / (m1_s4'*m1_s4);
h1_s5 = (m1_s5'*t) / (m1_s5'*m1_s5);
h1_s6 = (m1_s6'*t) / (m1_s6'*m1_s6);
% paso iii)
o1_s1 = (h1_s1)^2 * m1_s1' * m1_s1 / (t'*t);
o1_s2 = (h1_s2)^2 * m1_s2' * m1_s2 / (t'*t);
o1_s3 = (h1_s3)^2 * m1_s3' * m1_s3 / (t'*t);
o1_s4 = (h1_s4)^2 * m1_s4' * m1_s4 / (t'*t);
o1_s5 = (h1_s5)^2 * m1_s5' * m1_s5 / (t'*t);
o1_s6 = (h1_s6)^2 * m1_s6' * m1_s6 / (t'*t);
% paso iv)
[ma,i]= max([o1_s1 o1_s2 o1_s3 o1_s4 o1_s5 o1_s6])
ma = 0.0804
i = 1
% paso v)
m1 = m1_s1; % el primer vector
% paso vi)
% para i = 2,3,4,5,6 k = 2, i \neq 1 (cuidado en el libro)
% rjk_si , j = 1,2
r12_s2 = m1'* U(:,2) / (m1'*m1);
r12_s3 = m1'* U(:,3) / (m1'*m1);
r12_s4 = m1'* U(:,4) / (m1'*m1);
r12_s5 = m1'* U(:,5) / (m1'*m1);
r12_s6 = m1'* U(:,6) / (m1'*m1);
% paso vii)
m2_s2 = U(:,2)-r12_s2*m1;
m2_s3 = U(:,3)-r12_s3*m1;
m2_s4 = U(:,4)-r12_s4*m1;
m2_s5 = U(:,5)-r12_s5*m1;
m2_s6 = U(:,6)-r12_s6*m1;
% paso viii)
h2_s2 = m2_s2'*t / (m2_s2'*m2_s2);
h2_s3 = m2_s3'*t / (m2_s3'*m2_s3);
h2_s4 = m2_s4'*t / (m2_s4'*m2_s4);
h2_s5 = m2_s5'*t / (m2_s5'*m2_s5);
h2_s6 = m2_s6'*t / (m2_s6'*m2_s6);
% paso ix)
o2_s2 = (h2_s2)^2 * m2_s2'*m2_s2 / (t'*t);
o2_s3 = (h2_s3)^2 * m2_s3'*m2_s3 / (t'*t);
o2_s4 = (h2_s4)^2 * m2_s4'*m2_s4 / (t'*t);
o2_s5 = (h2_s5)^2 * m2_s5'*m2_s5 / (t'*t);
o2_s6 = (h2_s6)^2 * m2_s6'*m2_s6 / (t'*t);
% paso x)
[ma, i] = max([o2_s2 o2_s3 o2_s4 o2_s5 o2_s6])
ma = 0.3526
i = 1
r12 = r12_s2;
% paso xi)
m2 = m2_s2;
Trabajo de 1991 donde se puede observar el algoritmo (otra notación)

Problema 17.2

P17_2.png
Solución
% Se eligen los centro de en las clases tipo negro
W = [1 1;2.5 2.5]
W = 2×2
1.0000 1.0000 2.5000 2.5000
% de acuerdo a la geometria
b = [1 2]'
b = 2×1
1 2
% para estos datos, entradas a una unidad y a 0.5 undades de distancia
a = exp(-(b(1)*1))
a = 0.3679
a = exp(-(b(2)*0.5))
a = 0.3679
% revisando los rangos, además de dos calses
W2 = [2 2] ;
b2 = -1;
syms p1 p2
resta = [p1 p2;p1 p2]-W
resta = 
cua = resta.^2
cua = 
norma = sqrt(sum(cua,2))
norma = 
n1 = norma .* b
n1 = 
a1 = radbas(n1)
a1 = 
a2(p1,p2) = W2*a1 + b2
a2(p1, p2) = 
figure
fmesh(a2,[0 4 0 4])
view([-16.93 50.32])
P17_2_1.png

Problema 17.3

P17_3.png
Solución
Se propaga la entrada sobre la red
Se retropropagan las sensibilidades
Se actualizan los parámetros

App

Las aplicaciones de este capítulo no son compatibles con la instalación nativa de nnd, el capítulo 17 es un capítulo nuevo en la edición 2. Se puede intentar ejecutar en Python (se recimienda un ambiente independiente).

Referencias

El material se toma del libro de Martin Hagan et. al. enlace