sistema recomendaciones recomendacion modelo machine learning hacer filtrado ejemplo contenido como colaborativo basados basado algoritmos mahout recommendation-engine mahout-recommender

mahout - recomendaciones - ¿Cuál es la diferencia entre el filtro colaborativo basado en elementos y el contenido?



sistema de recomendacion python (2)

Filtrado colaborativo basado en artículos

La recomendación original basada en el artículo se basa totalmente en la clasificación de los elementos del usuario (por ejemplo, un usuario calificó una película con 3 estrellas o un usuario "gustó" un video). Cuando calcula la similitud entre los elementos, no debe saber nada más que el historial de calificaciones de todos los usuarios. Por lo tanto, la similitud entre los elementos se calcula en función de las calificaciones en lugar de los metadatos del contenido del elemento.

Dejame darte un ejemplo. Supongamos que solo tiene acceso a algunos datos de calificación como a continuación:

user 1 likes: movie, cooking user 2 likes: movie, biking, hiking user 3 likes: biking, cooking user 4 likes: hiking

Supongamos que ahora desea hacer recomendaciones para el usuario 4.

Primero creas un índice invertido para los artículos, obtendrás:

movie: user 1, user 2 cooking: user 1, user 3 biking: user 2, user 3 hiking: user 2, user 4

Ya que esta es una clasificación binaria (como o no), podemos usar una medida de similitud como Jaccard Similarity para calcular la similitud de elementos.

|user1| similarity(movie, cooking) = --------------- = 1/3 |user1,2,3|

En el numerador, user1 es el único elemento que tienen tanto la película como la cocina. En el denominador, la unión de película y cocina tiene 3 usuarios distintos (usuario1,2,3). |.| Aquí denota el tamaño del conjunto. Así que sabemos que la similitud entre la película y la cocina es 1/3 en nuestro caso. Simplemente haga lo mismo para todos los pares de elementos posibles (i,j) .

Una vez que haya terminado con el cálculo de similitud para todos los pares, por ejemplo, debe hacer una recomendación para el usuario 4.

  • Mire la puntuación de similarity(hiking, x) de similarity(hiking, x) donde x es cualquier otra etiqueta que pueda tener.

Si necesita hacer una recomendación para el usuario 3, puede agregar la puntuación de similitud de cada elemento en su lista. Por ejemplo,

score(movie) = Similarity(biking, movie) + Similarity(cooking, movie) score(hiking) = Similarity(biking, hiking) + Similarity(cooking, hiking)

Recomendación basada en el contenido

El punto basado en el contenido es que debemos conocer el contenido tanto del usuario como del elemento. Por lo general, construye el perfil de usuario y el perfil de elemento utilizando el contenido del espacio de atributos compartido. Por ejemplo, para una película, la representa con las estrellas de cine y los géneros (por ejemplo, mediante una codificación binaria). Para el perfil de usuario, puede hacer lo mismo basándose en que a los usuarios les gustan algunas estrellas de cine / géneros, etc. Luego, la similitud de usuario y elemento se puede calcular utilizando, por ejemplo, la similitud de coseno.

Aquí hay un ejemplo concreto:

Supongamos que este es nuestro perfil de usuario (usando codificación binaria, 0 significa no similar, 1 significa similar), que contiene las preferencias del usuario sobre 5 estrellas de cine y 5 géneros de película:

Movie stars 0 - 4 Movie Genres user 1: 0 0 0 1 1 1 1 1 0 0 user 2: 1 1 0 0 0 0 0 0 1 1 user 3: 0 0 0 1 1 1 1 1 1 0

Supongamos que este es nuestro perfil de película:

Movie stars 0 - 4 Movie Genres movie1: 0 0 0 0 1 1 1 0 0 0 movie2: 1 1 1 0 0 0 0 1 0 1 movie3: 0 0 1 0 1 1 0 1 0 1

Para calcular qué tan buena es una película para un usuario, usamos la similitud de coseno :

dot-product(user1, movie1) similarity(user 1, movie1) = --------------------------------- ||user1|| x ||movie1|| 0x0+0x0+0x0+1x0+1x1+1x1+1x1+1x0+0x0+0x0 = ----------------------------------------- sqrt(5) x sqrt(3) = 3 / (sqrt(5) x sqrt(3)) = 0.77460

Similar:

similarity(user 2, movie2) = 3 / (sqrt(4) x sqrt(5)) = 0.67082 similarity(user 3, movie3) = 3 / (sqrt(6) x sqrt(5)) = 0.54772

Si desea dar una recomendación para el usuario i , simplemente elija la película j que tenga la mayor similarity(i, j) .

Espero que esto ayude.

Estoy desconcertado acerca de cuál es la recomendación basada en artículos, como se describe en el libro " Mahout in Action " Hay un algoritmo en el libro:

for every item i that u has no preference for yet for every item j that u has a preference for compute a similarity s between i and j add u''s preference for j, weighted by s, to a running average return the top items, ranked by weighted average

¿Cómo puedo calcular la similitud entre los elementos? Si utiliza el contenido, ¿no es una recomendación basada en el contenido?


"Basado en artículos" realmente significa "basado en elementos similares". Puedes poner aquí la métrica de similitud que quieras. Sí, si se basa en contenido, como una similitud de coseno sobre vectores de término, también podría llamarse "basado en contenido".