Este capÃtulo explora una técnica popular de aprendizaje automático llamada recomendación, sus mecanismos y cómo escribir una aplicación que implemente la recomendación de Mahout.
¿Alguna vez te has preguntado cómo compila Amazon una lista de destacados para llamar tu atención sobre un producto especÃfico que podrÃa interesarte?
Supongamos que quiere comprar el libro «Machout in Action» en Amazon:
Junto con el producto seleccionado, Amazon también muestra una lista de productos destacados relacionados como se muestra a continuación.
Estas listas de recomendaciones se compilan utilizando motores de recomendación… Mahout proporciona varios tipos de motores de recomendación, como:
Mahout tiene un motor de recomendación sin asignar que no se basa en Hadoop. Debe enviar un documento de texto con configuraciones personalizadas para los elementos. El resultado de este mecanismo serán las preferencias estimadas de un usuario en particular en relación con otros elementos.
Piense en un sitio web que venda productos de consumo como teléfonos móviles, dispositivos y accesorios. Si queremos implementar la funcionalidad Mahout en un sitio de este tipo, podemos crear un motor de recomendación. Este motor analiza datos sobre compras pasadas de usuarios y recomienda nuevos productos basados ​​en estos datos.
Los componentes proporcionados por Mahout para crear el motor de recomendaciones son los siguientes:
Se prepara un modelo de datos a partir del almacén de datos y se pasa como entrada al motor de recomendaciones. El motor de recomendación genera recomendaciones especÃficas para el usuario. A continuación se muestra la arquitectura del motor de recomendaciones.
Estos son los pasos para desarrollar un recomendador simple:
Constructor Pearson Correlación Similitud La clase requiere un objeto de modelo de datos que contiene un archivo que contiene información sobre usuarios, artÃculos y preferencias de productos. Aquà hay un archivo de modelo de datos de ejemplo:
1,00,1.0 1,01,2.0 1,02,5.0 1,03,5.0 1,04,5.0 2,00,1.0 2,01,2.0 2,05,5.0 2,06,4.5 2,02,5.0 3,01,2.5 3,02,5.0 3,03,4.0 3,04,3.0 4,00,5.0 4,01,5.0 4,02,5.0 4,03,0.0
EN Modelo de datos el objeto requiere un objeto de archivo que contenga la ruta al archivo de entrada. Crear un Modelo de datos objeto como se muestra a continuación.
DataModel datamodel = new FileDataModel(new File("input file"));
Crear UserSimilarity objeto usando Pearson Correlación Similitud clase de la siguiente manera:
UserSimilarity similarity = new PearsonCorrelationSimilarity(datamodel);
Este objeto calcula el «vecindario» de usuarios similares al usuario dado. Hay dos tipos de barrios:
Más cercanoNUserNeighborhood – Esta clase calcula una vecindad que consta de la más cercana PAG usuarios para este usuario. «Más cercano» está determinado por la UserSimilarity dada.
ThresholdUserBarrio – Esta clase calcula un entorno que consta de todos los usuarios cuya similitud con un usuario determinado alcanza o supera un cierto umbral. La similitud está determinada por la UserSimilarity dada.
Aquà usamos ThresholdUserBarrio y establezca el lÃmite de preferencia en 3.0.
UserNeighborhood neighborhood = new ThresholdUserNeighborhood(3.0, similarity, model);
Crear Basado en el usuario un objeto. Pase todos los objetos creados anteriormente a su constructor como se muestra a continuación.
UserBasedRecommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity);
Recomendar productos a un usuario mediante el método Recomendado () Recomendador interfaz. Este método requiere dos parámetros. El primero es el ID del usuario al que necesitamos enviar recomendaciones y el segundo representa la cantidad de recomendaciones que se enviarán. Aquà está el uso recomendador () método:
List<RecommendedItem> recommendations = recommender.recommend(2, 3); for (RecommendedItem recommendation : recommendations) { System.out.println(recommendation); }
Programa de muestra
A continuación se muestra un programa de muestra para las recomendaciones de instalación. Prepare una recomendación para un usuario con ID de usuario 2.
import java.io.File; import java.util.List; import org.apache.mahout.cf.taste.impl.model.file.FileDataModel; import org.apache.mahout.cf.taste.impl.neighborhood.ThresholdUserNeighborhood; import org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommender; import org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimilarity; import org.apache.mahout.cf.taste.model.DataModel; import org.apache.mahout.cf.taste.neighborhood.UserNeighborhood; import org.apache.mahout.cf.taste.recommender.RecommendedItem; import org.apache.mahout.cf.taste.recommender.UserBasedRecommender; import org.apache.mahout.cf.taste.similarity.UserSimilarity; public class Recommender { public static void main(String args[]){ try{ //Creating data model DataModel datamodel = new FileDataModel(new File("data")); //data //Creating UserSimilarity object. UserSimilarity usersimilarity = new PearsonCorrelationSimilarity(datamodel); //Creating UserNeighbourHHood object. UserNeighborhood userneighborhood = new ThresholdUserNeighborhood(3.0, usersimilarity, datamodel); //Create UserRecomender UserBasedRecommender recommender = new GenericUserBasedRecommender(datamodel, userneighborhood, usersimilarity); List<RecommendedItem> recommendations = recommender.recommend(2, 3); for (RecommendedItem recommendation : recommendations) { System.out.println(recommendation); } }catch(Exception e){} } }
Compile el programa usando los siguientes comandos:
javac Recommender.java java Recommender
DeberÃa producir el siguiente resultado:
RecommendedItem [item:3, value:4.5] RecommendedItem [item:4, value:4.0]
🚫