Mahout - Recomendación

Este capítulo cubre la popular técnica de aprendizaje automático llamada recommendation, sus mecanismos y cómo escribir una aplicación que implemente la recomendación de Mahout.

Recomendación

¡Alguna vez se preguntó cómo Amazon crea una lista de artículos recomendados para llamar su atención sobre un producto en particular que podría interesarle!

Suponga que desea comprar el libro "Mahout en acción" de Amazon:

Junto con el producto seleccionado, Amazon también muestra una lista de artículos recomendados relacionados, como se muestra a continuación.

Estas listas de recomendaciones se elaboran con la ayuda de recommender engines. Mahout proporciona motores de recomendación de varios tipos, tales como:

  • recomendadores basados ​​en el usuario,
  • recomendadores basados ​​en artículos, y
  • varios otros algoritmos.

Motor de recomendación Mahout

Mahout tiene un motor de recomendación no distribuido y no basado en Hadoop. Debe pasar un documento de texto con las preferencias del usuario para los elementos. Y el resultado de este motor serían las preferencias estimadas de un usuario en particular para otros elementos.

Ejemplo

Considere un sitio web que venda bienes de consumo como teléfonos móviles, dispositivos y sus accesorios. Si queremos implementar las características de Mahout en tal sitio, entonces podemos construir un motor de recomendación. Este motor analiza los datos de compras anteriores de los usuarios y recomienda nuevos productos basados ​​en eso.

Los componentes proporcionados por Mahout para construir un motor de recomendación son los siguientes:

  • DataModel
  • UserSimilarity
  • ItemSimilarity
  • UserNeighborhood
  • Recommender

Desde el almacén de datos, se prepara el modelo de datos y se pasa como entrada al motor de recomendación. El motor de recomendación genera las recomendaciones para un usuario en particular. A continuación se muestra la arquitectura del motor de recomendación.

Arquitectura del motor de recomendación

Construyendo un Recomendador usando Mahout

Estos son los pasos para desarrollar un recomendador simple:

Paso 1: crear objeto DataModel

El constructor de PearsonCorrelationSimilarityLa clase requiere un objeto de modelo de datos, que contiene un archivo que contiene los detalles de Usuarios, Elementos y Preferencias de un producto. Aquí está el archivo de modelo de datos de muestra:

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

los DataModelobjeto requiere el objeto de archivo, que contiene la ruta del archivo de entrada. Crea elDataModel objeto como se muestra a continuación.

DataModel datamodel = new FileDataModel(new File("input file"));

Paso 2: Crear objeto UserSimilarity

Crear UserSimilarity objeto usando PearsonCorrelationSimilarity clase como se muestra a continuación:

UserSimilarity similarity = new PearsonCorrelationSimilarity(datamodel);

Paso 3: crear objeto UserNeighborhood

Este objeto calcula un "vecindario" de usuarios como un usuario determinado. Hay dos tipos de barrios:

  • NearestNUserNeighborhood- Esta clase calcula una vecindad que consta de los n usuarios más cercanos a un usuario dado. "Más cercano" se define por la UserSimilarity dada.

  • ThresholdUserNeighborhood- Esta clase calcula una vecindad que consiste en todos los usuarios cuya similitud con el usuario dado alcanza o excede un cierto umbral. La similitud está definida por la UserSimilarity dada.

Aquí estamos usando ThresholdUserNeighborhood y establezca el límite de preferencia en 3.0.

UserNeighborhood neighborhood = new ThresholdUserNeighborhood(3.0, similarity, model);

Paso 4: crear objeto de recomendación

Crear UserbasedRecomenderobjeto. 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 artículos a un usuario

Recomendar productos a un usuario mediante el método de recomendación () de Recommenderinterfaz. Este método requiere dos parámetros. El primero representa el ID de usuario del usuario al que necesitamos enviar las recomendaciones y el segundo representa el número de recomendaciones a enviar. Aquí está el uso derecommender() método:

List<RecommendedItem> recommendations = recommender.recommend(2, 3);

for (RecommendedItem recommendation : recommendations) {
   System.out.println(recommendation);
 }

Example Program

A continuación se muestra un programa de ejemplo para establecer recomendaciones. Prepare las recomendaciones para el 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]