algorithm - vehiculos - ¿Cómo puedo implementar un motor de recomendación?
services flhsmv gov mvcheckweb (4)
Creo que hablas de sistemas de base de conocimiento . No recuerdo el lenguaje de programación (tal vez LISP), pero hay implementaciones. También, mira a OWL .
Por favor tenga paciencia con mi escritura, ya que mi inglés no es competente.
Como programador, quiero aprender sobre el algoritmo, o la inteligencia de aprendizaje automático, que se implementan bajo sistemas de recomendación o sistemas relacionados. Por ejemplo, el ejemplo más obvio sería de Amazon. Tienen un sistema de recomendación realmente bueno. Llegan a saber: si te gusta esto , también te puede gustar eso , o algo más como: a qué porcentaje de personas les gusta esto y lo otro juntos.
Por supuesto, sé que Amazon es un gran sitio web e invirtieron mucho cerebro y dinero en estos sistemas. Pero, en el núcleo muy 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 otro? ¿Cómo podemos construir una unidad estadística que maneje este tipo de cosas?
Apreciaría si 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!
Hay 2 tipos diferentes de motores de recomendación.
El más simple es el basado en artículos, 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 artículo ''b''.
El otro está basado en el usuario. Eso es "gente como tú a menudo le gustan cosas como esta". Una posible solución a este problema es k-means clustering. es decir, construir un conjunto de clústeres donde los usuarios de gustos similares se colocan en el mismo clúster y hacer sugerencias basadas en los usuarios del mismo clúster.
Una solución mejor, pero aún más complicada es una técnica llamada Máquinas de Boltzmann restringidas. Hay una introducción a ellos here
También hay prediction.io si está buscando una solución de código abierto o soluciones SaaS como mag3llan.com .
Un primer intento podría verse así:
//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 calculo la frecuencia con la que se compran cada par de productos, y luego los agrupo por producto y selecciono los 20 productos principales comprados con él. El resultado se debe colocar en algún tipo de diccionario codificado por ID de producto.
Esto puede ser demasiado lento o costar demasiada memoria para bases de datos grandes.