Escolar Documentos
Profissional Documentos
Cultura Documentos
1 Entrega
1.1 Qu
Hay que entregar lo siguiente: 1) una memoria con las respuestas a las tareas 1 a 6 con capturas de pantalla que muestran los resultados obtenidos en las diferentes ejecuciones, 2) el fichero dataset.ser, 3) la implementacin de Jaccard de la tarea 3.
1.2 Cuando
El Jueves 6 de Octubre antes de la sesin de prctica.
1.3 Como
Cada miembro del grupo entrega la prctica en un zip en el Moodle.
Se ve que no hace falta declarar los tipos de las variables. Ya estamos listos para probar el cdigo de M&B!
Tears in Heaven
La Bamba
5 5 1
5 5 2
4 1
5 4
4 5
5 5 3 4 5 2 1
Es decir que tenemos 3 usuarios y 11 canciones. A primera vista Frank y Constantine son ms similares que Catherine. Vamos a cargar los ejemplos y probar la similitud entre los usuarios con el siguiente cdigo (copiar y pegarlo en el BeanShell), donde el ndice 0 se corresponde al usuario Frank, el ndice 1 a Constantine y el ndice 2 a Catherine. MusicUser[] mu = MusicData.loadExample(); mu[0].getSimilarity(mu[1],0); mu[0].getSimilarity(mu[1],1); mu[0].getSimilarity(mu[2],0); mu[1].getSimilarity(mu[2],0); mu[2].getSimilarity(mu[1],0); mu[0].getSimilarity(mu[0],0); mu[0].getSimilarity(mu[0],1); Figura 1: prueba de similitud El mtodo esttico loadExample de la clase MusicData carga los datos (usuarios, con sus ratings de cada cancin). La clase MusicData con su implementacin de loadExample se encuentra en el paquete iweb2.ch3.collaborative.data.
El mtodo getSimilarity(usuario,tipoDeSimilitud) de la clase MusicUser devuelve la similitud entre el usuario actual y el usuario pasado en argumento. La similitud implementada en el cdigo es la similitud basada en la Distancia Euclidiana 1) normalizada y 2) que usa la funcin de suavizacin tanh. Si el tipo de similitud es 1, entonces la similitud se ajusta por el ratio de
tems comunes. Si es 0, entonces no hay ajuste. Revisar el cdigo de getSimilarity en MusicUser para ver como se implementa. TAREA 1:: Decir qu resultado se espera de las llamadas en la Figura 1 y por qu, y comprobar que su prediccin es correcta en la ejecucin del cdigo. Modificar el cdigo de MusicData para aadir un nuevo usuario Alexandra, que tiene valoraciones para una sola cancin, Tears In Heaven, que valora a 1. Hay que ampliar el tamao del array de usuarios. Compilar y hacer un build del cdigo, luego copiar el jar bajo nombre iweb2.jar a la carpeta deploy/lib de iWeb2. Salir de beanshell y volver a entrar para que se cargue de nuevo el jar. TAREA 2: Qu devuelve el mtodo getSimilarity entre los usuarios Catherine y Alexandra? Por qu? Le parece justo este resultado, y por qu? Qu ajuste/modificacin propondras a la medida de similitud usada? La medida Jaccard calcula la similitud entre dos objetos basndose en atributos binarios. La formula es as: Coeficiente Jaccard = f 11 / ( f01 + f10 + f 11 ) Donde f 11 serian los tems valorados por ambos usuarios, f01 y f10 los tems valorados por un usuario pero no el otro. O sea que la medida Jaccard es la interseccin de valoraciones de tems sobre la unin. Para tener en cuenta atributos no binarios, existe la medida Jaccard Extendida, llamada Tanimoto, que se calcula as: Tanimoto(x,y) = x y / ( || x ||2 + || y ||2 - x y ) Donde ||x|| es la longitud del vector y x y el producto escalar. TAREA 3: Implementar la medida de similitud Jaccard extendida (Tanimoto) en el mtodo getSimilarity de MusicUser. Qu diferencia observa con las otras similitudes y por qu? No hay que olvidar sustituir el iweb2.jar por el nuevo build despus de la implementacin de la medida Jaccard extendida.
El conjunto de datos as creado se guarda en un fichero para poder volver a cargarlo y usarlo de nuevo ms adelante. Observa como los usuarios similares a Bob tienen nombres que empiezan por una letra entre A y D, al contrario de los usuarios similares a John. Tambin observa que las predicciones de ratings para las canciones recomendadas oscilan entre 4 y 5 para Bob, y entre 1 y 3 para John. Adems, aunque los ratings son nmeros enteros, las predicciones de ratings son nmeros reales, ya que indican el grado de la valoracin.
BaseDataset ds = BaseDataset.load("C:/dataset.ser"); Delphi delphi = new Delphi(ds,RecommendationType.ITEM_BASED); delphi.setVerbose(true); MusicUser mu1 = ds.pickUser("Bob"); delphi.recommend(mu1); MusicItem mi = ds.pickItem("La Bamba"); delphi.findSimilarItems(mi); Figura 3: creacin de recomendaciones basado en items similares
TAREA 5: Qu diferencia hay entre las recomendaciones de Bob con FC basado en tems vs con FC basado en usuarios?
TAREA 6: Hacer una traza del siguiente cdigo de la Figura 3: Delphi delphi = new Delphi(ds,RecommendationType.ITEM_BASED); MusicUser mu1 = ds.pickUser("Bob"); delphi.recommend(mu1); Comentando con detalle sobre todo los mtodos que cambian con respeto al cdigo de FC basado en usuarios ya comentado en la tarea 4.