Práctica 2: Perceptron de una capa

Contenido

Descripción de la práctica

Se revisa una publicación (html) de la práctica. En este caso inicie indicando el nombre de la práctica y sus datos personales, equipos de 3 a 5 personas (Portada). Posteriormente, el índice, desspúes los objetivos, que son los sigueintes:
Para la introducción revisa el siguiente articulo:
F. Rosenblatt, “The perceptron: A probabilistic model for information storage and organization in the brain,” Psycho- logical Review, Vol. 65, pp. 386–408, 1958.
Y elabora un resumen del contenido de forma que se indique:
  1. Cual es el tema abordado
  2. El planteamiento y solución del problema expuesto
  3. Una breve conclusión de las similitudes y diferencias respecto a lo que ahora sabes sobre el perceptrón

Problemas

Para el desarrollo se tienen que resolver cada uno de los siguientes problemas comenzando una nueva sección en cada uno de ellos.

Problema 1

Elabore una función que entrene un perceptron de 1 capa y S neuronas. Para ello considere lo siguiente:
El numeró de neuronas debe de elegirse de acuerdo a la dimensión t (¿por qué?)
Puede iniciaizar los parámetros con numeros aleatorios pequeños incluso pueden ser cero.
El programa debe deternerse de acuerdo a diferentes criterios:
- Se logro el entrenamiento antes del numero de epocas indicado, se indica que esto ocurre
- Se alcanzo el número de epocas ingresado, se debe indicar si con esta selección se logro o no el entrenamiento
- Se logro la tolerancia indicada (en caso de ser ingresada). Es decir, si
donde la resta es entre los parametros estimados en la epoca i e , con la norma usual (aunque algunos algortimos utilizan la norma infinito, puedes implementar esta en lugar de la norma 2, si así lo deseas). Se despliega un menaje para indicar que esto ocurrio
Se entrega el programa, utiizando la herramienta insert >> Code Example

Problema 2

Elabore una función para clasificar vectores en con las siguientes características
Proponga un problema de clasificación con 8 clases, que sea linealmente separable, donde cada clase tenga dos vectores asociados para el entrenamiento.
Prube su función con este problema.
Se entrega el resultado, y el enlace a un video (o se inserta el video) para ver la aplicación.

Problema 3

Resuelva el problema 2 para clasificar vectores en .
En el cápitulo 3 de Hagan hay un ejemplo de aplicación, páginas 3-1 a 3-6. Con esta idea, aplica la solución de ente probelma para clasificar naranjas y manzanas. Considera que los vectores de manzanas, están en el I octante, y los de naranjas en el III octante. Propon 2 entradas para cada clase.
Se entrega el resultado, y el enlace a un video (o se inserta el video) para ver la aplicación.
La GUI del problema de naranjas y manzanas
nnd3pc

Problema 4

Se muestran los siguiente códigos en MATLAB
Clasificación, dos clases en
Creamos datos de entrenamiento de forma artificial
close all, clear all, clc, format compact
% numero de puntos para cada clase
N = 20;
% definición aritficial de entradas y salidas
offset = 5; % separación para las clases
x = [randn(2,N) randn(2,N)+offset]; % entradas
y = [zeros(1,N) ones(1,N)]; % salidas
% Gráfica de entradas con PLOTPV (gráfica vectores para perceptron entradas/salidas)
figure
plotpv(x,y)
Definición de la red y entrenamiento
net = perceptron(); % perceptron vacio
view(net) % esquema de topologia de red, tipo Hagan
net.trainParam.showWindow = 0; % no muestra el cuadro de dialogo del entrenamiento
net_trained = train(net,x,y); % entreanmos la red y guardamos la red entrenada
view(net_trained) % esquema de topologia de red entrenada, tipo Hagan
Gráfica de frontera de desición
hold on
plotpc(net_trained.IW{1},net_trained.b{1}); % función para impeme
Clasificación, cuatro clases en
close all, clear all, clc, format compact
% numero de muestras en cada clase
K = 30;
% definición de las clases
q = .6; % separación de la clases
A = [rand(1,K)-q; rand(1,K)+q];
B = [rand(1,K)+q; rand(1,K)+q];
C = [rand(1,K)+q; rand(1,K)-q];
D = [rand(1,K)-q; rand(1,K)-q];
figure(1); % no queremos repetir este codigo
figure(2); % creamso dos figura para copiar en contenido
figure(1) % activamos la figura 1
% graficamos clases
plot(A(1,:),A(2,:),'bs');
hold on
grid on
plot(B(1,:),B(2,:),'r+')
plot(C(1,:),C(2,:),'go')
plot(D(1,:),D(2,:),'m*')
% texto de las clases
text(.5-q,.5+2*q,'Clase A')
text(.5+q,.5+2*q,'Clase B')
text(.5+q,.5-2*q,'Clase C')
text(.5-q,.5-2*q,'Clase D')
% se definenen las salidas para las clases
a = [0 1]';
b = [1 1]';
c = [1 0]';
d = [0 0]';
% % ¿por qué estas salidas no funcionan?
% a = [0 0]';
% b = [1 1]';
% d = [0 1]';
% c = [1 0]';
% % ¿por qué estas salidas no funcionan?
% a = [0 1]';
% b = [1 1]';
% d = [1 0]';
% c = [0 1]';
CloneFig(1,2) % copiamos la figura 1 a la figura 2
Entradas y salidas
% definen las entradas (combinación para las cuatro clases)
P = [A B C D];
% definen las salidas
T = [repmat(a,1,length(A)) repmat(b,1,length(B)) ...
repmat(c,1,length(C)) repmat(d,1,length(D)) ];
%plotpv(P,T);
% aquí sería bueno imprimir P y T para menos estradas, para apreciar como
% se deben concatenar los valores
Se crea el perceptron y se entrena
net = perceptron;
net.trainParam.showWindow = 0;
net_trained = train(net,P,T);
view(net_trained)
Gráficamos la frontera de desición
figure(1) % activamos la figura 1
plotpc(net_trained.IW{1},net_trained.b{1});
Se resuleve nuevamente el problema epoca por epoca
net = perceptron;
E = 1;
figure(2) % activamoos la figira dos que tiene solo la gráfica de los datos
net.adaptParam.passes = 1; % epocas de adaptación
ax2 = plotpc(net.IW{1},net.b{1});
n = 0;
while (sse(E) & n<1000)
n = n+1;
[net,Y,E] = adapt(net,P,T); % regresla la red entrenada, el valor de las salidas, los errores
ax2 = plotpc(net.IW{1},net.b{1},ax2);
drawnow; % efecto de simulación
end
view(net)
Se entrega el desarrollo del ejemplo del problema 2 y el desarroolo del ejemplo de de problema 3 con las herramientas antes descritas.
No es necesario incluir conclusiones, no olvides anotar tus referencias

Referencias

Libro de Matin Hagan et. al. enlace
Implemenatción de perceptron con MATLAB, enlace
Función para clonar figuras enlace

Funciones utilizadas

function CloneFig(inFigNum,OutFigNum)
% this program copies a figure to another figure
% example: CloneFig(1,4) would copy Fig. 1 to Fig. 4
% Matt Fetterman, 2009
% pretty much taken from Matlab Technical solutions:
% http://www.mathworks.com/support/solutions/en/data/1-1UTBOL/?solution=1-1UTBOL
hf1=figure(inFigNum);
hf2=figure(OutFigNum);
clf;
compCopy(hf1,hf2);
function compCopy(op, np)
%COMPCOPY copies a figure object represented by "op" and its % descendants to another figure "np" preserving the same hierarchy.
ch = get(op, 'children');
if ~isempty(ch)
nh = copyobj(ch,np);
for k = 1:length(ch)
compCopy(ch(k),nh(k));
end
end
end
end