2010-11-20 15 views
17

Tenga paciencia con mi escritura, ya que mi inglés no es competente.¿Cómo puedo implementar un motor de recomendación?

Como programador, quiero aprender sobre el algoritmo, o la inteligencia de aprendizaje automático, que se implementan debajo de los sistemas de recomendación o basados ​​en los sistemas. Por ejemplo, el ejemplo más obvio sería de Amazon. Tienen un buen sistema de recomendación. Llegan a conocer: si te gusta esta , también al igual que , o algo que se le parezca: ¿Qué porcentaje de gente como esta y que juntos.

Por supuesto, sé que Amazon es un gran sitio web y han invertido mucho cerebro y dinero en estos sistemas. Pero, en el núcleo básico, ¿cómo podemos implementar algo así dentro de nuestra base de datos? ¿Cómo podemos identificar cómo un objeto se relaciona con el otro? ¿Cómo podemos construir una unidad estadística que maneje este tipo de cosas?

Agradecería que alguien pudiera señalar algunos algoritmos. O, básicamente, señale algunas buenas referencias/libros directos de los que todos podamos aprender. ¡Gracias a todos!

+0

Amazon [patente] (http://www.google.com/patents/US7113917) describe su enfoque en profundidad. – arao6

Respuesta

18

Existen 2 tipos diferentes de motores de recomendación.

Lo más simple es basado en elementos, es decir, "los clientes que compraron el producto A también compraron el producto B". Esto es fácil de implementar. Almacene una matriz simétrica dispersa nxn (donde n es el número de elementos). Cada elemento (m [a] [b]) es el número de veces que alguien ha comprado el artículo 'a' junto con el elemento 'b'.

El otro está basado en el usuario. Es decir "a la gente como usted a menudo le gustan las cosas como esta". Una posible solución a este problema es la agrupación k-means. es decir, construir un conjunto de clusters donde los usuarios con gustos similares se colocan en el mismo clúster y hacer sugerencias en función de los usuarios en el mismo clúster.

Una solución mejor, pero una aún más complicada es una técnica llamada Restricted Boltzmann Machines. Hay una introducción a ellos here

+4

@HTa: La distinción entre "similitud del cliente" y "similitud del producto" que dibuja @dan_waterworth es la línea divisoria más fundamental entre las estrategias de motor de recomendación. Sin embargo "restringidas máquinas de Boltzmann" y "K-means clustering" deben ser vistos como sustitutos de "técnica sea cual sea el aprendizaje de máquina que desee utilizar". Tanto la similitud del cliente como la similitud del producto se pueden hacer con una matriz y se puede hacer con A.I./stats/M.L. Puedes leer acerca de cualquiera en Wikipedia. – isomorphismes

3

Un primer intento podría tener este aspecto:

//First Calculate how often any product pair was bought together 
//The time/memory should be about Sum over all Customers of Customer.BoughtProducts^2 
Dictionary<Pair<ProductID,ProductID>> boughtTogether=new Dictionary<Pair<ProductID,ProductID>>(); 
foreach(Customer in Customers) 
{ 
    foreach(product1 in Customer.BoughtProducts) 
     foreach(product2 in Customer.BoughtProducts) 
      { 
       int counter=boughtTogether[Pair(product1,product2)] or 0 if missing; 
       counter++; 
       boughtTogether[Pair(product1,product2)]=counter; 
      } 
} 

boughtTogether.GroupBy(entry.Key.First).Select(group.OrderByDescending(entry=>entry.Value).Take(10).Select(new{key.Second as ProductID,Value as Count})); 

Primero calcular con qué frecuencia cada par de productos fue comprado juntos, y luego agruparlos por el producto y seleccionar los mejores 20 otros productos comprados con ella . El resultado debe colocarse en algún tipo de diccionario con la identificación del producto.

Esto puede volverse demasiado lento o costar demasiada memoria para bases de datos grandes.

Cuestiones relacionadas