8

Estoy pensando en escribir una aplicación para clasificar películas en un HTPC según lo que les gusta a los miembros de la familia.Algoritmos para encontrar cosas que a un usuario le gustaría según otros usuarios. Me gusta

No sé estadísticas o AI, pero el material here parece muy jugoso. No sabría por dónde empezar.

Esto es lo que quiero lograr:

  1. componen un conjunto de muestras de cada usuario le gusta, la calificación de cada muestra de atributos por separado. Por ejemplo, tal vez a un usuario le gusten mucho las películas occidentales, por lo que el género occidental tendría un poco más de peso para ese usuario (y así sucesivamente para otros atributos, como actores, director, etc.).

  2. Un usuario puede obtener sugerencias basadas en los gustos de los otros usuarios. Por ejemplo, si tanto el usuario A y B como Spielberg (conexión entre los usuarios) y el usuario B adoran Batman, pero el usuario A detesta a Katie Holmes, pondere la película para el usuario A en consecuencia (de nuevo, cada atributo por separado, por ejemplo, tal vez al usuario A no le gustan mucho las películas de acción, así que disminuya un poco la calificación, y como Katie Holmes no es la estrella principal, no lo tome en cuenta tanto como los demás atributos).

Básicamente, comparar conjuntos del usuario A similar a los conjuntos de usuario B, y llegar a una calificación para el usuario A.

que tienen una idea cruda sobre cómo implementar esto, pero estoy Algunas mentes brillantes ya han pensado en una solución mucho mejor, entonces ... ¿Alguna sugerencia?

En realidad, después de una investigación rápida, parece que un filtro bayesiano funcionaría. Si es así, ¿sería este el mejor enfoque? ¿Sería tan simple como simplemente "normalizar" los datos de la película, entrenar un clasificador para cada usuario y luego simplemente clasificar cada película?

Si tu sugerencia incluye algunos conceptos de fusión cerebral (no tengo experiencia en estos temas, especialmente en IA), te agradecería si también incluyes una lista de algunos conceptos básicos para que investigue antes de sumergirte en la carne cosas.

Gracias!

+1

Duplicado http://stackoverflow.com/questions/626220/how-do-recommendation-systems-work – cletus

+0

Gracias por la referencia. Estoy buscando una respuesta más específica, basada en mis ejemplos. Si bien sería interesante leer todo lo que pueda sobre los sistemas de recomendación, preferiría que me guiaran en la dirección correcta primero :) – Ivan

Respuesta

2

Hay unos algoritmos que son buenos para esto:

ARTMAP: grupos via probabilidad uno contra el otro (esto no es rápido, pero es lo mejor para su problema IMO)

ARTMAP posee un grupo de atributos comunes y determina la probabilidad de similitud mediante porcentajes. ARTMAP

KMeans: Este separa los vectores por la distancia que son el uno del otro KMeans: Wikipedia

PCA: se separar el promedio de todos los valores de los bits varing.Esto es lo que usarías para hacer detección de rostros y sustracción de fondo en Computer Vision. PCA

+0

Gracias. Al leer sobre ARTMAP, parece un buen candidato. Como entiendo el código mejor que los artículos científicos, encontré este http://users.visualserver.org/xhudik/art/doc/index.html y generé este http: // stackoverflow.com/questions/1609296/artmap-adaptive-resonance-theory-implementationtios-basics ... KMeans también se ve interesante, pero uno a la vez :) – Ivan

+0

Este libro tiene un tutorial de introducción realmente sencillo en ... http: // www .amazon.com/AI-Application-Programming-Tim-Jones/dp/1584502789 Sin embargo, IRC la probabilidad Fn tiene un error. – monksy

4
+0

Hay algunas cosas muy interesantes allí, además de algunas recomendaciones de lectura que voy a seguir. ¡Muchas gracias! – Ivan

2

El algoritmo del vecino K-más cercano puede estar a la vuelta de la esquina.

+0

Esa parece lo suficientemente simple como para que yo pueda implementarla. Un buen recurso de aprendizaje, gracias! – Ivan

4

Esto es similar a this question donde el OP quería construir un sistema de recomendación. En pocas palabras, se nos da un conjunto de datos de capacitación que consta de calificaciones de usuarios a películas (clasificación de 1-5 estrellas, por ejemplo) y un conjunto de atributos para cada película (año, género, actores, ...). Queremos construir un recomendador para que genere una posible calificación para películas invisibles. Lo que los datos inpt parece:

user movie year genre ... | rating 
--------------------------------------------- 
    1 1  2006 action   | 5 
    3 2  2008 drama   | 3.5 
    ... 

y para una película X clasificar:

10 20  2009 drama ? 

queremos predecir una clasificación. Hacer esto para todas las películas que no se vean, luego clasificar según la calificación de película prevista y sacar los 10 mejores le da un sistema de recomendaciones.

El enfoque más simple es utilizar un algoritmo k-nearest neighbor. Entre las películas calificadas, busque las más cercanas a la película X y combine sus calificaciones para producir una predicción. Este enfoque tiene la ventaja de ser muy simple y fácil de implementar desde cero.

Existen otros enfoques más sofisticados. Por ejemplo, puede crear un decision tree, ajustar un conjunto de reglas sobre los datos de entrenamiento. También puede usar Bayesian networks, artificial neural networks, support vector machines, entre muchos otros ... Pasar por cada uno de estos no será fácil para alguien sin el trasfondo adecuado. Todavía espero que use una herramienta/biblioteca externa. Ahora parece que está familiarizado con Bayesian Networks, por lo que una simple red naive bayes, de hecho podría ser muy poderosa. Una ventaja es que permite la predicción en datos faltantes.

La idea principal sería más o menos la misma; tome los datos de entrada que tenga, entrene un modelo, luego úselos para predecir la clase de nuevas instancias.

Si quiere jugar con diferentes algoritmos en un paquete simple e intuitiva que no requiere ninguna programación, le sugiero que tome un vistazo a Weka (mi primera elección), Orange o RapidMiner. La parte más difícil sería preparar el conjunto de datos con el formato requerido. El resto es tan fácil como elegir qué algoritmo y aplicarlo (¡todo en unos pocos clics!)

Supongo que para alguien que no busque entrar en demasiados detalles, recomendaría ir con el método vecino más cercano ya que es intuitivo y fácil de implementar .. Todavía vale la pena investigar la opción de usar Weka (o alguna de las otras herramientas).

+0

Respuesta impresionante, gracias. Voy a bucear en Weka este fin de semana y ver qué encuentro. – Ivan

Cuestiones relacionadas