Pregunta

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

Ahora, mi problema es que no estoy seguro de por dónde comenzar 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 requieren.

He mirado algunas de las publicaciones en Grouplens.org, específicamente "Hacia un algoritmo escalable de KNN CF: Explorando aplicaciones efectivas de agrupación. "(PDF) Soy bastante bueno para comprender todo hasta la página 5" Generación de predicción "

PD: No estoy buscando exactamente una explicación de lo que está sucediendo, aunque eso 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.

¿Fue útil?

Solución

Permítanme explicar el procedimiento que introdujeron los autores (como lo entendí):

Aporte:

  • Datos de entrenamiento: usuarios, elementos y calificaciones de usuarios a estos elementos (no necesariamente cada usuario calificó todos los elementos)
  • Usuario objetivo: un nuevo usuario con algunas calificaciones de algunos elementos
  • Elemento objetivo: Un elemento no calificado por el usuario objetivo que nos gustaría predecir una calificación para él.

Producción:

  • Predicción para el elemento objetivo por el usuario objetivo

Esto se puede repetir para un montón de elementos, y luego devolvemos los elementos N-top (calificaciones más altas predichas)

Procedimiento:
El algoritmo es muy similar al ingenuo Knnn Método (busque todos los datos de capacitación para encontrar usuarios con calificaciones similares al usuario objetivo, luego combine sus calificaciones para dar predicción [votación]).
Este método simple no escala muy bien, a medida que aumenta el número de usuarios/elementos.

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

Tenga en cuenta que la medida de similitud utilizada es la correlación coeficiente, y el algoritmo de agrupación es el algoritmo de medias k bisectantes. Simplemente podemos usar el estándar kmeanos, y podemos usar otras métricas de similitud, como distancia euclidiana o distancia 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

Espero que esto aclare un poco las cosas :)

Otros consejos

Programación de inteligencia colectiva es una introducción realmente fácil de usar al campo, con mucho código de ejemplo en Python. Por lo menos, ayudará a preparar el escenario para comprender las matemáticas en los documentos académicos sobre el tema.

Algoritmo de la web inteligente (H Marmanis, D Babenko, Manning Publishing) es un texto introductorio sobre el subjetamento. También cubre los conceptos de búsqueda, pero su enfoque principal es con la clasificación, los sistemas de recomendación y demás. Esta debería ser una buena introducción para su proyecto, lo que le permite hacer las preguntas correctas y profundizar en el que las cosas parezcan más prometedoras o prácticas en su situación.

El libro también incluye un "repaso" de temas matemáticos 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 Serie de conferencias 18.06 del profesor Gilbert Strand Disponible en MIT OpenCourseWare.

El álgebra lineal no es la única forma de salvación ;-) Puede que sea útil repasar conceptos de estadísticas básicas como distribución, covarianza, inferencia bayesiana ...

Probablemente deberías saber:

  • álgebra lineal
  • inteligencia artificial / aprendizaje automático / estadísticas

Agradable tener:

  • espacios métricos
  • topología
  • EDA / estadísticas robustas
  • álgebra afín
  • análisis funcional
  • Teoría de grafos

Dicho esto, Puedes llegar lejos con solo sentido común. Si tiene una lista de propiedades que desea que su sistema satisfaga, podrá hacer mucho con solo escribir código que satisfaga esas propiedades.

Los ejemplos pueden ser:

  • Nunca hagas una recomendación "mala"
  • La puntuación aumenta monotónicamente en algunos parámetros
  • Mantenga la puerta abierta para la idea de mejora X, Y, Z que tenemos para el futuro.

De la documentación oficial del API ABRACADABRA RECOMENDOR, comienzas distinguiendo entre:

  • Asignaturas: 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 que tienen ciertos atributos o contenido 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 define el tema. En el ejemplo donde el tema es una película, un atributo podría ser el género, por ejemplo, aventura, acción, ciencia ficción. Un atributo también podría ser 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. ¡Lo que sea!

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

  • CaudalHay un flujo general (orden en el que se realizan las 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 llenar el motor de recomendación con los sujetos y sus atributos correspondientes. Por lo general, esto solo debe hacerse una vez, pero también se puede hacer dinámicamente. Por ejemplo, si recomienda artículos, es posible que desee 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 ID única de su usuario, puede capacitar al sistema de recomendación gustando o desaliñando ciertos sujetos 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 qué atributos prefiere (por ejemplo, qué géneros, palabras clave, fecha de lanzamiento, etc.). Esta parte depende realmente de usted decidir y la lógica de su proyecto.

Una vez que el sistema ha sido capacitado (lleno de sujetos y preferencias del usuario), podemos llamar al motor para proporcionarnos recomendaciones. Puede hacer esto una vez, pero también dinámicamente (reentrenando así el modelo después de cada retroalimentación que recibe del usuario). A medida que el usuario proporciona más retroalimentación, el modelo mejora y el enfoque de recomendaciones de las preferencias reales del usuario.

Tenga en cuenta que con el API ABRACADABRA RECOMENDOR Solo necesita enviar llamadas HTTP a la API para capacitar a su modelo y recibir recomendaciones. Se puede acceder a la API utilizando 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 ...) .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top