Mahout – Recomendación

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.

Recomendación

¿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:

Machouts en acción

Junto con el producto seleccionado, Amazon también muestra una lista de productos destacados relacionados como se muestra a continuación.

Artículos

Estas listas de recomendaciones se compilan utilizando motores de recomendación… Mahout proporciona varios tipos de motores de recomendación, como:

  • recomendadores basados ​​en el usuario,
  • elementos de recomendación basados ​​en elementos, y
  • varios otros algoritmos.

Motor de recomendación Mahout

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.

Ejemplo

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:

  • Modelo de datos
  • UserSimilarity
  • Asunto Similitud
  • UsuarioBarrio
  • Recomendador

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.

Arquitectura del motor de recomendación

Motor de recomendación

Creación de un recomendador con Mahout

Estos son los pasos para desarrollar un recomendador simple:

Paso 1. Cree un objeto DataModel

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"));

Paso 2. Creación del objeto UserSimilarity

Crear UserSimilarity objeto usando Pearson Correlación Similitud clase de la siguiente manera:

UserSimilarity similarity = new PearsonCorrelationSimilarity(datamodel);

Paso 3. Crea un objeto UserNeighborhood

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);

Paso 4: crea un objeto de recomendación

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);

Paso 5: recomendar productos a un usuario

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]

🚫