Está en la página 1de 4

EJERCICIO PRACTICO SOM

Ejemplo 1.

En la tabla 1 se escriben los datos de una gama de carros usadas en la competencia. Los
tres primeros vehículos (V1, V2, V3) son denominados vehículos deportivos por sus
altas prestaciones. Los vehículos (V4, V5, V6) se pueden considerar de término medio y
los tres últimos (V7, V8, V9) son automóviles pequeños. La red neuronal se debe
entrenar para encontrar las características comunes entre cada un de ellos y encerrarlos
en una categoría.

Tabla 1. Características de los automóviles


Vehiculo Velocidad Color Resistencia Peso
[Km/h] al aire [kg]
V1 220 Rojo 0.30 1300
V2 230 Negro 0.32 1400
V3 260 Rojo 0.29 1500
V4 140 Gris 0.35 800
V5 155 Azul 0.33 950
V6 130 Blanco 0.40 600
V7 100 Negro 0.50 3000
V8 105 Rojo 0.60 2500
V9 110 Gris 0.55 3500

Se puede hacer una primera clasificación de acuerdo a la velocidad máxima y el peso


del automóvil. Los datos graficados se pueden ver en la figura 6.

Fig 6. Datos de carros de acuerdo al peso y velocidad máxima.


vel=[220 230 260 140 155 130 100 105 110];
peso=[1300 1400 1500 800 950 600 3000 2500 3500];
%creación del vector de entradas
in=[peso;vel];
%creación de la red neuronal
net=newsom([0 3500;0 1.0],[3],'hextop','linkdist',0.1,100,0.02,0.001);
%control de los parámetros de entrenamiento
net.trainParam.epochs = 100;
net.trainparam.goal=1e-8;
net=train(net,in);
plot(in(1,:),in(2,:),'.g','markersize',20)
hold on
plotsom(net.iw{1,1},net.layers{1}.distances)
hold off
La red neuronal fue capaz de clasificar los automóviles de acuerdo a la gráfica que
aparece en la figura 7.

Fig 7. Clasificación de los automóviles.

La forma de consultar a que categoría pertenece cada carro se puede escribir como:
cat=sim(net,[220;1300])
vec2ind(cat)

Hay que destacar que no se tiene control de como la red neuronal aprende, solo ella sabe
como ordena y agrupa en las categoría; algunas veces al volver a entrenar la red ella
cambia de categoría.

Procedimiento

- Partiendo del ejemplo 1, modifíquelo para que sea capaz de clasificar los carros
de acuerdo a los tres parámetros establecidos.
- La red neuronal siempre responde de la misma manera?
- Halle los pesos de la red neuronal.
- A partir de los pesos haga su propia red neuronal que responda de la misma
manera que la entrenada.

Ejemplo 2.

Una multinacional quiere colocar cuatro puntos de distribución de mercancía para


vender en los principales pueblos del magdalena medio y necesita saber que capital de
departamento le va a suministrar la materia prima. En este problema, no se necesita las
vías de acceso que hay entre las ciudades, porque la distribución se va a hacer por vía
aérea. En la tabla 2 aparecen las coordenadas de las principales ciudades; si ud necesita
ubicar más ciudades busque las coordenadas en cualquier versión de la enciclopedia
encarta.

Tabla 2. Coordenadas de las ciudades en el magdalena medio.


B/manga 7º07’ 73º07’ Barranca 7º04 73º51’
Medellín 6º14’ 75º35’ Pto wilches 7º20’ 73º54’
Cartagena 10º23’ 75º29’ Ocaña 8º14’ 73º21’
Barranquilla 10º58’ 74º47’ Aguachica 8º19’ 73º37
El banco 9º00’ 73º59’ Morales 8º16’ 73º52’
Pto berrio 6º28’ 74º25’

A continuación se va a mostrar el programa que se realizó para solucionar el problema


%coordenadas de las ciudades principales.
bmanga=[7+7/60 73+07/60];
medellin=[6+14/60 75+35/60];
cartagena=[10+23/60 75+29/60];
bquilla=[10+58/60 74+47/60];
%coordenadas de las ciudades a ubicar
brranca=[7+04/60 73+51/60];
pto_wilches=[7+20/60 73+54/60];
ocana=[8+14/60 73+21/60];
aguachica=[8+19/60 73+37/60];
morales=[8+16/60 73+52/60];
pto_berrio=[6+28/60 74+25/60];
el_banco=[9+00/60 73+59/60];
%creacion del vector de respuestas
ciudad=['cartag';...
'medell';...
'bmanga';...
'bquill'];
%creación de la red neuronal
net=newsom([-1 1;-1 1],[2,2],'gridtop','linkdist',1,1000,1,1);
%creación de las ciudades base
in=[bmanga' medellin' cartagena' bquilla'];
%[in,mnin,mxin]=premnmx(in);
%control de los parámetros de entrenamiento
net.trainParam.epochs = 500;
net.trainparam.goal=1e-8;
net=train(net,in);
%aqui empieza donde se ubica la ciudad
plot(in(1,:),in(2,:),'.g','markersize',20)
grid
hold on
plotsom(net.iw{1,1},net.layers{1}.distances)
%axis([0 3500 0 500])
%consulta de las ciudades a repartir
ciud=brranca;
%ciud=tramnmx(ciud',mnin,mxin);
cer=sim(net,ciud')
full(cer)
plot(ciud(1),ciud(2),'.m','markersize',20)
text(in(1,1),in(2,1),'B/manga')
text(in(1,2),in(2,2),'Medellin')
text(in(1,3),in(2,3),'Cartagena')
text(in(1,4),in(2,4),'B/quilla')
title(sprintf('la ciudad mas cerca es: %6s',ciudad(vec2ind(cer),:)))
hold off

Procedimiento:
- Ubíquese en un mapa y vea si las coordenadas corresponden con la ubicación de
las ciudades.
- Haga coincidir la ubicación de las ciudades con un mapa cualquiera.
- Entrene la red neuronal para que aprenda las ciudades, cambie Función
topológica, Función de distancia, rata de aprendizaje de la fase de
ordenamiento, pasos en la etapa de ordenamiento, rata de aprendizaje de la fase
de sintonización, distancia del vecindario en la etapa de sintonización.
- Si la red no entrena trate de normalizar las entradas con el comando
[in,mnin,mxin]=premnmx(in);
- Una vez entrenada la red consulte varias ciudades para ver como responde la
red.
- Si la red responde mal normaliza las entradas con el comando
ciud=tramnmx(ciud',mnin,mxin);
- Consulte varias ciudades sin entrenar la red, describa como responde la red.
- Consulte varias ciudades entrenando la red cada vez que se haga una consulta,
describa como responde la red.
- Modifique el programa para que la ciudad ubicada en el plano corresponda con
la ciudad más cercana.

También podría gustarte