List of usage examples for org.apache.mahout.cf.taste.impl.similarity PearsonCorrelationSimilarity PearsonCorrelationSimilarity
public PearsonCorrelationSimilarity(DataModel dataModel) throws TasteException
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(); } }