List of usage examples for org.apache.mahout.cf.taste.impl.recommender RandomRecommender RandomRecommender
public RandomRecommender(DataModel dataModel) throws TasteException
From source file:com.thegoodlife2015.servlet.recServlet.java
/** * Processes requests for both HTTP <code>GET</code> and <code>POST</code> * methods./*from w ww . ja va2 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 * @throws org.apache.mahout.cf.taste.common.TasteException */ protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, TasteException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); //specifying the number of recommendations to be generated int noOfRecommendations = 20; String fbID = request.getParameter("fbID"); long fbIDL = Long.parseLong(fbID); // Specifications tables String tablename = "rating"; String col1 = "fbID"; String col2 = "offerID"; String col3 = "rate"; //Input for database connections // grab environment variable String host = System.getenv("OPENSHIFT_MYSQL_DB_HOST"); String servername; String username; String password; String dbname; String port; String PROPS_FILENAME = "/connection.properties"; if (host != null) { // this is production environment // obtain database connection properties from environment variables servername = host; port = System.getenv("OPENSHIFT_MYSQL_DB_PORT"); dbname = System.getenv("OPENSHIFT_APP_NAME"); username = System.getenv("OPENSHIFT_MYSQL_DB_USERNAME"); password = System.getenv("OPENSHIFT_MYSQL_DB_PASSWORD"); //out.println(servername + " " + port + " " + dbname + " " + username + " " + password); } else { try { // Retrieve properties from connection.properties via the CLASSPATH // WEB-INF/classes is on the CLASSPATH InputStream is = ConnectionManager.class.getResourceAsStream(PROPS_FILENAME); Properties props = new Properties(); props.load(is); // load database connection details servername = props.getProperty("db.host"); port = props.getProperty("db.port"); dbname = props.getProperty("db.name"); username = props.getProperty("db.user"); password = props.getProperty("db.password"); //out.println(servername + " " + port + " " + dbname + " " + username + " " + password); } catch (Exception ex) { // unable to load properties file String message = "Unable to load '" + PROPS_FILENAME + "'."; out.println(message); Logger.getLogger(ConnectionManager.class.getName()).log(Level.SEVERE, message, ex); throw new RuntimeException(message, ex); } } //setup for second connection java.sql.Connection conn = null; java.sql.Statement stmt = null; ResultSet rs = null; boolean hasRec = false; try { ///Initialize connection for Mahout input MysqlDataSource dataSource = new MysqlDataSource(); dataSource.setServerName(servername); dataSource.setUser(username); dataSource.setPassword(password); dataSource.setDatabaseName(dbname); MySQLJDBCDataModel dataModel = new MySQLJDBCDataModel(dataSource, tablename, col1, col2, col3, null); /*Specifies the Similarity algorithm*/ ItemSimilarity itemSimilarity = new LogLikelihoodSimilarity(dataModel); /*Initalizing the recommender */ ItemBasedRecommender recommender = new GenericItemBasedRecommender(dataModel, itemSimilarity); List<RecommendedItem> recommendations = null; try { recommendations = recommender.recommend(fbIDL, noOfRecommendations); } catch (Exception e) { RandomRecommender rRecommender = new RandomRecommender(dataModel); recommendations = rRecommender.recommend(fbIDL, noOfRecommendations); } finally { // if (recommendations.size() < noOfRecommendations) { // int randomInt = noOfRecommendations - recommendations.size(); // RandomRecommender rRecommender = new RandomRecommender(dataModel); // recommendations.addAll(rRecommender.recommend(fbIDL, randomInt)); // } while (recommendations.size() < noOfRecommendations) { int randomInt = noOfRecommendations - recommendations.size(); RandomRecommender rRecommender = new RandomRecommender(dataModel); recommendations.addAll(rRecommender.recommend(fbIDL, randomInt)); recommendations = new ArrayList<>(new HashSet<>(recommendations)); } } if (recommendations.size() >= 0) { JSONObject jsonObject = getJsonFromMyFormObject(recommendations, fbIDL); hasRec = true; out.println(jsonObject); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (rs != null) { rs.close(); } } catch (SQLException e) { e.printStackTrace(); } try { if (stmt != null) { stmt.close(); } } catch (SQLException e) { e.printStackTrace(); } try { if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } // if(!hasRec) { // out.println("{\"error\":\"user has no records\"}"); // } }
From source file:edu.nudt.c6.datasetlinking.mahout.MyRecommenderBuilder.java
License:Apache License
@Override public Recommender buildRecommender(DataModel dataModel) throws TasteException { if (recommenderType == RECOMMENDER.ITEM) { ItemSimilarity itemSimilarity = null; switch (similarityType) { case PEARSON: itemSimilarity = new PearsonCorrelationSimilarity(dataModel); break; case PEARSON_WEIGHTED: itemSimilarity = new PearsonCorrelationSimilarity(dataModel, Weighting.WEIGHTED); break; case COSINE: itemSimilarity = new UncenteredCosineSimilarity(dataModel); break; case TANIMOTO: itemSimilarity = new TanimotoCoefficientSimilarity(dataModel); break; case LOGLIKELIHOOD: itemSimilarity = new LogLikelihoodSimilarity(dataModel); break; case CITYBLOCK: itemSimilarity = new CityBlockSimilarity(dataModel); break; case EUCLIDEAN: itemSimilarity = new EuclideanDistanceSimilarity(dataModel); break; case EUCLIDEAN_WEIGHTED: itemSimilarity = new EuclideanDistanceSimilarity(dataModel, Weighting.WEIGHTED); break; case DATASET_VOCABULARY_COSINE: try { itemSimilarity = new DatasetVocabularySimilarity(dataModel); } catch (ClassNotFoundException | IOException e) { // TODO Auto-generated catch block e.printStackTrace();/*from w w w .j a v a 2 s . c o m*/ } break; case DATASET_CLASS_COSINE: try { itemSimilarity = new DatasetClassSimilarity(dataModel); } catch (ClassNotFoundException | IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } break; case DATASET_PPROPERTY_COSINE_SUBJECTS: try { itemSimilarity = new DatasetPropertySubjectsSimilarity(dataModel); } catch (ClassNotFoundException | IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } break; case DATASET_PPROPERTY_COSINE_TRIPLES: try { itemSimilarity = new DatasetPropertyTriplesSimilarity(dataModel); } catch (ClassNotFoundException | IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } break; default: itemSimilarity = new EuclideanDistanceSimilarity(dataModel); } if (pref) { return new GenericItemBasedRecommender(dataModel, itemSimilarity); } else { return new GenericBooleanPrefItemBasedRecommender(dataModel, itemSimilarity); } } else if (recommenderType == RECOMMENDER.USER) { UserSimilarity userSimilarity = null; switch (similarityType) { case PEARSON: userSimilarity = new PearsonCorrelationSimilarity(dataModel); break; case PEARSON_WEIGHTED: userSimilarity = new PearsonCorrelationSimilarity(dataModel, Weighting.WEIGHTED); break; case COSINE: userSimilarity = new UncenteredCosineSimilarity(dataModel); break; case SPEARMAN: userSimilarity = new SpearmanCorrelationSimilarity(dataModel); break; case TANIMOTO: userSimilarity = new TanimotoCoefficientSimilarity(dataModel); break; case LOGLIKELIHOOD: userSimilarity = new LogLikelihoodSimilarity(dataModel); break; case CITYBLOCK: userSimilarity = new CityBlockSimilarity(dataModel); break; case EUCLIDEAN: userSimilarity = new EuclideanDistanceSimilarity(dataModel); break; case EUCLIDEAN_WEIGHTED: userSimilarity = new EuclideanDistanceSimilarity(dataModel, Weighting.WEIGHTED); break; case DATASET_VOCABULARY_COSINE: try { userSimilarity = new DatasetVocabularySimilarity(dataModel); } catch (ClassNotFoundException | IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } break; case DATASET_CLASS_COSINE: try { userSimilarity = new DatasetClassSimilarity(dataModel); } catch (ClassNotFoundException | IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } break; case DATASET_PPROPERTY_COSINE_SUBJECTS: try { userSimilarity = new DatasetPropertySubjectsSimilarity(dataModel); } catch (ClassNotFoundException | IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } break; case DATASET_PPROPERTY_COSINE_TRIPLES: try { userSimilarity = new DatasetPropertyTriplesSimilarity(dataModel); } catch (ClassNotFoundException | IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } break; default: userSimilarity = new EuclideanDistanceSimilarity(dataModel); } UserNeighborhood userNeighborhood = null; switch (neighborhoodType) { case NEAREST: userNeighborhood = new NearestNUserNeighborhood(this.nearestNum, userSimilarity, dataModel); break; case THRESHOLD: default: userNeighborhood = new ThresholdUserNeighborhood(this.neighborThreshold, userSimilarity, dataModel); } if (pref) { return new GenericUserBasedRecommender(dataModel, userNeighborhood, userSimilarity); } else { return new GenericBooleanPrefUserBasedRecommender(dataModel, userNeighborhood, userSimilarity); } } else if (recommenderType == RECOMMENDER.SVD) { AbstractFactorizer factorizer = null; switch (SVDfactorizerType) { case RatingSGD: factorizer = new RatingSGDFactorizer(dataModel, factorNum, iterationNum); break; case ALSWR: factorizer = new ALSWRFactorizer(dataModel, factorNum, lambda, iterationNum); break; case SVDPlusPlus: factorizer = new SVDPlusPlusFactorizer(dataModel, factorNum, iterationNum); break; case ParallelSGD: factorizer = new ParallelSGDFactorizer(dataModel, factorNum, lambda, iterationNum); break; case MyRatingSGD: factorizer = new MyRatingSGDFactorizer(dataModel, factorNum, iterationNum); break; } return new SVDRecommender(dataModel, factorizer); } else if (recommenderType == RECOMMENDER.LINKDOCUMENT) { } else if (recommenderType == RECOMMENDER.CollaborativeRanking) { AbstractCRFactorizer factorizer = null; switch (CRFactorizerType) { case BasicLFM: try { factorizer = new BasicLFMFactorizer(dataModel, factorNum, iterationNum); } catch (ClassNotFoundException | IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } break; case LFMTrans: try { factorizer = new LFMTransFactorizer(dataModel, factorNum, iterationNum, learningRate); } catch (ClassNotFoundException | IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } break; } return new CollaborativeRankingRecommender(dataModel, factorizer); } else if (recommenderType == RECOMMENDER.Random) { return new RandomRecommender(dataModel); } else if (recommenderType == RECOMMENDER.ItemAverage) { return new ItemAverageRecommender(dataModel); } else if (recommenderType == RECOMMENDER.ItemUserAverage) { return new ItemUserAverageRecommender(dataModel); } return null; }
From source file:nl.gridline.zieook.tasks.quality.MahoutEvaluatorTest.java
License:Apache License
@Test public void testRandom() throws IOException, TasteException { RandomUtils.useTestSeed();//from w w w. jav a 2 s . co m LOG.info("testing Random:"); DataModel model = new FileDataModel(testData); GenericRecommenderIRStatsEvaluator evaluatorIR = new GenericRecommenderIRStatsEvaluator(); AverageAbsoluteDifferenceRecommenderEvaluator evaluator = new AverageAbsoluteDifferenceRecommenderEvaluator(); RMSRecommenderEvaluator rmsEvaluator = new RMSRecommenderEvaluator(); RecommenderBuilder builder = new RecommenderBuilder() { @Override public Recommender buildRecommender(DataModel model) throws TasteException { return new RandomRecommender(model); } }; long start = System.currentTimeMillis(); double score = evaluator.evaluate(builder, null, model, 0.7, 1.0); LOG.info("score: {} in {}s", String.format("%.4f", score), ((System.currentTimeMillis() - start) / 1000)); start = System.currentTimeMillis(); score = rmsEvaluator.evaluate(builder, null, model, 0.7, 1.0); LOG.info("rms score: {} in {}s", String.format("%.4f", score), ((System.currentTimeMillis() - start) / 1000)); start = System.currentTimeMillis(); IRStatistics stats = evaluatorIR.evaluate(builder, null, model, null, 2, GenericRecommenderIRStatsEvaluator.CHOOSE_THRESHOLD, 1.0); LOG.info("precision: {} recall: {} in {}s", new Object[] { String.format("%.4f", stats.getPrecision()), String.format("%.4f", stats.getRecall()), ((System.currentTimeMillis() - start) / 1000) }); }
From source file:norbert.mynemo.core.recommendation.recommender.BasicRecommender.java
License:Apache License
@Override public Recommender buildRecommender(DataModel dataModel) throws TasteException { switch (recommender) { case ITEM_AVERAGE: return new ItemAverageRecommender(dataModel); case RANDOM:/*ww w . j a va2 s . c o m*/ return new RandomRecommender(dataModel); case USER_AVERAGE: return new ItemUserAverageRecommender(dataModel); default: throw new IllegalStateException(); } }