2010-10-29 10 views
11

Estoy buscando escribir un motor de recomendación básico que tomará y almacenará una lista de ID numéricos (que se relacionan con libros), comparará esos con otros usuarios con un gran volumen de ID idénticos y recomendará libros basados ​​en esos hallazgos.Escribir un motor de recomendación básica

Después de buscar en Google, encontré this article, que analiza una implementación de un algoritmo de Slope One, pero parece depender de que los usuarios clasifiquen los elementos que se comparan. Idealmente, me gustaría lograr esto sin la necesidad de que los usuarios proporcionen calificaciones. Supongo que si el usuario tiene este libro en su colección, lo quiere.

Si bien me parece que podría establecer una calificación predeterminada de 10 para cada libro, me pregunto si existe un algoritmo más eficiente que podría estar usando. Idealmente, me gustaría calcular estas recomendaciones sobre la marcha (evitando el cálculo de lotes). Cualquier sugerencia sera apreciada.

Respuesta

11

Un algoritmo básico para su tarea es un sistema de recomendación collaborative memory-based. Es bastante fácil de implementar, especialmente cuando sus artículos (en sus libros de casos) solo tienen identificaciones y ninguna otra característica.

Pero, como usted ya dijo, necesita algún tipo de calificación de los usuarios de los artículos. Pero no piense en una calificación como en 1 a 5 estrellas, sino más bien como una opción binaria como 0 (libro no leído) y 1 (lectura de libro), o interesado en o que no esté interesado en.

A continuación, utilice una adecuada distance measure para calcular la diferencia entre todos los usuarios (y sus conjuntos de material) y usted mismo, seleccione las n usuarios más similares a sí mismo (de quien sea el usuario activo es) y seleccionar su ítems que no ha calificado (o considerado, opción 0).

Creo que en este caso, una buena medida de distancia sería la distancia 1-norma, o a veces llamada la distancia de Manhattan. Pero este es un punto donde tienes que experimentar con tu conjunto de datos para obtener los mejores resultados.

Una buena introducción a este tema es el artículo de Breese et al., análisis empírico de Predictive algoritmos para el filtrado colaborativo. Disponible here (PDF). Para un trabajo de investigación, es una lectura fácil.

+0

¿En base a qué recomienda la norma L1? – isomorphismes

+0

@Lao Tzu: puramente en mis propias medidas y pruebas empíricas. Cuando utilicé datos con solo "calificaciones" binarias (como el libro dentro o fuera de la colección), me dio buenos resultados (como mejor que la mayoría de las otras normas). Pero como dije, este es un punto en el que tienes que experimentar por ti mismo. O busque algunos trabajos de investigación sobre estas preguntas. – dermatthias

+0

Bastante suficiente. En el sistema en el que estoy trabajando usamos normas que son específicas del producto. Me resultó más simple diseñar el espacio métrico alrededor de los detalles para un cliente determinado. – isomorphismes

2

El Apriori algorithm puede darle recomendaciones basadas en qué conjunto de elementos es interesante para el usuario. Debe definir su propia noción de conjunto interesante, p. los artículos que el usuario ha comprado en un solo pedido, los artículos que el usuario ha comprado alguna vez, los artículos que el usuario ha comentado favorablemente, los artículos que el usuario ha explorado en detalle.

El algoritmo Apriori requiere procesamiento por lotes, pero existen mejoras que pueden no requerir procesamiento por lotes. Estos son AprioriTid y AprioriHybrid (lo siento, no hay enlace).

0

@ndg Eso es muy perspicaz y como alguien que trabaja en esta área, creo que tiene razón al usar lo que equivale a un ~ {0,1} sistema de calificación. La mayoría de las diferencias en las calificaciones de estrellas son solo ruido. Puedes permitir {0,1,2} con un "me encanta!" pero de nuevo los usuarios no son consistentes en el uso de dichos botones, por lo que puede ser bueno limitar la elección. Hotpot les permite a los usuarios tener 10 super-plus-loves que lo mantienen constante.

Mi consejo es que tenga cuidado con la pintura con demasiadas pinceladas. En otras palabras, un algoritmo universal es más simple, pero se pierde la oportunidad de ser oportunista.

Tome un conjunto de datos pequeño con el que esté muy familiarizado, como hacer que algunos de sus amigos utilicen el sitio, y tenga en cuenta todos los factores que podrían tener una influencia positiva o negativa en las clasificaciones de distancia de usuario. Luego, en el proceso de modelado debe decidir qué factores y cómo/cuánto.

Tenga en cuenta que el número de normas es aproximadamente el tamaño de la cantidad de curvas. Y es posible que desee considerar un quasinorm, pseudonorm, o incluso normas no continuas.

No veo ninguna razón para utilizar la norma de Manhattan, de hecho, usaría normas basadas en gráficos para calcular la distancia entre los usuarios.

Cuestiones relacionadas