List of usage examples for org.apache.mahout.cf.taste.impl.recommender GenericUserBasedRecommender GenericUserBasedRecommender
public GenericUserBasedRecommender(DataModel dataModel, UserNeighborhood neighborhood,
UserSimilarity similarity)
From source file:UserbasedRecommender.java
License:Apache License
/** * Method that creates a list of recommendations based on collaborative filtering * /*from ww w. ja va2 s.c om*/ * @param model the data needed. The data is what is stored at the moment in the collaborativ_view in the database. * @return the list of computed recommendations */ public ArrayList<CollaborativeRecommendation> RunUserbasedRecommender(DataModel model) { ArrayList<CollaborativeRecommendation> recommendedItemsList = new ArrayList<CollaborativeRecommendation>(); try { /*Comparing the user interactions. This computes the correlation coefficient between user interactions.*/ UserSimilarity similarity = new PearsonCorrelationSimilarity(model); /*Deciding for which users to affect the recommender. Here we use all that have a similarity greater than 0.1 */ UserNeighborhood neighborhood = new ThresholdUserNeighborhood(0.1, similarity, model); /*Recommender*/ UserBasedRecommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity); /*Get recommendations for this userId*/ List<RecommendedItem> recommendations = recommender.recommend(userId, 167); if (!recommendations.isEmpty()) { for (RecommendedItem recommendation : recommendations) { recommendedItemsList .add(new CollaborativeRecommendation(recommendation, (int) userId, "user based")); } } else { /*There are no recommendations for this user*/ System.out.println("No recommendations for this user in userbased"); } } catch (TasteException e) { e.printStackTrace(); } return recommendedItemsList; }
From source file:be.ugent.tiwi.sleroux.newsrec.newsreccollaborativefiltering.MahoutTermRecommender.java
public Map<Long, List<RecommendedItem>> makeRecommendations(int n) throws IOException, TasteException { DataModel model = new FileDataModel(new File(mahoutInputFile), ";"); UserSimilarity similarity = new TanimotoCoefficientSimilarity(model); UserNeighborhood neighborhood = new NearestNUserNeighborhood(2, similarity, model); Recommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity); LongPrimitiveIterator it = model.getUserIDs(); Map<Long, List<RecommendedItem>> output = new HashMap<>(model.getNumUsers()); while (it.hasNext()) { long user = it.nextLong(); List<RecommendedItem> items = recommender.recommend(user, n); output.put(user, items);/*ww w . j a va 2 s.com*/ } return output; }
From source file:cf.wikipedia.WikipediaTasteUserDemo.java
License:Apache License
public static void main(String[] args) throws IOException, TasteException, SAXException, ParserConfigurationException { String recsFile = args[0];/*w ww.jav a2 s .co m*/ String docIdsTitle = args[1]; Integer neighborhoodSize = Integer.parseInt(args[2]); Long userId = Long.parseLong(args[3]); boolean printCommonalities = Boolean.parseBoolean(args[4]); InputSource is = new InputSource(new FileInputStream(docIdsTitle)); SAXParserFactory factory = SAXParserFactory.newInstance(); factory.setValidating(false); SAXParser sp = factory.newSAXParser(); WikiContentHandler handler = new WikiContentHandler(); sp.parse(is, handler); //create the data model FileDataModel dataModel = new FileDataModel(new File(recsFile)); System.out.println("Data Model: Users: " + dataModel.getNumUsers() + " Items: " + dataModel.getNumItems()); UserSimilarity userSimilarity = new PearsonCorrelationSimilarity(dataModel); // Optional: userSimilarity.setPreferenceInferrer(new AveragingPreferenceInferrer(dataModel)); //Get a neighborhood of users UserNeighborhood neighborhood = new NearestNUserNeighborhood(neighborhoodSize, userSimilarity, dataModel); //Create the recommender Recommender recommender = new GenericUserBasedRecommender(dataModel, neighborhood, userSimilarity); System.out.println("-----"); System.out.println("User: " + userId); //Print out the users own preferences first TasteUtils.printPreferences(dataModel, userId, handler.map); if (printCommonalities) { long[] users = neighborhood.getUserNeighborhood(userId); for (int i = 0; i < users.length; i++) { long neighbor = users[i]; System.out.println("Neighbor: " + neighbor); TasteUtils.printCommonalities(dataModel, userId, neighbor, handler.map); } System.out.println(""); } //Get the top 5 recommendations List<RecommendedItem> recommendations = recommender.recommend(userId, 5); TasteUtils.printRecs(recommendations, handler.map); }
From source file:com.anjuke.romar.mahout.factory.MahoutServiceUserRecommendFactory.java
License:Apache License
@Override public MahoutService createService() { RomarConfig config = RomarConfig.getInstance(); Recommender recommender;/*from w ww . jav a2 s . c o m*/ DataModel dataModel = PersistenceDataModelFactory.createDataModel(config); UserSimilarity similarity; if (config.isUseFileSimilarity()) { File file = new File(config.getSimilarityFile()); if (!file.exists()) { throw new IllegalArgumentException("similairy file not exists"); } if (!file.isFile()) { throw new IllegalArgumentException("similairy file is a directory"); } IteratorBuiler<UserUserSimilarity> iteratorBuilder; if (config.isBinarySimilarityFile()) { iteratorBuilder = RomarFileSimilarityIterator.dataFileUserIteratorBuilder(); } else { iteratorBuilder = RomarFileSimilarityIterator.lineFileUserIteratorBuilder(); } similarity = new RomarFileUserSimilarity(file, iteratorBuilder); } else { similarity = createSimilarity(config, dataModel); if (config.isUseSimilariyCache()) { similarity = new CachingUserSimilarity(similarity, config.getSimilarityCacheSize()); } } UserNeighborhood neighborhood = ClassUtils.instantiateAs(config.getUserNeighborhoodClass(), UserNeighborhood.class, new Class<?>[] { int.class, UserSimilarity.class, DataModel.class }, new Object[] { config.getUserNeighborhoodNearestN(), similarity, dataModel }); recommender = new GenericUserBasedRecommender(dataModel, neighborhood, similarity); return new RecommenderWrapper(recommender); }
From source file:com.checkup.mahout.test.ExampleTest.java
@Test public void quickstart() throws IOException, TasteException { DataModel model = new FileDataModel(new File(Resources.quickstart_csv.getFile())); UserSimilarity similarity = new PearsonCorrelationSimilarity(model); UserNeighborhood neighborhood = new ThresholdUserNeighborhood(0.1, similarity, model); UserBasedRecommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity); List<RecommendedItem> recommendations = recommender.recommend(2, 3); for (RecommendedItem recommendation : recommendations) { System.out.println(recommendation); }// ww w . jav a 2s . c o m }
From source file:com.corchado.testRecomender.evaluarPrecionRecallUI.java
private void calcularPrecicionRecall() { try {/*from w w w . ja v a 2 s . c om*/ RandomUtils.useTestSeed(); RecommenderIRStatsEvaluator evaluator = new GenericRecommenderIRStatsEvaluator(); RecommenderBuilder recommenderBuilder = new RecommenderBuilder() { @Override public Recommender buildRecommender(DataModel model) throws TasteException { UserNeighborhood neighborhood = new NearestNUserNeighborhood(CantVecindad, similarity, model); return new GenericUserBasedRecommender(model, neighborhood, similarity); } }; IRStatistics stats = evaluator.evaluate(recommenderBuilder, null, model, null, 2, GenericRecommenderIRStatsEvaluator.CHOOSE_THRESHOLD, 1.0); labelPrecicion.setText("Precisin: " + stats.getPrecision()); labelRecal.setText("Recall: " + stats.getRecall()); } catch (TasteException ex) { Logger.getLogger(evaluarPrecionRecallUI.class.getName()).log(Level.SEVERE, null, ex); } }
From source file:com.corchado.testRecomender.evaluarRecomendadorUI.java
private void Evaluar() { try {// w w w .j av a 2 s.com RandomUtils.useTestSeed(); RecommenderEvaluator evaluator = new AverageAbsoluteDifferenceRecommenderEvaluator(); RecommenderBuilder builder = new RecommenderBuilder() { @Override public Recommender buildRecommender(DataModel model) throws TasteException { // UserSimilarity similarity = new PearsonCorrelationSimilarity(model); UserNeighborhood neighborhood = new NearestNUserNeighborhood(CantVecindad, similarity, model); return new GenericUserBasedRecommender(model, neighborhood, similarity); } }; double score = evaluator.evaluate(builder, null, model, 0.7, 1.0); labelEvaluacion.setText("Evaluacin: " + score); } catch (TasteException ex) { Logger.getLogger(evaluarRecomendadorUI.class.getName()).log(Level.SEVERE, null, ex); } }
From source file:com.corchado.testRecomender.recomendador.java
public static void Recomendar(Scanner entrada, DataModel model, final UserSimilarity similarity) throws IOException, TasteException { // obtener los parametros del usuario int idUsuario; System.out.println("Entre el id de usuario"); idUsuario = entrada.nextInt();/*from w w w . j a v a2 s .co m*/ System.out.println("Entre la cantidad de recomendaciones"); int cantRecomendaciones; cantRecomendaciones = entrada.nextInt(); //------------------------------------------ //recomendador UserNeighborhood neighborhood = new NearestNUserNeighborhood(2, similarity, model); Recommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity); //parametros: //usuario al que se recomdienda //cantidad de items a recomendar List<RecommendedItem> recommendations = recommender.recommend(idUsuario, cantRecomendaciones); System.out.println("Items recomendados: "); for (RecommendedItem recommendation : recommendations) { System.out.println(recommendation); } }
From source file:com.corchado.testRecomender.recomendador.java
public static void Probar(final Scanner entrada, DataModel model, final UserSimilarity similarity) throws IOException, TasteException { RandomUtils.useTestSeed();// w ww. ja v a 2 s.c om RecommenderEvaluator evaluator = new AverageAbsoluteDifferenceRecommenderEvaluator(); RecommenderBuilder builder = new RecommenderBuilder() { @Override public Recommender buildRecommender(DataModel model) throws TasteException { // UserSimilarity similarity = new PearsonCorrelationSimilarity(model); UserNeighborhood neighborhood = new NearestNUserNeighborhood(2, similarity, model); return new GenericUserBasedRecommender(model, neighborhood, similarity); } }; double score = evaluator.evaluate(builder, null, model, 0.7, 1.0); System.out.println("evaluacion: " + score); }
From source file:com.corchado.testRecomender.recomendador.java
public static void evaluarPrecicionRecall(final Scanner entrada, DataModel model, final UserSimilarity similarity) throws IOException, TasteException { RandomUtils.useTestSeed();/*from w ww. j a v a 2 s . c om*/ RecommenderIRStatsEvaluator evaluator = new GenericRecommenderIRStatsEvaluator(); RecommenderBuilder recommenderBuilder = new RecommenderBuilder() { @Override public Recommender buildRecommender(DataModel model) throws TasteException { UserNeighborhood neighborhood = new NearestNUserNeighborhood(2, similarity, model); return new GenericUserBasedRecommender(model, neighborhood, similarity); } }; IRStatistics stats = evaluator.evaluate(recommenderBuilder, null, model, null, 2, GenericRecommenderIRStatsEvaluator.CHOOSE_THRESHOLD, 1.0); System.out.println("Precision: " + stats.getPrecision()); System.out.println("Recal: " + stats.getRecall()); }