8

Estoy en proceso de diseñar un sitio web que se basa en el concepto de recomendar varios artículos a los usuarios en función de sus gustos. (es decir, elementos que han calificado, elementos agregados a su lista de favoritos, etc.) Algunos ejemplos de esto son Amazon, Movielens y Netflix.Creación de un filtro colaborativo/Sistema de recomendación

Ahora, mi problema es que no estoy seguro de por dónde empezar con respecto a la parte matemática de este sistema. Estoy dispuesto a aprender las matemáticas que se requieren, es solo que no sé qué tipo de matemáticas se requiere.

He visto algunas de las publicaciones en Grouplens.org, específicamente "Towards a Scalable kNN CF Algorithm: Exploring Effective Applications of Clustering." (pdf) Soy bastante bueno entendiendo todo hasta la página 5 "Prediction Generation"

p.s. No estoy buscando exactamente una explicación de lo que está pasando, aunque podría ser útil, pero estoy más interesado en las matemáticas que necesito saber. De esta manera puedo entender lo que está pasando.

Respuesta

8

Programming Collective Intelligence es una introducción al campo realmente fácil de usar, con muchos códigos de ejemplo en Python. Por lo menos, ayudará a establecer el escenario para la comprensión de las matemáticas en los trabajos académicos sobre el tema.

+0

¡Gracias por la sugerencia de libro! – John

5

Algorithm of the Intelligent Web (H Marmanis, D Babenko, Manning publishing) es un texto introductorio sobre la asignatura. También cubre los conceptos de búsqueda, pero su enfoque principal es la clasificación, los sistemas de recomendación y demás. Esta debería ser una buena guía para su proyecto, permitiéndole hacer las preguntas correctas y profundizar donde las cosas parezcan más prometedoras o prácticas en su situación.

El libro también incluye un "repaso" de temas de matemáticas relevantes (principalmente álgebra lineal), pero este repaso es mínimo; lo harás mejor en la web.

Una forma agradable de descubrir o volver a álgebra lineal es seguir Prof. Gilbert Strand's 18.06 lecture series disponible en MIT OpenCourseWare.

álgebra lineal

no es el único camino para la salvación ;-) puede que le resulte útil para repasar los conceptos básicos de estadística, como la distribución, la covarianza, la inferencia bayesiana ...

+1

Gracias, echaré un vistazo al libro. Y gracias por la serie de conferencias. – John

10

Voy a explicar el procedimiento que el autores introdujeron (como lo entendía):

de entrada:

  • los datos de entrenamiento: usuarios, artículos y notas de los usuarios a estos artículos (no necesariamente cada usuario una clasificación de todos los material)
  • usuario de destino: un nuevo usuario con algunas calificaciones de algunos artículos
  • Estimada de: un artículo sin clasificar por el usuario de destino que nos gustaría predecir una calificación para ello.

de salida:

  • predicción para el elemento de destino por el usuario de destino

Esto se puede repetir para un grupo de artículos, y luego vuelta los artículos N-top (las calificaciones más altas pronosticadas)

Procedimiento:
El algoritmo es muy similar al método ingenuo KNN (busca todos los datos de entrenamiento para encontrar usuarios con calificaciones similares al usuario objetivo, luego combina sus calificaciones para dar predicción [votación]).
Este método simple no se escala muy bien, ya que la cantidad de usuarios/elementos aumenta.

El algoritmo propuesto es a agruparse en primer lugar los usuarios de formación en K grupos (grupos de personas que calificaron artículos de manera similar), donde K < < N (N es el número total de usuarios).
Luego escaneamos esos clústeres para encontrar cuál es el más cercano al usuario objetivo (en lugar de mirar a todos los usuarios de capacitación).
Finalmente seleccionamos l de esos y hacemos nuestra predicción como un promedio ponderado por la distancia a los l clusters.

Tenga en cuenta que la medida de similitud utilizada es el coeficiente correlation, y el algoritmo de agrupación es el algoritmo de K-Means bisectante. Simplemente podemos usar el estándar kmeans, y podemos usar otras métricas de similitud, como Euclidean distance o distancia del coseno.

La primera fórmula en la página 5 es la definición de la correlación:

corr(x,y) = (x-mean(x))(y-mean(y))/std(x)*std(y) 

La segunda fórmula es básicamente un promedio ponderado:

predRating = sum_i(rating_i * corr(target,user_i))/sum(corr(target,user_i)) 
       where i loops over the selected top-l clusters 

la esperanza que esto aclare las cosas un poco :)

+1

Gracias, todo sigue siendo griego para mí. Algún día volveré y todo tendrá sentido. :) – John

0

Probablemente deberías saber:

  • álgebra lineal
  • artificiales de aprendizaje de inteligencia/máquina/estadística

bueno tener:

  • espacios métricos
  • topología
  • EDA/estadística robusta
  • álgebra afín
  • análisis funcional
  • teoría de grafos

Dicho esto, puede ir muy lejos con sólo el sentido común. Si tiene una lista de propiedades que desea que satisfaga su sistema, podrá hacer muchas cosas simplemente escribiendo un código que satisfaga esas propiedades.

Algunos ejemplos pueden ser:

  • Nunca haga un "malo" recomendación
  • puntuación aumenta monotónicamente dentro de unos parámetros
  • mantener la puerta abierta para X, Y, idea de las mejoras Z que tenemos para abajo de la línea.
0

De the official documentation del Abracadabra Recommender API, se empieza por distinguir entre:

  • Los sujetos: Estas son las entidades que desea recomendar a un usuario. Una película o un artículo es, por ejemplo, un tema. Los sujetos se caracterizan por tener ciertos atributos o contenidos que los distinguen entre los diversos sujetos.

  • Atributos: Un atributo es un término genérico para una característica de un sujeto. Esto puede ser cualquier cosa y realmente depende de cómo definas el tema. En el ejemplo donde el sujeto es una película, un atributo podría ser el género, p. aventura, acción, ciencia ficción. Un atributo podría ser también una palabra clave que está presente en la descripción de esta película, el nombre del actor, el año en que se publicó una película, etc. ¡Usted lo nombra!

  • Usuarios: Como su nombre lo indica, esta es la persona que desea recibir recomendaciones de ciertos temas.El usuario crea un perfil de usuario que le gusta atributos o temas (y, posteriormente, los atributos adjuntos).

  • flujo Hay un flujo general (orden en el que se realiza cosas) que es relevante para cualquier tipo de sistema de recomendación y que también es intuitivamente fácil de entender.

Lo primero que siempre debemos hacer es completar el motor de recomendación con los temas y sus atributos correspondientes. Por lo general, esto solo debe hacerse una vez, pero también se puede hacer de forma dinámica. Por ejemplo, si está recomendando artículos, puede que quiera hacer esto cada vez que se agrega un artículo a su sitio web o blog.

El segundo paso es ingresar las preferencias de un usuario. Junto con la identificación única de su usuario, puede entrenar el sistema de recomendación al agradar o desagradar ciertos temas o atributos. Por ejemplo, a un usuario se le puede mostrar una lista de películas y se le da la opción de darle una calificación a cada película. Alternativamente, el usuario puede construir un perfil ingresando los atributos que prefiere (por ejemplo, qué géneros, palabras clave, fecha de lanzamiento, etc.). Esta parte depende realmente de usted para decidir y la lógica de su proyecto.

Una vez que el sistema ha sido entrenado (lleno de temas y preferencias del usuario), podemos llamar al motor para darnos recomendaciones. Puede hacerlo una vez, pero también de forma dinámica (por lo tanto, volver a capacitar el modelo después de cada respuesta que reciba del usuario). A medida que el usuario proporciona más comentarios, el modelo mejora y las recomendaciones se acercan a las preferencias reales del usuario.

Tenga en cuenta que con el Abracadabra Recommender API solo necesita enviar llamadas HTTP a la API para capacitar a su modelo y recibir recomendaciones. Se puede acceder a la API usando cualquier idioma, por lo tanto, desde su sitio web o aplicación (Angular, React, Javascript ...) o su servidor (NodeJS, Curl, Java, Python, Objective-C, Ruby, .NET ...) .

Cuestiones relacionadas