Вы находитесь на странице: 1из 14

Algoritmo del vecino ms cercano aplicado a la web Filmaffinity.

com
Filippo Chieco
Ingeniera Espacial Sapienza Universit di Roma Universidad Carlos III de Madrid Av. de la Universidad, 30 28911 Legans (Madrid) Estudiante Erasmus

Carlos Prez Prez


Ingeniera Telecomunicaciones Universidad de Las Palmas de G.C. Universidad Carlos III de Madrid Av. de la Universidad, 30 28911 Legans (Madrid) Estudiante Sneca

Joana Rodrguez Luque


Ingeniera Tcnica Industrial (Electrnica Industrial) Universidad Carlos III de Madrid Av. de la Universidad, 30 28911 Legans (Madrid)

100281600@alumnos.uc3m.es

100286490@alumnos.uc3m.es 100049911@alumnos.uc3m.es

RESUMEN
Algoritmo del vecino ms cercano aplicado a la web filmaffinity.com para ver la compatibilidad de los gustos cinematograficos.

ensayos y errores, de los perodos de reposo tras los cuales se aceleran los progresos, etc. Muestran tambin la ltima relacin del aprendizaje con los reflejos condicionados. La idea del aprendizaje consiste en utilizar las percepciones no slo para actuar, sino tambin para mejorar la habilidad del agente para actuar en el futuro. El aprendizaje entra en juego cuando el agente observa sus interacciones con el mundo y sus procesos de toma de decisiones. Puede ir desde la trivial memorizacin de las experiencias, hasta la creacin de teoras cientficas.

Trminos generales
Algoritmo, factores humanos, realizable

Palabras clave
Aprendizaje, algoritmo k-nn, aprendizaje inductivo supervisado, vecino ms cercano.

2. FORMAS DE APRENDIZAJE
Un agente de aprendizaje puede ser diseado con un elemento de accin, que decide qu acciones llevar a cabo y con un elemento de aprendizaje, que modifica el elemento de accin para poder tomar memore decisiones. Los investigadores en el campo del aprendizaje han creado una gran variedad de elementos de aprendizaje. El diseo de un elemento de aprendizaje se va afectado mayoritariamente por tres aspectos: Qu componentes del elemento de accin tienen que aprenderse Qu realimentacin est disponibile para aprender dichos componentes. Qu tipo de representacin se usa para los componentes. A continuacin se van a analizar cada uno de estos aspectos. Existen mucca formas de construir el elemento de accin de un agente. Los components de estos agentes incluyen los siguente: 1. 2. 3. Una proyeccin directa de las condiciones del estado actual a las acciones. Un mtodo para inferir las propiedades relevantes del mundo a partir de una secuencia de percepciones. Informacin sobre cmo evoluciona el mundo y sobre los resultados de las posibles acciones que el agente puede llevar a cabo.

1. INTRODUCCIN
El aprendizaje es el proceso a travs del cual se adquieren nuevas habilidades, destrezas, conocimientos, conductas o valores como resultado del estudio, la experiencia, la instruccin, el razonamiento y la observacin. Este proceso puede ser analizado desde distintas perspectivas, por lo que existen distintas teoras del aprendizaje. El aprendizaje es una de las funciones mentales ms importantes en humanos, animales y sistemas artificiales. El aprendizaje humano est relacionado con la educacin y el desarrollo personal. Debe estar orientado adecuadamente y es favorecido cuando el individuo est motivado. El estudio acerca de cmo aprender interesa a la neuropsicologa, la psicologa educacional y la pedagoga. El aprendizaje como establecimiento de nuevas relaciones temporales entre un ser y su medio ambiental ha sido objeto de diversos estudios empricos, realizados tanto en animales como en el hombre. Midiendo los progresos conseguidos en cierto tiempo se obtienen las curvas de aprendizaje, que muestran la importancia de la repeticin de algunas predisposiciones fisiolgicas, de los

4. 5. 6.

Informacin de utilidad, que indica los deseables que son los estrado. Informacin accin-valor, que indica los deseables que son las acciones. Metas que describen las clases de estados que maximizan la utilidad del agente.

Cada uno de estos componentes puede aprenderse con una realimentacin apropiada. Consideremos, por ejemplo, un agente enrtenndose para convertirse en un taxista. Cada vez que el instructor grite Frene!, el agente puede aprender una regla condicin-accin que le indique cundo frenar (componente 1). Informando el agente de que certa imgenes de cmaras contienen autobuses, puede aprender a reconocerlo (2). Realizando acciones y observando sus resultados (por ejemplo frenar bruscamenteen pavimento mojado) puede aprender las consecuencias de sus acciones (3). Adems, si no recibe propina de pasajeros tras una conduccin brusca, puede aprender una componente til de su funcin de utilidad (4). El tipo de realimentacin disponible para el aprendizaje normalmente es el factor ms importante a la hora de determinar la naturaleza del problema de aprendizaje que tiene que afrontar el agente. Se distinguen tres distintos tipos de aprendizaje: supervisado, no supervisado y por refuerzo.

Figura 1. Estructura del aprendizaje supervisado (a) y no supervisado (b). En el aprendizaje supervisado hay un conjunto de observaciones, llamado inputs, que genera un otro conjunto de observaciones, llamado outputs. En el aprendizaje no supervisado todas las observaciones son generado de un conjunto de variables latentes.

2.2

Aprendizaje no supervisado

2.1 Aprendizaje supervisado


El problema de aprendizaje supervisado consiste en aprender una funcin a partir de ejemplos de sus entradas y sus salidas. Los casos (1), (2) y (3) son ejemplos de problemas de aprendizaje supervisado. En el caso (1) el agente aprende la regla condicinaccin para frenar, esto es, una funcin que a partir del estado genera una salida booleana (frenar o no frenar). En el caso (2), el agente aprende una funcin que a partir de una imagen genera una salida booleana (si la imagen contiene o no un autobs). En el caso (3), aprende una funcin que a partir del estado y las acciones para frenar, genera la distancia de parada expresada en pies. Ntese que tanto en los casos (1) y (2), un profesor suministra el valor correcto de la salida de cada ejemplo; en el tercero, el valor de la salida proviene de lo que el agente percibe. En entorno totalmente observables, el agente siempre puede observar los efectos de sus acciones, y por lo tanto, puede utilizar metdos de aprendizaje supervisado para aprender a predecirlos. En entornos que son parcialmente observables, el problema es ms difcil, ya que los efectos ms inmediatos pueden ser invisibles.

El problema de aprendizaje no supervisado consiste en aprender a partir de patrones de entradas para los que no se especifican los valores de sus salidas. Por ejemplo, un agente taxista debera desarrollar gradualmente los conceptos de das de trfico bueno y de das de trfico malo, sin que le hayan sido dados ejemplos etiquetados de ello. Un agente de aprendizaje supervisado puro no puede aprender que hacer, porque no tiene informacin de lo que es una accin correcta o un estado deseable. Principalmente se estudia el aprendizaje no supervisado en el contexto de los sistemas de razionamento probabilstico.

Figura 2. El aprendizaje no supervisado se puede usar para colmar la distancia entre las observaciones de los inputs y de los outputs. Las variables latentes del nivel de arriba generan ambas las observaciones y median la dependencia entre inputs y outputs.

2.3

Aprendizaje por refuerzo

El problema de aprendizaje por refuerzo, es el ms general de la tres categoras. En vez de que un profesor indique al agente qu hacer, el agente de aprendizaje por refuerzo debe aprender a partir del refuerzo. Por ejemplo, la falta de propina al final del viaje (o una gran factura por golpear la parte trasera del coche de delante) da al agente algunas indicaciones de que su comportamento no es el deseable. El aprendizaje por refuerzo tpicamente incluye el subproblema de aprender cmo se comporta el entorno. El factor ms importante en el diseo de sistemas de aprendizaje es la disponibilidad de conocimiento a priori. La mayora de los investigadores de apredizaje en IA, ingeniera informtica, y psicologa han estudiado el caso en el que el agente comienza sin informacin sobre lo que est intentendo aprender. Slo tiene acceso a los ejemplos de sus experiencias. Aunque es un caso importante, no es por trmino medio el caso ms general. La mayora del aprendizaje humano tiene lugar en un contexto con bastante conocimiento de base. Algunos psiclogos y linguistas reinvendican que incluso los nios recin nacidos poseen conocimiento del mundo. Verdad o no, no hay duda de que el conocimiento previo puede ayudar en gran medida en el aprendizaje. Un fsico examinando una pila de fotografas de una cmera de burbujas (bubble-chamber), podra ser capaz de inferir una teora que afirmara la existencia de una nueva partcula con una cietra masa y una cierta carga; sin embargo un crtico de arte que examina la misma pila podra aprender nicamente que el artista debe pertenecer a alguna clase de impresionismo abstracto.

aproximarla. Siendo ms formales, se dice que un ejemplo es un par (x, f(x)), donde x es la entrada y f(x) es la salida de la funcin f aplicada a x. La tarea de la inferencia inductiva pura (o induccin) es la siguente: Dada una coleccin de ejemplos de f, devolver una funcin h que aproxime a f. La funcin h se denomina hiptesis. La razn por la cual el aprendizaje es dificl, desde un punto de vista conceptual, es que no es fcil determinar si una funcin h es una buena aproximacin de f. Una buena hiptesis estar bien generalizada si puede predecir ejemplos que no se conocen. ste es un problema de induccin fundamental. Un ejemplo tpico es ajustar una funcin de una nica variable a una serie de puntos dados. Los ejemplos son pares (x, f(x)), donde tanto x como f(x) son nmeros reales. Se elige el espacio de hiptesis H (el conjunto de hiptesis que se van a considerar) como el conjunto de polinomios de grado inferior o igual a k, por ejemplo 3x +2, x -4x . Se pueden ajustar algunos datos de forma exacta como una linea recta (la linea se denomina hiptesis consistente ya que verifica todos los datos) o como un polinomio de mayor grado que tambin es consistente con los mismos datos. Esto ilustra la primera cuestin del aprendizaje inductivo: Cmo elegir entre mltiples hiptesis consistentes? La respuesta es que es preferible la hiptesis consistente con los datos que sea ms sencilla. Intuitivamente, tiene sentido, ya que las hiptesis que no son tan sencillas como los datos van a fallar a la hora de extraer cualquier patrn de los mismos. Definir qu es sencillo no es fcil, pero parece razonable decir que un polinomio de grado 1 es ms sencillo que uno de grado 12. En un conjunto de datos ms complejo puede serr que no existe una lnea recta consistente; de hecho este conjunto requiere un polinomio de grado mayor. Si por ejemplo el polinomio es de grado 6, los datos estn formados por siete puntos, as que el polinomio tiene tantos parmetros como puntos forman los datos; por ello, no parece encontrarse ningn patrn en los datos y no esperariamos una buena generalizacin. Sera mejor ajustar con una lnea recta, que no sea exactamente consistente, pero que permita hacer predicaciones razonables. Esto equivale a aceptar la posibilidad de que la funcin verdadera sea no determnistica (o algo similar, que las entradas reales no han sido observadas en su totalidad). Para funciones no deterministicas, existe un inevitable compromiso entre la complejidad de la hiptesis y el grado de adecuacin de los datos. Se debe tener en cuenta que la posibilidad o la imposibilidad de encontrar una hiptesis consistente y sencilla depende en gran medida del espacio de hiptesis elegido. Uno espacio de hiptesis formado por polinomios de grado finito no puede, por ejemplo, re presentar funciones sinusoidales con precisin, as que no se puede aprender con este espacio de hiptesis a partir de datos sinusoidales. Se dice que un problema de aprendizaje es realizable si el espacio de hiptesis contiene a la funcin verdadera; en otro caso, se dice que es irrealizable.
2 17 3

Figura 3. El objecivo del agente es adaptar su comportamento de manera de maximizar la suma de los refuerzos que espera obtener en el futuro.

3. APRENDIZAJE INDUCTIVO
Un algoritmo de aprendizaje supervisado determinstico recibe como entrada el valor correcto para determinados valores de una funcin desconocida y debe averiguar cul es la funcin o

Desgraciadamente, no siempre se puede determinar si un problema de aprendizaje es realizable, ya que la funcin verdadera no se conoce. Una forma de evitar este problema es usar conocimiento a priori para eligir un espacio de hiptesis en el que sabemos que se encuentra la funcin verdadera. Otro enfoque es utilizar un espacio de hiptesis tan grande como sea posible. Por ejemplo, por qu no permitir que H sea el conjunto de todas las mquinas de Turing? Dspues de todo, toda funcin computable puede ser representada por una mquina de Turing. El problema de este enfoque es que no tiene en cuenta la complejidad computacional del aprendizaje. Existe un compromiso entre la expresividad del espacio de hiptesis y la complejidad de encontrar hiptesis sencillas y consistentes dentro de este espacio. Por ejemplo, ajustar lneas rectas a los datos es muy sencillo; ajustar polinomios de grado alto es ms complicado; y ajustar mquinas de Turing es muy complicado, ya que dada una mquina de Turing, determinar si es consistente con los datos no es un problema, en general, decidible. Una segunda razn para preferir espacios de hiptesis simples es que la hiptesis resultante ser sencilla de utilizar, es decir, ser ms rpido computar h(x) cuando h sea una funcin lineal que cuando sea un programa de cualquier mquina de Turing. Por estas razones, la mayora de los trabajos en aprendizaje se han enfocado hacia representaciones relativamente simples.

En el reconocimiento de patrones, el algoritmo k-nn es usado como mtodo de clasificacin de objetos (elementos) basado en un entrenamiento mediante ejemplos cercanos en el espacio de los elementos. k-nn es un tipo de "Lazy Learning", donde la funcin se aproxima solo localmente y todo el cmputo es diferido a la clasificacin. Los ejemplos de entrenamiento son vectores en un espacio caracterstico multidimensional, cada ejemplo est descrito en trminos de p atributos considerando q clases para la clasificacin. Los valores de los atributos del i-esimo ejemplo (donde dimensional ) se representan por el vector p-

El espacio es particionado en regiones por localizaciones y etiquetas de los ejemplos de entrenamiento. Un punto en el espacio es asignado a la clase C si esta es la clase ms frecuente entre los k ejemplos de entrenamiento ms cercano. Generalmente se usa la Distancia euclideana.

La fase de entrenamiento del algoritmo consiste en almacenar los vectores caractersticos y las etiquetas de las clases de los ejemplos de entrenamiento. En la fase de clasificacin, la evaluacin del ejemplo (del que no se conoce su clase) es representada por un vector en el espacio caracterstico. Se calcula la distancia entre los vectores almacenados y el nuevo vector, y se seleccionan los k ejemplos ms cercanos. El nuevo ejemplo es clasificado con la clase que ms se repite en los vectores seleccionados. Este mtodo supone que los vecinos ms cercanos nos dan la mejor clasificacin y esto se hace utilizando todos los atributos; el problema de dicha suposicin es que es posible que se tengan muchos atributos irrelevantes que dominen sobre la clasificacin: dos atributos relevantes perderan peso entre otros veinte irrelevantes.

Figura 4. Taxonomia del aprendizaje. Para corregir el posible sesgo se puede asignar un peso a las distancias de cada atributo, dndole as mayor importancia a los atributos ms relevantes. Otra posibilidad consiste en tratar de determinar o ajustar los pesos con ejemplos conocidos de entrenamiento. Finalmente, antes de asignar pesos es recomendable identificar y eliminar los atributos que se consideran irrelevantes.

4. K-NN
En el mtodo k-nn (K nearest neighbors Fix y Hodges, 1951) es un mtodo de aprendizaje inductivo supervisado que sirve para estimar la funcin de densidad F(x / Cj) de las predictoras x por cada clase Cj. Este es un mtodo de clasificacin no paramtrico, que estima el valor de la funcin de densidad de probabilidad o directamente la probabilidad a posteriori de que un elemento x pertenezca a la clase Cj a partir de la informacin proporcionada por el conjunto de prototipos. En el proceso de aprendizaje no se hace ninguna suposicin acerca de la distribucin de las variables predictoras.

la clasificacin, pero crean lmites entre clases parecidas. Un buen kpuede ser seleccionado mediante una optimizacin de uso. El caso especial en que la clase es predicha para ser la clase ms cercana al ejemplo de entrenamiento (cuando k = 1) es llamada Nearest Neighbor Algorithm, Algoritmo del vecino ms cercano. La exactitud de este algoritmo puede ser severamente degradada por la presencia de ruido o caractersticas irrelevantes, o si las escalas de caractersticas no son consistentes con lo que uno considera importante. Muchas investigaciones y esfuerzos fueron puestos en la seleccin y crecimiento de caractersticas para mejorar las clasificaciones. Particularmente una aproximacin en el uso de algoritmos que evolucionan para optimizar caractersticas de escalabilidad. Otra aproximacin consiste en escalar caractersticas por la informacin mutua de los datos de entrenamiento con las clases de entrenamiento.

Figura 5. Ejemplo del algoritmo Knn. El ejemplo que se desea clasificar es el circulo verde. Para k = 3 este es clasificado con la clase tringulo, ya que hay solo un cuadrado y 2 tringulos, dentro del circulo que los contiene. Si k = 5 este es clasificado con la clase cuadrado, ya que hay 2 tringulos y 3 cuadrados, dentro del circulo externo.

4.3 Vecinos ms cercanos con distancia ponderada


Se puede ponderar la contribucin de cada vecino de acuerdo a la distancia entre l y el ejemplar a ser clasificado xq, dando mayor peso a los vecinos ms cercanos. Por ejemplo podemos ponderar el voto de cada vecino de acuerdo al cuadrado inverso de sus distancias

En sntesis, el mtodo k-nn se resume en dos algoritmos:

4.1.1 Algoritmo de entrenamiento


Para cada ejemplo < x,f(x) > ,donde , agregar el ejemplo a la estructura representando los ejemplos de aprendizaje. donde

4.1.2 Algoritmo de clasificacin


Dado un ejemplar xq que debe ser clasificado, sean x1,...,xk los k vecinos ms cercanos a xq en los ejemplos de aprendizaje, regresar

De esta manera se ve que no hay riesgo de permitir a todos los ejemplos entrenamiento contribuir a la clasificacin de xq, ya que al ser muy distantes no tendran peso asociado. La desventaja de considerar todos los ejemplos seria su lenta respuesta (mtodo global). Se quiere siempre tener un mtodo local en el que solo los vecinos ms cercanos son considerados. Esta mejora es muy efectiva en muchos problemas prcticos. Es robusto ante los ruidos de datos y suficientemente efectivo en conjuntos de datos grandes. Se puede ver que al tomar promedios ponderados de los k vecinos ms cercanos el algoritmo puede evitar el impacto de ejemplos con ruido aislados.

donde (a,b) = 1 si a = b; y 0 en cualquier otro caso. el valor f(xq) devuelto por el algoritmo como un estimador de f(xq) es solo el valor ms comn de f entre los k vecinos ms cercanos a xq. Si elegimos k = 1; entonces el vecino ms cercano a xi determina su valor.

4.2 Eleccin del k


La mejor eleccin de k depende fundamentalmente de los datos; generalmente, valores grandes de k reducen el efecto de ruido en

5. APLICACIN A FILMAFFINITY
En este programa lo que hemos hecho ha sido intentar copiar un algoritmo que usa la pagina www.filmaffinity.com, una pgina creada en Mayo de 2002 dedicada a dar e intercambiar informacin sobre pelculas, directores, actores, etc., y que adems permite a sus usuarios registrados, poner una nota a las pelculas que hayan visto. De esta forma, podemos ver, para cada pelicula, la votacion media que ha obtenido de todos los usuarios de la comunidad, de esta forma, podremos saber de antemano si una pelicula es buena o no. Actualmente FilmAffinity no es slo una de las mayores bases de datos de cine en nuestro idioma, sino tambin una de las webs de todo el mundo que atesora una mayor cantidad de votaciones de cada una de sus pelculas, gracias a su gran nmero de usuarios de tantos pases diferentes.

Figura 6. Ejemplo de algoritmo K-NN para los K=4 vecinos ms cercanos.

Figura 7. Aqui vemos una impresion de pantalla del apartado Almas Gemelas donde podemos ver el porcentaje de afinidad con los usuarios de la comunidad, ademas de mostrarnos el numero de votaciones coincidentes con las nuestras

En particular, nuestro algoritmo se centra en un apartado llamado Almas Gemelas, que elabora, a partir de las votaciones de los usuarios, una lista con los que son ms afines, una forma de saber que pelculas que yo no he visto me podran gustar, ya que mis almas gemelas tendrn gustos muy parecidos a los mos.

6. CDIGO
En nuestro algoritmo, desarrollado en Matlab, hemos tomado como base de datos, nuestros propias votaciones, adems de unas votaciones ficticias, propias de ciertos personajes famosos. Obviamente, dichas votaciones no sern nada coherentes, y es difcil que alguien obtenga como resultado ser el alma gemela de

alguno de ellos. Lo ideal sera tener una base de datos grande, como podria ser la que tiene la propia pagina, donde digamos que los vectores de cada usuario sern muchisimo mas grandes de las apenas 15 peliculas que hemos puesto nosotros por usuario. Con esto, conseguiriamos que un usuario que realmente tiene unas votaciones similares a las nuestras, teniendo un gran nmero de pelculas calificadas, realmente fuera nuestra verdadera almagemela y alguien de cuyos gustos podriamos fiarnos a la hora de aceptar una recomendacion. En la parte ms matemtica, deberemos usar esta expresion para realizar el k-nn, ya que tenemos varios casos para comparar:

num_user=numel(puntuacion_peliculas)/num_pel ic; vec_nom=zeros(1,num_pelic); voto=0; %llamamos a un script que toma las votaciones por pantalla, adems de mostrar los carteles de las pelculas a votar, y las almacena en un vector que luego se comparar con la base de datos votar; for i=1:num_user for colum=1:num_pelic %si el valor ledo es 11, no hace la comparacin, ya que uno de los dos no ha visto la pelicula

load puntuacion-peliculas.txt; %no carga las letras, por eso uso 11 como valor de no-votacin, esto es, para la pelcula que no hayamos visto int int int int int int int int var; colum; i; error; coinc; comp; num_user; num_pelic;

if vec_nom(colum) ~=11 if puntuacion_peliculas(i,colum)~=11 %aqu es donde realmente usamos el algoritmo del vecino ms cercano, restando los valores de dos votaciones y elevando al cuadrado var=abs(puntuacion_peliculas(i,colum)vec_nom(colum)); var=var^2; error=error + var; comp=comp+1; if puntuacion_peliculas(i,colum)== vec_nom(colum) coinc=coinc+1; end end end end %guardamos el numero de coincidencias, errores y comparaciones para al final ofrecer un porcentaje de afinidad. Aqu hemos hecho que solo si son estrictamente iguales sume uno el contador de coincidencias, pero en la pagina le da un intervalo, digamos, si las votaciones estn uno o dos puntos por encima o por debajo, las considera como iguales error=sqrt(error); if error < minreserror minreserror=error; minrescoinc=coinc; minres=i; mincomp=comp; end if error > maxreserror maxreserror=error; maxrescoinc=coinc; maxres=i; maxcomp=comp; end error=0;coinc=0;comp=0; end

%variables para guardar los errores mnimos, las coincidencias con ese usuario, y la posicin del usuario en la matriz int int int int minres; minreserror; minrescoinc; mincomp;

%variables para guardar los errores mximos, las coincidencias con ese usuario, y la posicin del usuario en la matriz, para hallar el anti-alma gemela int maxres; int maxreserror; int maxrescoinc; int maxcomp; int voto; double vec_nom; error=0; coinc=0; colum=0; var=0; i=0; comp=0; mincomp=0; maxcomp=0; minres=0; maxres=0; minreserror=10^10; maxreserror=0; num_pelic=length(puntuacion_peliculas);

disp ('Tu alma gemela es: ') dato=minres; %funcin que har un switch para saber, a partir del numero de usuario obtenido arriba, que imagen le corresponde mostrar switch12(dato); disp('El numero de coincidencias fue: ') disp(minrescoinc); disp(minrescoinc/mincomp*100);

minres=0;minrescoinc=0;minreserror=0; disp ('Tu anti-alma gemela es: ') dato=maxres; switch12(dato) disp('El numero de coincidencias fue: ') disp(minrescoinc); disp(minrescoinc/mincomp*100); minres=0;minrescoinc=0;minreserror=0;

Figura 8. Aqui vemos como, al llamar al script votar.m, nos pedir la votacin de la pelcula adems de mostrarnos el cartel de la misma, algo bastante til para que la imagen nos ayude a recordar la pelcula SWITCH12.m function switch12(dato) switch (dato) case 1 disp('Carlos') case 2 disp('Joana') case 3 disp('Filippo') case 4 disp('Cristiano Ronaldo') cargaimagen('cristiano.jpg') case 5 disp('Belen Esteban') cargaimagen('esteban.jpg') case 6 disp('George Bush') cargaimagen('bush.jpg') case 7 disp('Sara Carbonero') cargaimagen('carbonero.jpg') case 8 disp('Mr. Bean') cargaimagen('bean.jpg') case 9 disp('Rafa Nadal') cargaimagen('rafa.jpg') case 10 disp('Carmen Mairena') cargaimagen('mairena.jpg') case 11 disp('Kobe Bryant')

cargaimagen('bryant.jpg') case 12 disp('Lady Gaga') cargaimagen('ladygaga.jpg') otherwise disp('Sin Coincidencias') end CARGAIMAGEN.m %funcin que tomar el fichero que debe abrir y lo mostrar por pantalla, aqu hemos incluido un figure para que al cargar dos imagenes seguidas, la segunda no pise a la otra, y asi poder visualizar bien las dos.

function cargaimagen(dato) [IM map]=imread(dato); figure; colormap(map); image(IM);

Figura 9. En esta imagen podemos ver el resultado final, que nos ofrece nuestra alma gemela, nuestra anti-alma gemela, adems de indicarnos el numero de coincidencias obtenidas, y el porcentaje de las mismas. Por ltimo, nos mostrar sus fotos.

VOTAR.m %script que guardar en el vector vec_nom las votaciones que introduzca el usuario, para luego ejecutar el bloque de comparaciones (en el programa principal) i=1; voto=input('Votacin para Kill Bill Vol.1: ','s'); vec_nom(i)=str2double(voto); i=i+1; voto=input('Votacin para Nufrago: ','s'); vec_nom(i)=str2double(voto); i=i+1; voto=input('Votacin para 2 Policas Rebeldes: ','s'); vec_nom(i)=str2double(voto); i=i+1; voto=input('Votacin para Cadena Perpetua: ','s'); vec_nom(i)=str2double(voto); i=i+1; voto=input('Votacin para Gladiator: ','s'); vec_nom(i)=str2double(voto); i=i+1; voto=input('Votacin para Kung Fu Panda: ','s'); vec_nom(i)=str2double(voto); i=i+1; voto=input('Votacin para American Pie: ','s'); vec_nom(i)=str2double(voto); i=i+1; voto=input('Votacin para El Cdigo Da Vinci: ','s'); vec_nom(i)=str2double(voto); i=i+1; voto=input('Votacin para Torrente 2: ','s'); vec_nom(i)=str2double(voto); i=i+1; voto=input('Votacin para Solo en Casa: ','s'); vec_nom(i)=str2double(voto); i=i+1; voto=input('Votacin para Camino: ','s'); vec_nom(i)=str2double(voto); i=i+1; voto=input('Votacin para Grease: ','s'); vec_nom(i)=str2double(voto); i=i+1; voto=input('Votacin para American History X: ','s'); vec_nom(i)=str2double(voto); i=i+1; voto=input('Votacin para El Guardaespaldas: ','s'); vec_nom(i)=str2double(voto); i=i+1; voto=input('Votacin para Resacn en Las Vegas: ','s'); vec_nom(i)=str2double(voto); i=i+1;

7. FUTURAS MEJORAS
En una version posterior podramos hacer algunas mejoras, como podra ser que las votaciones que se fueran introduciendo, y que no estuvieran ya en los vectores a comparar, fueran almacenandose automaticamente en el fichero que estamos usando como base de datos, esto haria, que entre ms personas diferentes lo usaran, mayor posibilidad de encontrar alguien con gustos similares a los nuestros. Esto implicara cambiar muchas cosas del cdigo, ya que por ejemplo, no podramos usar un switch para imprimir por pantalla las imagenes (fotos) como lo hemos estado haciendo hasta ahora. En su lugar deberamos implementar algo asi como un vector que almacenara los nombres de los usuarios que van votando y que se renovara cada vez que se introdujera alguno nuevo. Otra cosa que se podra cambiar a mejor seria el hecho de que las comparaciones pudieran no ser tan estrictas, es decir, tener dos niveles de afinidad, uno que fuera estrictamente igual, con lo que nos daria menos personas con las que ser afines, pero con las que tendramos grandes similitudes (es el caso que hemos implementado) y otro nivel en el que si las votaciones fueran 1 o 2 puntos por encima o por debajo las considerara como una coincidencia. Con esto conseguiramos que nos devolviera una lista amplia de usuarios con gustos parecidos con peliculas, que quizas no hayamos visto y que nos pueden sorprender gratamente

8. VISUALIZACIN DEL CDIGO


A continuacin vamos a mostrar grficamente el proceso y orden que sigue el cdigo para un mayor entendimiento del desarrollo del estudio.

8.1 Orden de votacin de las pelculas


El primer paso es que las personas que van a participar hagan una lista, en el mismo orden que se indica, de sus votaciones sobre estas pelculas que se muestran a continuacin. Para un mayor cercioramiento de las pelculas que son por parte de los participantes, se mostrarn el cartel de las mismas para tener unas votaciones/resultados lo ms fiables posibles.

8.1.1 Pelcula nmero 1:Kill Bill

8.1.5 Pelcula nmero 5: Gladiator

Figura 10. Pelcula nmero 1: Kill Bill.

Figura 14. Pelcula nmero 5: Gladiator

8.1.2 Pelcula nmero 2: Nafrago

8.1.6 Pelcula nmero 6: Kung Fu Panda

Figura 11. Pelcula nmero 2: Nafrago

Figura 15. Pelcula nmero 6: Kun Fu Panda

8.1.3 Pelcula nmero 3: Dos policias rebeldes 2

8.1.7 Pelcula nmero 7: American Pie

Figura 12. Pelcula nmero 3: Dos policias rebeldes 2

Figura 16. Pelcula nmero 7: American Pie

8.1.4 Pelcula nmero 4:Cadena perpetua

8.1.8 Pelcula nmero 8: El Cdigo Da Vinci

Figura 13. Pelcula nmero 4: Cadena Perpetua.

Figura 17. Pelcula nmero 8: El Cdigo Da Vinci

8.1.9 Pelcula nmero 9: Torrente 2

8.1.13 Pelcula nmero 13: American History X

Figura 18. Pelcula nmero 9: Torremte 2

Figura 14. Pelcula nmero 13: American History X

8.1.10 Pelcula nmero 10: Slo en Casa

8.1.14 Pelcula nmero 14: El Guardaespaldas

Figura 19. Pelcula nmero 10: Slo en casa

Figura 15. Pelcula nmero 14: El Guardaespaldas

8.1.11 Pelcula nmero 11: Camino

8.1.15 Pelcula nmero 15: Resacn en Las Vegas

Figura 20. Pelcula nmero 11: Camino

Figura 16. Pelcula nmero 15: Resacn en Las Vegas

8.1.12 Pelcula nmero 12: Grease

8.3 Recopilacin de datos y muestra de resultados


A continuacin de proceder a la recopilacin e introduccin de votaciones y el cdigo mostrar : -El alma gemela de la persona analizada junto con el nmero de coincidencias entre ambos. -El anti-alma gemela de la persona analizada junto con el nmero de coincidencias entre ambos. Figura 21. Pelcula nmero 12: Grease Para que el programa fuese ms entendible visualmente, adems de introducir las votaciones de los autores de este proyecto, nos hemos inventado las votaciones de varios personajes famosos

que son conocidos por la mayora de los participantes. Los mostramos a continuacin en el mismo orden que estn en el cdigo:

Figura 21. Mr. Been (Actor)

Figura 17. Cristiano Ronaldo (Futbolista)

Figura 22. Rafa Nadal (Tenista)

Figura 18. Beln Esteban (Tertuliana televisiva)

Figura 23. Carmen de Mairena (Tertuliana televisiva)

Figura 19. George Bush (Ex-Presidente EEUU)

Figura 24. Kobe Bryant (Jugador de Baloncesto)

Figura 20. Sara Carbonero (Periodista)

[1] Russell, Stuart J. (Stuart Jonathan) 2004 Inteligencia artificial : un enfoque moderno 2 ed. Pearson Prentice Hall [2] Rich, Elaine 1994 Inteligencia artificial 2 ed McGraw-Hill [3] Mira, J. (Jos Mira Mira) 1995 Aspectos bsicos de la inteligencia artificial ed. Sanz y Torres

Figura 25. Lady Gaga (Cantante) Como se puede ver hemos escogido famosos de distintos mbitos para que sean conocidos por el mayor nmero de participantes posible.

[4] Apuntes asignatura Inteligencia en Redes de Comunicaciones. Ingeniera de Telecomunicacin, 5 Universidad Carlos III de Madrid [5] Es.wikipedia.org http://es.wikipedia.org/wiki/ [6] www.lawebdelprogramador.com [7] www.mathworks.com

9. REFERENCIAS

Вам также может понравиться