Mahout - Recomendação
Este capítulo cobre a técnica popular de aprendizado de máquina chamada recommendation, seus mecanismos e como escrever um aplicativo que implementa a recomendação do Mahout.
Recomendação
Você já se perguntou como a Amazon surge com uma lista de itens recomendados para chamar sua atenção para um produto específico no qual você possa estar interessado!
Suponha que você queira comprar o livro “Mahout in Action” da Amazon:
Junto com o produto selecionado, a Amazon também exibe uma lista de itens recomendados relacionados, conforme mostrado abaixo.
Essas listas de recomendações são produzidas com a ajuda de recommender engines. O Mahout fornece mecanismos de recomendação de vários tipos, como:
- recomendadores baseados no usuário,
- recomendadores baseados em itens e
- vários outros algoritmos.
Mecanismo de recomendação Mahout
Mahout tem um mecanismo de recomendação não distribuído e não baseado em Hadoop. Você deve passar um documento de texto com as preferências do usuário para os itens. E a saída desse mecanismo seriam as preferências estimadas de um determinado usuário para outros itens.
Exemplo
Considere um site que vende bens de consumo, como celulares, gadgets e seus acessórios. Se quisermos implementar os recursos do Mahout em tal site, podemos construir um mecanismo de recomendação. Este mecanismo analisa os dados de compra anteriores dos usuários e recomenda novos produtos com base nisso.
Os componentes fornecidos pelo Mahout para construir um mecanismo de recomendação são os seguintes:
- DataModel
- UserSimilarity
- ItemSimilarity
- UserNeighborhood
- Recommender
A partir do armazenamento de dados, o modelo de dados é preparado e passado como uma entrada para o mecanismo de recomendação. O mecanismo de recomendação gera as recomendações para um determinado usuário. A seguir está a arquitetura do mecanismo de recomendação.
Arquitetura do motor de recomendação
Construindo um Recomendador usando Mahout
Aqui estão as etapas para desenvolver um recomendador simples:
Etapa 1: Criar objeto DataModel
O construtor de PearsonCorrelationSimilarityA classe requer um objeto de modelo de dados, que contém um arquivo que contém os detalhes de Usuários, Itens e Preferências de um produto. Aqui está o arquivo de modelo de dados de amostra:
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
o DataModelobjeto requer o objeto de arquivo, que contém o caminho do arquivo de entrada. Crie oDataModel objeto como mostrado abaixo.
DataModel datamodel = new FileDataModel(new File("input file"));
Etapa 2: Criar objeto UserSimilarity
Crio UserSimilarity objeto usando PearsonCorrelationSimilarity classe como mostrado abaixo:
UserSimilarity similarity = new PearsonCorrelationSimilarity(datamodel);
Passo 3: Crie o objeto UserNeighborhood
Este objeto calcula uma "vizinhança" de usuários como um determinado usuário. Existem dois tipos de vizinhança:
NearestNUserNeighborhood- Esta classe calcula uma vizinhança que consiste nos n usuários mais próximos de um determinado usuário. "Mais próximo" é definido pela semelhança de usuário fornecida.
ThresholdUserNeighborhood- Esta classe calcula uma vizinhança que consiste em todos os usuários cuja semelhança com o usuário determinado atende ou excede um determinado limite. Similaridade é definida por UserSimilarity fornecida.
Aqui estamos usando ThresholdUserNeighborhood e defina o limite de preferência para 3,0.
UserNeighborhood neighborhood = new ThresholdUserNeighborhood(3.0, similarity, model);
Etapa 4: Criar objeto de recomendação
Crio UserbasedRecomenderobjeto. Passe todos os objetos criados acima para seu construtor, conforme mostrado abaixo.
UserBasedRecommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity);
Etapa 5: Recomendar itens a um usuário
Recomende produtos a um usuário usando o método recommend () de Recommenderinterface. Este método requer dois parâmetros. O primeiro representa o id do usuário para o qual devemos enviar as recomendações, e o segundo representa o número de recomendações a serem enviadas. Aqui está o uso derecommender() método:
List<RecommendedItem> recommendations = recommender.recommend(2, 3);
for (RecommendedItem recommendation : recommendations) {
System.out.println(recommendation);
}
Example Program
Abaixo está um exemplo de programa para definir recomendações. Prepare as recomendações para o usuário com ID de usuário 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 o programa usando os seguintes comandos:
javac Recommender.java
java Recommender
Ele deve produzir a seguinte saída:
RecommendedItem [item:3, value:4.5]
RecommendedItem [item:4, value:4.0]