Top Banner
Algoritmo del vecino más cercano aplicado a la web Filmaffinity.com Filippo Chieco Ingeniería Espacial “Sapienza” Università di Roma Universidad Carlos III de Madrid Av. de la Universidad, 30 28911 Leganés (Madrid) Estudiante Erasmus [email protected] Carlos Pérez Pérez Ingeniería Telecomunicaciones Universidad de Las Palmas de G.C. Universidad Carlos III de Madrid Av. de la Universidad, 30 28911 Leganés (Madrid) Estudiante Séneca [email protected] Joana Rodríguez Luque Ingeniería Técnica Industrial (Electrónica Industrial) Universidad Carlos III de Madrid Av. de la Universidad, 30 28911 Leganés (Madrid) [email protected] RESUMEN Algoritmo del vecino más cercano aplicado a la web filmaffinity.com para ver la compatibilidad de los gustos cinematograficos. Términos generales Algoritmo, factores humanos, realizable Palabras clave Aprendizaje, algoritmo k-nn, aprendizaje inductivo supervisado, vecino más cercano. 1. INTRODUCCIÓN El aprendizaje es el proceso a través del cual se adquieren nuevas habilidades, destrezas, conocimientos, conductas o valores como resultado del estudio, la experiencia, la instrucción, el razonamiento y la observación. Este proceso puede ser analizado desde distintas perspectivas, por lo que existen distintas teorías del aprendizaje. El aprendizaje es una de las funciones mentales más importantes en humanos, animales y sistemas artificiales. El aprendizaje humano está relacionado con la educación y el desarrollo personal. Debe estar orientado adecuadamente y es favorecido cuando el individuo está motivado. El estudio acerca de cómo aprender interesa a la neuropsicología, la psicología educacional y la pedagogía. El aprendizaje como establecimiento de nuevas relaciones temporales entre un ser y su medio ambiental ha sido objeto de diversos estudios empíricos, 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 repetición de algunas predisposiciones fisiológicas, de «los ensayos y errores», de los períodos de reposo tras los cuales se aceleran los progresos, etc. Muestran también la última relación del aprendizaje con los reflejos condicionados. La idea del aprendizaje consiste en utilizar las percepciones no sólo para actuar, sino también 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 memorización de las experiencias, hasta la creación de teorías científicas. 2. FORMAS DE APRENDIZAJE Un agente de aprendizaje puede ser diseñado con un elemento de acción, que decide qué acciones llevar a cabo y con un elemento de aprendizaje, que modifica el elemento de acción para poder tomar memore decisiones. Los investigadores en el campo del aprendizaje han creado una gran variedad de elementos de aprendizaje. El diseño de un elemento de aprendizaje se va afectado mayoritariamente por tres aspectos: Qué componentes del elemento de acción tienen que aprenderse Què realimentación está disponibile para aprender dichos componentes. Qué tipo de representación se usa para los componentes. A continuación se van a analizar cada uno de estos aspectos. Existen mucca formas de construir el elemento de acción de un agente. Los components de estos agentes incluyen los siguente: 1. Una proyección directa de las condiciones del estado actual a las acciones. 2. Un método para inferir las propiedades relevantes del mundo a partir de una secuencia de percepciones. 3. Información sobre cómo evoluciona el mundo y sobre los resultados de las posibles acciones que el agente puede llevar a cabo.
14

Algoritmo del vecino m s cercano aplicado a la web ...

Jul 24, 2022

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Algoritmo del vecino m s cercano aplicado a la web ...

Algoritmo del vecino más cercano aplicado a la web Filmaffinity.com

Filippo Chieco

Ingeniería Espacial “Sapienza” Università di Roma

Universidad Carlos III de Madrid

Av. de la Universidad, 30 28911 Leganés (Madrid)

Estudiante Erasmus

[email protected]

Carlos Pérez Pérez Ingeniería Telecomunicaciones

Universidad de Las Palmas de G.C. Universidad Carlos III de Madrid

Av. de la Universidad, 30 28911 Leganés (Madrid) Estudiante Séneca

[email protected]

Joana Rodríguez Luque Ingeniería Técnica Industrial

(Electrónica Industrial) Universidad Carlos III de Madrid

Av. de la Universidad, 30 28911 Leganés (Madrid)

[email protected]

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

Términos generales Algoritmo, factores humanos, realizable

Palabras clave Aprendizaje, algoritmo k-nn, aprendizaje inductivo supervisado, vecino más cercano.

1. INTRODUCCIÓN

El aprendizaje es el proceso a través del cual se adquieren nuevas habilidades, destrezas, conocimientos, conductas o valores como resultado del estudio, la experiencia, la instrucción, el razonamiento y la observación. Este proceso puede ser analizado desde distintas perspectivas, por lo que existen distintas teorías del aprendizaje. El aprendizaje es una de las funciones mentales más importantes en humanos, animales y sistemas artificiales.

El aprendizaje humano está relacionado con la educación y el desarrollo personal. Debe estar orientado adecuadamente y es favorecido cuando el individuo está motivado. El estudio acerca de cómo aprender interesa a la neuropsicología, la psicología educacional y la pedagogía.

El aprendizaje como establecimiento de nuevas relaciones temporales entre un ser y su medio ambiental ha sido objeto de diversos estudios empíricos, 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 repetición de algunas predisposiciones fisiológicas, de «los

ensayos y errores», de los períodos de reposo tras los cuales se aceleran los progresos, etc. Muestran también la última relación del aprendizaje con los reflejos condicionados.

La idea del aprendizaje consiste en utilizar las percepciones no sólo para actuar, sino también 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 memorización de las experiencias, hasta la creación de teorías científicas.

2. FORMAS DE APRENDIZAJE

Un agente de aprendizaje puede ser diseñado con un elemento de acción, que decide qué acciones llevar a cabo y con un elemento de aprendizaje, que modifica el elemento de acción para poder tomar memore decisiones. Los investigadores en el campo del aprendizaje han creado una gran variedad de elementos de aprendizaje. El diseño de un elemento de aprendizaje se va afectado mayoritariamente por tres aspectos:

● Qué componentes del elemento de acción tienen que aprenderse

● Què realimentación está disponibile para aprender dichos componentes.

● Qué tipo de representación se usa para los componentes.

A continuación se van a analizar cada uno de estos aspectos. Existen mucca formas de construir el elemento de acción de un agente. Los components de estos agentes incluyen los siguente:

1. Una proyección directa de las condiciones del estado actual a las acciones.

2. Un método para inferir las propiedades relevantes del mundo a partir de una secuencia de percepciones.

3. Información sobre cómo evoluciona el mundo y sobre los resultados de las posibles acciones que el agente puede llevar a cabo.

Page 2: Algoritmo del vecino m s cercano aplicado a la web ...

4. Información de utilidad, que indica los deseables que son los estrado.

5. Información acción-valor, que indica los deseables que son las acciones.

6. Metas que describen las clases de estados que maximizan la utilidad del agente.

Cada uno de estos componentes puede aprenderse con una realimentación apropiada. Consideremos, por ejemplo, un agente enrtenándose para convertirse en un taxista. Cada vez que el instructor grite ‹‹¡Frene!››, el agente puede aprender una regla condición-acción que le indique cuándo frenar (componente 1). Informando el agente de que certa imágenes de cámaras 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). Además, si no recibe propina de pasajeros tras una conducción brusca, puede aprender una componente útil de su función de utilidad (4).

El tipo de realimentación disponible para el aprendizaje normalmente es el factor más 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.

2.1 Aprendizaje supervisado El problema de aprendizaje supervisado consiste en aprender una función 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 condición-acción para frenar, esto es, una función que a partir del estado genera una salida booleana (frenar o no frenar). En el caso (2), el agente aprende una función que a partir de una imagen genera una salida booleana (si la imagen contiene o no un autobús). En el caso (3), aprende una función que a partir del estado y las acciones para frenar, genera la distancia de parada expresada en pies. Nótese 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 metódos de aprendizaje supervisado para aprender a predecirlos. En entornos que son parcialmente observables, el problema es más difícil, ya que los efectos más inmediatos pueden ser invisibles.

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 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 debería desarrollar gradualmente los conceptos de ‹‹días de tráfico bueno›› y de ‹‹días de tráfico 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 información de lo que es una acción correcta o un estado deseable. Principalmente se estudia el aprendizaje no supervisado en el contexto de los sistemas de razionamento probabilístico.

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.

Page 3: Algoritmo del vecino m s cercano aplicado a la web ...

2.3 Aprendizaje por refuerzo

El problema de aprendizaje por refuerzo, es el más general de la tres categorías. 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 típicamente incluye el subproblema de aprender cómo se comporta el entorno.

El factor más importante en el diseño de sistemas de aprendizaje es la disponibilidad de conocimiento a priori. La mayoría de los investigadores de apredizaje en IA, ingeniería informática, y psicología han estudiado el caso en el que el agente comienza sin información sobre lo que está intentendo aprender. Sólo tiene acceso a los ejemplos de sus experiencias. Aunque es un caso importante, no es por término medio el caso más general. La mayoría del aprendizaje humano tiene lugar en un contexto con bastante conocimiento de base. Algunos psicólogos y linguistas reinvendican que incluso los niños recién 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 físico examinando una pila de fotografías de una cámera de burbujas (bubble-chamber), podría ser capaz de inferir una teoría que afirmara la existencia de una nueva partícula con una cietra masa y una cierta carga; sin embargo un crítico de arte que examina la misma pila podría aprender únicamente que el artista debe pertenecer a alguna clase de impresionismo abstracto.

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 determinístico recibe como entrada el valor correcto para determinados valores de una función desconocida y debe averiguar cuál es la función o

aproximarla. Siendo más 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 función f aplicada a x. La tarea de la inferencia inductiva pura (o inducción) es la siguente:

Dada una colección de ejemplos de f, devolver una función h que aproxime a f.

La función h se denomina hipótesis. La razón por la cual el aprendizaje es dificíl, desde un punto de vista conceptual, es que no es fácil determinar si una función h es una buena aproximación de f. Una buena hipótesis estará bien generalizada si puede predecir ejemplos que no se conocen. Éste es un problema de inducción fundamental. Un ejemplo típico es ajustar una función de una única variable a una serie de puntos dados. Los ejemplos son pares (x, f(x)), donde tanto x como f(x) son números reales. Se elige el espacio de hipótesis H (el conjunto de hipótesis que se van a considerar) como el conjunto de polinomios de grado

inferior o igual a k, por ejemplo 3x2

+2, x17

-4x3

. Se pueden ajustar algunos datos de forma exacta como una linea recta (la linea se denomina hipótesis consistente ya que verifica todos los datos) o como un polinomio de mayor grado que también es consistente con los mismos datos. Esto ilustra la primera cuestión del aprendizaje inductivo: ¿Cómo elegir entre múltiples hipótesis consistentes? La respuesta es que es preferible la hipótesis consistente con los datos que sea más sencilla. Intuitivamente, tiene sentido, ya que las hipótesis que no son tan sencillas como los datos van a fallar a la hora de extraer cualquier patrón de los mismos. Definir qué es sencillo no es fácil, pero parece razonable decir que un polinomio de grado 1 es más sencillo que uno de grado 12.

En un conjunto de datos más complejo puede serr que no existe una línea recta consistente; de hecho este conjunto requiere un polinomio de grado mayor. Si por ejemplo el polinomio es de grado 6, los datos están formados por siete puntos, así que el polinomio tiene tantos parámetros como puntos forman los datos; por ello, no parece encontrarse ningún patrón en los datos y no esperariamos una buena generalización. Sería mejor ajustar con una línea recta, que no sea exactamente consistente, pero que permita hacer predicaciones razonables. Esto equivale a aceptar la posibilidad de que la función verdadera sea no determínistica (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 hipótesis y el grado de adecuación de los datos.

Se debe tener en cuenta que la posibilidad o la imposibilidad de encontrar una hipótesis consistente y sencilla depende en gran medida del espacio de hipótesis elegido. Uno espacio de hipótesis formado por polinomios de grado finito no puede, por ejemplo, re presentar funciones sinusoidales con precisión, así que no se puede aprender con este espacio de hipótesis a partir de datos sinusoidales. Se dice que un problema de aprendizaje es realizable si el espacio de hipótesis contiene a la función verdadera; en otro caso, se dice que es irrealizable.

Page 4: Algoritmo del vecino m s cercano aplicado a la web ...

Desgraciadamente, no siempre se puede determinar si un problema de aprendizaje es realizable, ya que la función verdadera no se conoce. Una forma de evitar este problema es usar conocimiento a priori para eligir un espacio de hipótesis en el que sabemos que se encuentra la función verdadera.

Otro enfoque es utilizar un espacio de hipótesis tan grande como sea posible. Por ejemplo, ¿por qué no permitir que H sea el conjunto de todas las máquinas de Turing? Déspues de todo, toda función computable puede ser representada por una máquina 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 hipótesis y la complejidad de encontrar hipótesis sencillas y consistentes dentro de este espacio.

Por ejemplo, ajustar líneas rectas a los datos es muy sencillo; ajustar polinomios de grado alto es más complicado; y ajustar máquinas de Turing es muy complicado, ya que dada una máquina de Turing, determinar si es consistente con los datos no es un problema, en general, decidible. Una segunda razón para preferir espacios de hipótesis simples es que la hipótesis resultante será sencilla de utilizar, es decir, será más rápido computar h(x) cuando h sea una función lineal que cuando sea un programa de cualquier máquina de Turing.

Por estas razones, la mayoría de los trabajos en aprendizaje se han enfocado hacia representaciones relativamente simples.

Figura 4. Taxonomia del aprendizaje.

4. K-NN

En el método k-nn (K nearest neighbors Fix y Hodges, 1951) es un método de aprendizaje inductivo supervisado que sirve para estimar la función de densidad F(x / Cj) de las predictoras x por cada clase Cj.

Este es un método de clasificación no paramétrico, que estima el valor de la función de densidad de probabilidad o directamente la probabilidad a posteriori de que un elemento x pertenezca a la clase Cj a partir de la información proporcionada por el conjunto de prototipos. En el proceso de aprendizaje no se hace ninguna suposición acerca de la distribución de las variables predictoras.

En el reconocimiento de patrones, el algoritmo k-nn es usado como método de clasificación 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 función se aproxima solo localmente y todo el cómputo es diferido a la clasificación.

Los ejemplos de entrenamiento son vectores en un espacio característico multidimensional, cada ejemplo está descrito en términos de p atributos considerando q clases para la clasificación. Los valores de los atributos del i-esimo ejemplo

(donde ) se representan por el vector p-dimensional

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 más frecuente entre los k ejemplos de entrenamiento más cercano. Generalmente se usa la Distancia euclideana.

La fase de entrenamiento del algoritmo consiste en almacenar los vectores característicos y las etiquetas de las clases de los ejemplos de entrenamiento. En la fase de clasificación, la evaluación del ejemplo (del que no se conoce su clase) es representada por un vector en el espacio característico. Se calcula la distancia entre los vectores almacenados y el nuevo vector, y se seleccionan los k ejemplos más cercanos. El nuevo ejemplo es clasificado con la clase que más se repite en los vectores seleccionados.

Este método supone que los vecinos más cercanos nos dan la mejor clasificación y esto se hace utilizando todos los atributos; el problema de dicha suposición es que es posible que se tengan muchos atributos irrelevantes que dominen sobre la clasificación: dos atributos relevantes perderían peso entre otros veinte irrelevantes.

Para corregir el posible sesgo se puede asignar un peso a las distancias de cada atributo, dándole así mayor importancia a los atributos más 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.

Page 5: Algoritmo del vecino m s cercano aplicado a la web ...

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 triángulo, ya que hay solo un cuadrado y 2 triángulos, dentro del circulo que los contiene. Si k = 5 este es clasificado con la clase cuadrado, ya que hay 2 triángulos y 3

cuadrados, dentro del circulo externo.

En síntesis, el método 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.

4.1.2 Algoritmo de clasificación Dado un ejemplar xq que debe ser clasificado, sean x1,...,xk los k vecinos más cercanos a xq en los ejemplos de aprendizaje, regresar

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 más común de f entre los k vecinos más cercanos a xq. Si elegimos k = 1; entonces el vecino más cercano a xi determina su valor.

4.2 Elección del k La mejor elección de k depende fundamentalmente de los datos; generalmente, valores grandes de k reducen el efecto de ruido en

la clasificación, pero crean límites entre clases parecidas. Un buen kpuede ser seleccionado mediante una optimización de uso. El caso especial en que la clase es predicha para ser la clase más cercana al ejemplo de entrenamiento (cuando k = 1) es llamada Nearest Neighbor Algorithm, Algoritmo del vecino más cercano.

La exactitud de este algoritmo puede ser severamente degradada por la presencia de ruido o características irrelevantes, o si las escalas de características no son consistentes con lo que uno considera importante. Muchas investigaciones y esfuerzos fueron puestos en la selección y crecimiento de características para mejorar las clasificaciones. Particularmente una aproximación en el uso de algoritmos que evolucionan para optimizar características de escalabilidad. Otra aproximación consiste en escalar características por la información mutua de los datos de entrenamiento con las clases de entrenamiento.

4.3 Vecinos más cercanos con distancia ponderada

Se puede ponderar la contribución de cada vecino de acuerdo a la distancia entre él y el ejemplar a ser clasificado xq, dando mayor peso a los vecinos más cercanos. Por ejemplo podemos ponderar el voto de cada vecino de acuerdo al cuadrado inverso de sus distancias

donde

De esta manera se ve que no hay riesgo de permitir a todos los ejemplos entrenamiento contribuir a la clasificación de xq, ya que al ser muy distantes no tendrían peso asociado. La desventaja de considerar todos los ejemplos seria su lenta respuesta (método global). Se quiere siempre tener un método local en el que solo los vecinos más cercanos son considerados.

Esta mejora es muy efectiva en muchos problemas prácticos. 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 más cercanos el algoritmo puede evitar el impacto de ejemplos con ruido aislados.

Page 6: Algoritmo del vecino m s cercano aplicado a la web ...

Figura 6. Ejemplo de algoritmo K-NN para los K=4 vecinos más cercanos.

5. APLICACIÓN A FILMAFFINITY

En este programa lo que hemos hecho ha sido intentar copiar un

algoritmo que usa la pagina www.filmaffinity.com, una página creada en Mayo de 2002 dedicada a dar e intercambiar información sobre películas, directores, actores, etc., y que además permite a sus usuarios registrados, poner una nota a las películas 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 sólo una de las mayores bases de datos de cine en nuestro idioma, sino también una de las webs de todo el mundo que atesora una mayor cantidad de votaciones de cada una de sus películas, gracias a su gran número de usuarios de tantos países diferentes.

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 más afines, una forma de saber que películas que yo no he visto me podrían gustar, ya que mis almas gemelas tendrán gustos muy parecidos a los míos.

6. CÓDIGO

En nuestro algoritmo, desarrollado en Matlab, hemos tomado como base de datos, nuestros propias votaciones, además de unas votaciones ficticias, propias de ciertos personajes famosos. Obviamente, dichas votaciones no serán nada coherentes, y es difícil que alguien obtenga como resultado ser el alma gemela de

Page 7: Algoritmo del vecino m s cercano aplicado a la web ...

alguno de ellos. Lo ideal sería tener una base de datos grande, como podria ser la que tiene la propia pagina, donde digamos que los vectores de cada usuario serán 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 número de películas calificadas, realmente fuera nuestra verdadera alma-gemela y alguien de cuyos gustos podriamos fiarnos a la hora de aceptar una recomendacion.

En la parte más matemática, deberemos usar esta expresion para realizar el k-nn, ya que tenemos varios casos para comparar:

load puntuacion-peliculas.txt ; %no carga las letras, por eso uso ‘11’ como valor de no-votación, esto es, para la película que no hayamos visto int var ; int colum ; int i ; int error ; int coinc ; int comp; int num_user ; int num_pelic ; %variables para guardar los errores mínimos, las coincidencias con ese usuario, y la posición del usuario en la matriz int minres ; int minreserror ; int minrescoinc ; int mincomp ; %variables para guardar los errores máximos, las coincidencias con ese usuario, y la posición 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);

num_user=numel(puntuacion_peliculas)/num_pelic; vec_nom=zeros(1,num_pelic); voto=0; %llamamos a un script que toma las votaciones por pantalla, además de mostrar los carteles de las películas 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 leído es ‘11’, no hace la comparación, ya que uno de los dos no ha visto la pelicula if vec_nom(colum) ~=11 if puntuacion_peliculas(i,colum)~=11 %aquí es donde realmente usamos el algoritmo del vecino más 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 están 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

Page 8: Algoritmo del vecino m s cercano aplicado a la web ...

disp ( 'Tu alma gemela es: ' ) dato=minres; %función 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 votación de la película además de mostrarnos el cartel de la

misma, algo bastante útil para que la imagen nos ayude a recordar la película

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

Page 9: Algoritmo del vecino m s cercano aplicado a la web ...

cargaimagen( 'bryant.jpg' ) case 12 disp( 'Lady Gaga' ) cargaimagen( 'ladygaga.jpg' ) otherwise disp( 'Sin Coincidencias' ) end CARGAIMAGEN.m %función 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, además de

indicarnos el numero de coincidencias obtenidas, y el porcentaje de las mismas. Por último, nos mostrará sus fotos.

Page 10: Algoritmo del vecino m s cercano aplicado a la web ...

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( 'Votaciòn para Kill Bill Vol.1: ' , 's' ); vec_nom(i)=str2double(voto); i=i+1; voto=input( 'Votación para Náufrago: ' , 's' ); vec_nom(i)=str2double(voto); i=i+1; voto=input( 'Votación para 2 Policías Rebeldes: ' , 's' ); vec_nom(i)=str2double(voto); i=i+1; voto=input( 'Votación para Cadena Perpetua: ' , 's' ); vec_nom(i)=str2double(voto); i=i+1; voto=input( 'Votación para Gladiator: ' , 's' ); vec_nom(i)=str2double(voto); i=i+1; voto=input( 'Votación para Kung Fu Panda: ' , 's' ); vec_nom(i)=str2double(voto); i=i+1; voto=input( 'Votación para American Pie: ' , 's' ); vec_nom(i)=str2double(voto); i=i+1; voto=input( 'Votación para El Código Da Vinci: ' , 's' ); vec_nom(i)=str2double(voto); i=i+1; voto=input( 'Votación para Torrente 2: ' , 's' ); vec_nom(i)=str2double(voto); i=i+1; voto=input( 'Votación para Solo en Casa: ' , 's' ); vec_nom(i)=str2double(voto); i=i+1; voto=input( 'Votación para Camino: ' , 's' ); vec_nom(i)=str2double(voto); i=i+1; voto=input( 'Votación para Grease: ' , 's' ); vec_nom(i)=str2double(voto); i=i+1; voto=input( 'Votación para American History X: ' , 's' ); vec_nom(i)=str2double(voto); i=i+1; voto=input( 'Votación para El Guardaespaldas: ' , 's' ); vec_nom(i)=str2double(voto); i=i+1; voto=input( 'Votación para Resacón en Las Vegas: ' , 's' ); vec_nom(i)=str2double(voto); i=i+1 ;

7. FUTURAS MEJORAS

En una version posterior podríamos hacer algunas mejoras, como podría 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 más personas diferentes lo usaran, mayor posibilidad de encontrar alguien con gustos similares a los nuestros. Esto implicaría cambiar muchas cosas del código, ya que por ejemplo, no podríamos usar un “switch” para imprimir por pantalla las imagenes (fotos) como lo hemos estado haciendo hasta ahora. En su lugar deberíamos 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 podría 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 tendríamos 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 conseguiríamos 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. VISUALIZACIÓN DEL CÓDIGO

A continuación vamos a mostrar gráficamente el proceso y orden que sigue el código para un mayor entendimiento del desarrollo del estudio.

8.1 Orden de votación de las películas

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 películas que se muestran a continuación. Para un mayor cercioramiento de las películas que son por parte de los participantes, se mostrarán el cartel de las mismas para tener unas votaciones/resultados lo más fiables posibles.

Page 11: Algoritmo del vecino m s cercano aplicado a la web ...

8.1.1 Película número 1:Kill Bill

Figura 10. Película número 1: Kill Bill.

8.1.2 Película número 2: Naúfrago

Figura 11. Película número 2: Naúfrago

8.1.3 Película número 3: Dos policias rebeldes 2

Figura 12. Película número 3: Dos policias rebeldes 2

8.1.4 Película número 4:Cadena perpetua

Figura 13. Película número 4: Cadena Perpetua.

8.1.5 Película número 5: Gladiator

Figura 14. Película número 5: Gladiator

8.1.6 Película número 6: Kung Fu Panda

Figura 15. Película número 6: Kun Fu Panda

8.1.7 Película número 7: American Pie

Figura 16. Película número 7: American Pie

8.1.8 Película número 8: El Código Da Vinci

Figura 17. Película número 8: El Código Da Vinci

Page 12: Algoritmo del vecino m s cercano aplicado a la web ...

8.1.9 Película número 9: Torrente 2

Figura 18. Película número 9: Torremte 2

8.1.10 Película número 10: Sólo en Casa

Figura 19. Película número 10: Sólo en casa

8.1.11 Película número 11: Camino

Figura 20. Película número 11: Camino

8.1.12 Película número 12: Grease

Figura 21. Película número 12: Grease

8.1.13 Película número 13: American History X

Figura 14. Película número 13: American History X

8.1.14 Película número 14: El Guardaespaldas

Figura 15. Película número 14: El Guardaespaldas

8.1.15 Película número 15: Resacón en Las Vegas

Figura 16. Película número 15: Resacón en Las Vegas

8.3 Recopilación de datos y muestra de resultados

A continuación de procederá a la recopilación e introducción de votaciones y el código mostrará :

-El alma gemela de la persona analizada junto con el número de coincidencias entre ambos.

-El anti-alma gemela de la persona analizada junto con el número de coincidencias entre ambos.

Para que el programa fuese más entendible visualmente, además de introducir las votaciones de los autores de este proyecto, nos hemos inventado las votaciones de varios personajes famosos

Page 13: Algoritmo del vecino m s cercano aplicado a la web ...

que son conocidos por la mayoría de los participantes. Los mostramos a continuación en el mismo orden que están en el código:

Figura 17. Cristiano Ronaldo (Futbolista)

Figura 18. Belén Esteban (Tertuliana televisiva)

Figura 19. George Bush (Ex-Presidente EEUU)

Figura 20. Sara Carbonero (Periodista)

Figura 21. Mr. Been (Actor)

Figura 22. Rafa Nadal (Tenista)

Figura 23. Carmen de Mairena (Tertuliana televisiva)

Figura 24. Kobe Bryant (Jugador de Baloncesto)

Page 14: Algoritmo del vecino m s cercano aplicado a la web ...

Figura 25. Lady Gaga (Cantante)

Como se puede ver hemos escogido famosos de distintos ámbitos para que sean conocidos por el mayor número de participantes posible.

9. REFERENCIAS

[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 básicos de la inteligencia artificial ed. Sanz y Torres

[4] Apuntes asignatura “Inteligencia en Redes de Comunicaciones”. Ingeniería de Telecomunicación, 5º Universidad Carlos III de Madrid

[5] Es.wikipedia.org http://es.wikipedia.org/wiki/

[6] www.lawebdelprogramador.com [7] www.mathworks.com