Example usage for org.apache.mahout.cf.taste.impl.similarity PearsonCorrelationSimilarity PearsonCorrelationSimilarity

List of usage examples for org.apache.mahout.cf.taste.impl.similarity PearsonCorrelationSimilarity PearsonCorrelationSimilarity

Introduction

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

Prototype

public PearsonCorrelationSimilarity(DataModel dataModel) throws TasteException 

Source Link

Usage

From source file:UserbasedRecommender.java

License:Apache License

/**
 * Method that creates a list of recommendations based on collaborative filtering
 * /*from  w ww.j  a  va  2s  .co m*/
 * @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:recom.java

/**
 * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
 * methods./*from w w w .j  ava 2 s .co  m*/
 *
 * @param request servlet request
 * @param response servlet response
 * @throws ServletException if a servlet-specific error occurs
 * @throws IOException if an I/O error occurs
 */
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException, TasteException {
    response.setContentType("text/html;charset=UTF-8");
    try (PrintWriter out = response.getWriter()) {

        DataModel dm = new FileDataModel(new File("info/movies.csv"));
        ItemSimilarity us = new PearsonCorrelationSimilarity(dm);
        //UserNeighborhood neighborhood = new NearestNUserNeighborhood(25, us, dm);
        GenericItemBasedRecommender recommender = new GenericItemBasedRecommender(dm, us);

        List<RecommendedItem> recommendations = recommender.recommend(1, 5);

        /* TODO output your page here. You may use following sample code. */

        out.println("<html>");
        out.println("<head>");
        out.println("<title>Servlet recom</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>Servlet recom at " + request.getContextPath() + "</h1>");
        out.println("</body>");
        out.println("</html>");
    }
}

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];//from   w  w  w.  ja v  a 2 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.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);
    }//from   w  w  w  . j ava2s  .  c om
}

From source file:com.corchado.testRecomender.recomendador.java

/**
 * @param args the command line arguments
 * @throws java.io.IOException//from www  .  j av a 2  s .c  o  m
 * @throws org.apache.mahout.cf.taste.common.TasteException
 */
public static void main(String[] args) throws IOException, TasteException {
    final Scanner entrada = new Scanner(System.in);

    DataModel model = new FileDataModel(new File("ml-100k/ua.base"));
    UserSimilarity similarity = null;
    int obciones;
    System.out.println("RECOMENDADOR MEDIANTE FILTRADO COLABORATIVO");
    do {
        System.out.println("Seleccione la funcion de similitud a utilizar para recomendar");
        System.out.println("marque 1 para la funcion euclidiana");
        System.out.println("marque 2 para la funcion de Pearson");
        System.out.println("marque 3 para la funcion de Log-likelihood");
        System.out.println("marque 4 para la funcion de Tanimoto");

        obciones = entrada.nextInt();
        switch (obciones) {
        case 1:
            similarity = new EuclideanDistanceSimilarity(model);
            break;
        case 2:
            similarity = new PearsonCorrelationSimilarity(model);
            break;
        case 3:
            similarity = new LogLikelihoodSimilarity(model);
            break;
        case 4:
            similarity = new TanimotoCoefficientSimilarity(model);
            break;
        }
    } while (obciones != 1 && obciones != 2 && obciones != 3 && obciones != 4);

    int queHago = 0;
    try {

        do {
            System.out.println("\n Seleccione... ");
            System.out.println("1 para realizar una recomendacion ");
            System.out.println("2 si quiere probar una recomendacion ");
            System.out.println("3 para evaluar precision y recall");
            System.out.println("4 si quiere salir");
            queHago = entrada.nextInt();
            switch (queHago) {
            case 1:
                System.out.println("Recomendando...");
                Recomendar(entrada, model, similarity);
                break;
            case 2:
                System.out.println(
                        "Realizando una prueba al recomendador tomado como conjunto de entrenamiento el 70% "
                                + "del dataset y el 30% como conjunto de prueba. Ademas se evalua mediante el promedio de las diferencias."
                                + "Mientras mas pequeo es este valor mejor es la recomendacion");
                System.out.println("Si el dataset es muy grande la evaluacion puede tardar un poquito..");
                Probar(entrada, model, similarity);
                break;
            case 3:
                System.out.println(
                        "Evaluando precision y recall tomando como limite entre una recomendacion bueno o mala "
                                + "la suma entre la media y la desviaci'on estandar (threshold =  + ?)...");
                evaluarPrecicionRecall(entrada, model, similarity);
                break;
            }
        } while (queHago != 4);
    } catch (IOException | TasteException e) {
        System.out.println(e.getMessage());
    }
}

From source file:com.corchado.testRecomender.recomendadorUI.java

private String funcionSimilitud() throws TasteException {
    String funcionSimilitud = SpinnerFuncionsmilitud.getValue().toString();

    switch (funcionSimilitud) {
    case "Distancia Euclideana":
        similarity = new EuclideanDistanceSimilarity(model);
        break;/*from w  w  w  .  jav a  2 s .c o  m*/
    case "Correlacin de Pearson":
        similarity = new PearsonCorrelationSimilarity(model);
        break;
    case "log-likelihood":
        similarity = new LogLikelihoodSimilarity(model);
        break;
    case "Coheficiente de Tanimoto":
        similarity = new TanimotoCoefficientSimilarity(model);
        break;
    }
    return funcionSimilitud;
}

From source file:com.mycompany.mahoutrecco.App.java

public static void main(String[] args) throws Exception {

    DataModel model = new FileDataModel(new File("data/justBeforeMahout.csv"));

    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(503046, 5);
    System.out.println(recommendations);
    for (RecommendedItem recommendation : recommendations) {
        System.out.println(recommendation);
    }/*from w  ww .j a  v  a 2 s.co m*/
}

From source file:com.mycompany.mavenproject1.Recommendor.java

public static void main(String[] args) throws Exception {
    DataModel model = new FileDataModel(new File("src/Data/data.csv"));
    UserSimilarity similarity = new PearsonCorrelationSimilarity(model);
    UserNeighborhood neighborhood = new ThresholdUserNeighborhood(2, similarity, model);
    UserBasedRecommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity);
    List<RecommendedItem> recommendations = recommender.recommend(1, 1);
    for (RecommendedItem recommendation : recommendations) {
        System.out.println(recommendation);
    }//from w ww . ja  va2 s. co m

}

From source file:com.rssrecommender.services.MahoutService.java

@PostConstruct
public void init() {
    try {/*from   w  ww  .j a  va2 s .com*/
        dataSource = new MysqlConnectionPoolDataSource();

        dataSource.setServerName("localhost");
        dataSource.setUser("root");
        dataSource.setPassword("1234");
        dataSource.setDatabaseName("rss_rec");
        dataSource.setCachePreparedStatements(true);
        dataSource.setCachePrepStmts(true);
        dataSource.setCacheResultSetMetadata(true);
        dataSource.setAlwaysSendSetIsolation(true);
        dataSource.setElideSetAutoCommits(true);

        model = new MySQLJDBCDataModel(dataSource, "user_likes_article", "user_id", "article_id", "rating",
                null);
        m = new ReloadFromJDBCDataModel(model);
        is = new PearsonCorrelationSimilarity(m);

        //            ItemSimilarity is = new EuclideanDistanceSimilarity(model, Weighting.WEIGHTED);
        //            cis = new CachingItemSimilarity(is, 150);
        r = new GenericItemBasedRecommender(m, is);
        rsr = new IDRescorer() {

            @Override
            public double rescore(long id, double originalScore) {
                Article a = af.find((int) id);
                long diff = Calendar.getInstance().getTimeInMillis() - a.getDate().getTime() + 1;
                double time = 1.0d / (diff / (1000 * 360 * 12)); // half day period since feeds are update regularly
                return originalScore * time;
            }

            @Override
            public boolean isFiltered(long id) {
                //always rescore
                return false;
            }
        };
        //            Optimizer optimizer = new ConjugateGradientOptimizer();
        //            r = new KnnItemBasedRecommender(m, is, optimizer, 5);
        //          
    } catch (TasteException ex) {
        Logger.getLogger(MahoutService.class.getName()).log(Level.SEVERE, null, ex);
    }
}

From source file:de.apaxo.bedcon.AnimalFoodRecommender.java

License:Open Source License

public void initRecommender() {
    try {//from w ww  .  j  a  v  a 2 s .  c  o m

        PearsonCorrelationSimilarity pearsonSimilarity = new PearsonCorrelationSimilarity(model);

        // Java: Similarity between Wolf and Bear: 0.8196561646738477
        // R: corr(c(8,3,1),c(8,7,2)): 0.8196562
        System.out.println("Similarity between Wolf and Bear: "
                + pearsonSimilarity.userSimilarity(id2thing.toLongID("Wolf"), id2thing.toLongID("Bear")));
        // Similarity between Wolf and Rabbit: -0.6465846072812313
        // R: cor(c(8,3,1),c(2,1,10)): -0.6465846
        System.out.println("Similarity between Wolf and Rabbit: "
                + pearsonSimilarity.userSimilarity(id2thing.toLongID("Wolf"), id2thing.toLongID("Rabbit")));
        // Similarity between Wolf and Pinguin: -0.24019223070763077
        // R: cor(c(8,3,1),c(2,10,2)): -0.2401922
        System.out.println("Similarity between Wolf and Pinguin: "
                + pearsonSimilarity.userSimilarity(id2thing.toLongID("Wolf"), id2thing.toLongID("Pinguin")));

        GenericUserBasedRecommender recommender = new GenericUserBasedRecommender(model,
                new NearestNUserNeighborhood(3, pearsonSimilarity, model), pearsonSimilarity);
        for (RecommendedItem r : recommender.recommend(id2thing.toLongID("Wolf"), 3)) {
            // Pork:
            // (0.8196561646738477 * 8 + (-0.6465846072812313) * 1) / (0.8196561646738477 + (-0.6465846072812313)) = 34,15157 ~ 10
            // Grass:
            // (2*(-0.24019223070763077)+7*(-0.6465846072812313)) / ((-0.24019223070763077) + (-0.6465846072812313)) = 5,65
            // Corn:
            // (2*(-0.24019223070763077)+2*(0.8196561646738477)) / (-0.24019223070763077+0.8196561646738477) = 2
            System.out.println("UserBased: Wolf should eat: " + id2thing.toStringID(r.getItemID()) + " Rating: "
                    + r.getValue());
        }
        SVDRecommender svdrecommender = new SVDRecommender(model, new SVDPlusPlusFactorizer(model, 4, 1000));
        for (RecommendedItem r : svdrecommender.recommend(id2thing.toLongID("Sheep"), 3)) {
            System.out.println("SVD: Sheep should eat: " + id2thing.toStringID(r.getItemID()) + " Rating: "
                    + r.getValue());
        }
    } catch (TasteException e) {
        e.printStackTrace();
    }
}