Example usage for org.apache.mahout.cf.taste.impl.recommender GenericUserBasedRecommender GenericUserBasedRecommender

List of usage examples for org.apache.mahout.cf.taste.impl.recommender GenericUserBasedRecommender GenericUserBasedRecommender

Introduction

In this page you can find the example usage for org.apache.mahout.cf.taste.impl.recommender GenericUserBasedRecommender GenericUserBasedRecommender.

Prototype

public GenericUserBasedRecommender(DataModel dataModel, UserNeighborhood neighborhood,
            UserSimilarity similarity) 

Source Link

Usage

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