List of usage examples for org.apache.mahout.cf.taste.impl.model.jdbc MySQLJDBCDataModel MySQLJDBCDataModel
public MySQLJDBCDataModel(DataSource dataSource, String preferenceTable, String userIDColumn,
String itemIDColumn, String preferenceColumn, String timestampColumn)
Creates a MySQLJDBCDataModel using the given DataSource and default table/column names.
From source file:DatabaseConnection.java
License:Apache License
/** * Sets the dataModel for this connection *///from w ww .j a v a 2 s . com public void setDataModel() { JDBCDataModel dataModel = new MySQLJDBCDataModel(dataSource, viewName, "userId", "numericalId", "preferenceValue", "time_stamp"); try { reloadModel = new ReloadFromJDBCDataModel(dataModel); } catch (TasteException e) { e.printStackTrace(); } if (reloadModel != null) { model = reloadModel.getDelegateInMemory(); } else model = dataModel; }
From source file:com.rssrecommender.services.MahoutService.java
@PostConstruct public void init() { try {/*from ww w. j a v a2 s .c om*/ 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:com.thegoodlife2015.servlet.randomRecommender.java
/** * Processes requests for both HTTP <code>GET</code> and <code>POST</code> * methods.//ww w . j av a 2s .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 { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); //specifying the number of recommendations to be generated int noOfRecommendations = 4; String fbID = request.getParameter("fbID"); long fbIDL = Long.valueOf(fbID).longValue(); // 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); RandomRecommender rRecommender = new RandomRecommender(dataModel); List<RecommendedItem> recommendations = rRecommender.recommend(fbIDL, noOfRecommendations); 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:com.thegoodlife2015.servlet.recServlet.java
/** * Processes requests for both HTTP <code>GET</code> and <code>POST</code> * methods./*from www . j a v a 2 s .c o 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:com.thegoodlife2015.servlet.topItems.java
/** * Processes requests for both HTTP <code>GET</code> and <code>POST</code> * methods./*from w w w. j av a 2 s . c om*/ * * @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 { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); //specifying the number of recommendations to be generated int noOfRecommendations = 4; String fbID = request.getParameter("fbID"); long fbIDL = Long.valueOf(fbID).longValue(); // 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 = rRecommender.recommend(fbIDL, noOfRecommendations); // List<RecommendedItem> recommendations = TopItems.getTopItems(noOfRecommendations, possibleItemsIDs.iterator(), null, null); // 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:fr.paris.lutece.plugins.recommendation.service.RecommendationService.java
License:Open Source License
/** * Initialize a recommender//w w w .j ava2 s .c o m * @param strName The recommender name * @return The recommender */ private static UserBasedRecommender initRecommender(String strName) { try { AppLogService.info("Initialize Mahout JDBC DataModel for Recommender '" + strName + "'"); String strKeyPrefix = PREFIX + strName; String strDataSource = AppPropertiesService.getProperty(strKeyPrefix + PROPERTY_DATASOURCE); AppLogService.info("- DataSource = " + strDataSource); String strPrefTable = AppPropertiesService.getProperty(strKeyPrefix + PROPERTY_PREF_TABLE); AppLogService.info("- Table = " + strPrefTable); String strUserIdColumn = AppPropertiesService.getProperty(strKeyPrefix + PROPERTY_USER_ID_COL); AppLogService.info("- User ID Column = " + strUserIdColumn); String strItemIdColumn = AppPropertiesService.getProperty(strKeyPrefix + PROPERTY_ITEM_ID_COL); AppLogService.info("- Item ID Column = " + strItemIdColumn); String strPrefColumn = AppPropertiesService.getProperty(strKeyPrefix + PROPERTY_PREF_COL); AppLogService.info("- Pref Column = " + strPrefColumn); PoolManager pm = AppConnectionService.getPoolManager(); DataSource dataSource = pm.getDataSource(strDataSource); DataModel model = new MySQLJDBCDataModel(dataSource, strPrefTable, strUserIdColumn, strItemIdColumn, strPrefColumn, null); UserSimilarity similarity = new PearsonCorrelationSimilarity(model); UserNeighborhood neighborhood = new ThresholdUserNeighborhood(0.1, similarity, model); return new GenericUserBasedRecommender(model, neighborhood, similarity); } catch (TasteException ex) { AppLogService.error("Error loading recommender : " + ex.getMessage(), ex); } return null; }
From source file:recommender.MyRecommender.java
public void init() { if (svdRecommender == null) { try {/*from ww w .j av a 2 s . c o m*/ // load properties file, includes database settings (url, username, password) and connection pool maximum number of connections (used by ConnectionPool) prop = new Properties(); prop.load(Recommender.class.getResourceAsStream("settings.properties")); // load settings from MySQL database loadSettings(); // load macro classes and sub classes into bidirectional map loadCategories(); // load users profiles loadUsersProfiles(); // load groups with their priorities loadGroups(); // load groups with their translations loadGroupsLangs(); // JDBC data model mysql_datasource = new MysqlDataSource(); mysql_datasource.setServerName(prop.getProperty("db_hostname")); mysql_datasource.setUser(prop.getProperty("db_username")); mysql_datasource.setPassword(prop.getProperty("db_password")); mysql_datasource.setDatabaseName("recommender"); /*dm = new MySQLJDBCDataModel( mysql_datasource, "preferences", "user_id", "item_id", "preference", "timestamp");*/ dm = new MySQLJDBCDataModel(mysql_datasource, "preferences", "user_id", "item_id", "preference", "timestamp"); // Switching to MEMORY mode. Load all data from database into memory first // there is no need of a ConnectionPool because this technique uses a memory-based ReloadFromJDBCDataModel wrapper, // decreasing the number of connections to 1 rdm = new ReloadFromJDBCDataModel((JDBCDataModel) dm); // Factorize matrix // factorizes the rating matrix using "Alternating-Least-Squares with Weighted--Regularization" as described in the paper // "Large-scale Collaborative Filtering for the Netflix Prize" http://machinelearning202.pbworks.com/w/file/fetch/60922097/netflix_aaim08%28submitted%29.pdf factorizer = new ALSWRFactorizer(rdm, 2, 0.025, 3); // Configure SVD algorithm svdRecommender = new SVDRecommender(rdm, factorizer); } catch (IOException | TasteException ex) { java.util.logging.Logger.getLogger(Recommender.class.getName()).log(Level.SEVERE, null, ex); } } }
From source file:smartcityrecommender.MyRecommenderEvaluator.java
License:Open Source License
public static void main(String args[]) { //String recsFile = "D://inputData.txt"; /*creating a RecommenderBuilder Objects with overriding the buildRecommender method this builder object is used as one of the parameters for RecommenderEvaluator - evaluate method*/ //for Recommendation evaluations RecommenderBuilder userSimRecBuilder = new RecommenderBuilder() { @Override//from w w w . j a v a 2 s .co m public Recommender buildRecommender(DataModel model) throws TasteException { //The Similarity algorithms used in your recommender UserSimilarity userSimilarity = new TanimotoCoefficientSimilarity(model); /*The Neighborhood algorithms used in your recommender not required if you are evaluating your item based recommendations*/ UserNeighborhood neighborhood = new NearestNUserNeighborhood(neighbourhoodSize, userSimilarity, model); //Recommender used in your real time implementation //Recommender recommender = new GenericBooleanPrefUserBasedRecommender(model, neighborhood, userSimilarity); //return recommender; ALSWRFactorizer factorizer = new ALSWRFactorizer(model, 2, 0.025, 3); return new MyRecommender(model, factorizer); } }; try { //Use this only if the code is for unit tests and other examples to guarantee repeated results RandomUtils.useTestSeed(); //Creating a data model to be passed on to RecommenderEvaluator - evaluate method //FileDataModel dataModel = new FileDataModel(new File(recsFile)); // JDBC data model MysqlDataSource mysql_datasource = new MysqlDataSource(); DataModel dataModel = new MySQLJDBCDataModel(mysql_datasource, "assessment_new", "user_id", "item_id", "preference", "timestamp"); /*Creating an RecommenderEvaluator to get the evaluation done you can use AverageAbsoluteDifferenceRecommenderEvaluator() as well*/ RecommenderEvaluator evaluator = new RMSRecommenderEvaluator(); //for obtaining User Similarity Evaluation Score double userSimEvaluationScore = evaluator.evaluate(userSimRecBuilder, null, dataModel, 0.7, 1.0); System.out.println("User Similarity Evaluation score : " + userSimEvaluationScore); } catch (TasteException e) { } }
From source file:smartcityrecommender.Recommender.java
License:Open Source License
public static void init() { if (svdRecommender == null) { try {/* w w w. j a va 2 s . c o m*/ // load properties file, includes database settings (url, username, password) and connection pool maximum number of connections (used by ConnectionPool) prop = new Properties(); prop.load(Recommender.class.getResourceAsStream("settings.properties")); // load settings from MySQL database loadSettings(); //start logging this recommender stats to db every n seconds, read from settings (recommenderLoggingPeriod) scheduledThreadPool = Executors.newScheduledThreadPool(1); RecommenderLoggerStatus logger = new RecommenderLoggerStatus(); scheduledThreadPool.scheduleAtFixedRate(logger, 1, 86400, TimeUnit.SECONDS); // the logging period is 1 day // load macro classes and sub classes into bidirectional map loadCategories(); // load users profiles loadUsersProfiles(); // load groups with their priorities loadGroups(); // load groups with their translations loadGroupsLangs(); // JDBC data model mysql_datasource = new MysqlDataSource(); mysql_datasource.setServerName(prop.getProperty("db_hostname")); mysql_datasource.setUser(prop.getProperty("db_username")); mysql_datasource.setPassword(prop.getProperty("db_password")); mysql_datasource.setDatabaseName("recommender"); dm = new MySQLJDBCDataModel(mysql_datasource, "preferences", "user_id", "item_id", "preference", "timestamp"); // Switching to MEMORY mode. Load all data from database into memory first // there is no need of a ConnectionPool because this technique uses a memory-based ReloadFromJDBCDataModel wrapper, // decreasing the number of connections to 1 rdm = new ReloadFromJDBCDataModel((JDBCDataModel) dm); // Factorize matrix // factorizes the rating matrix using "Alternating-Least-Squares with Weighted--Regularization" as described in the paper // "Large-scale Collaborative Filtering for the Netflix Prize" http://machinelearning202.pbworks.com/w/file/fetch/60922097/netflix_aaim08%28submitted%29.pdf factorizer = new ALSWRFactorizer(rdm, 2, 0.025, 3); // Configure SVD algorithm svdRecommender = new SVDRecommender(rdm, factorizer); } catch (IOException | TasteException ex) { Logger.getLogger(Recommender.class.getName()).log(Level.SEVERE, null, ex); } } }
From source file:smartcityrecommender.Recommender.java
License:Open Source License
public static void evaluateRecommender() { try {/*from w w w . j av a 2 s . c o m*/ RandomUtils.useTestSeed(); DataModel model = new MySQLJDBCDataModel(mysql_datasource, "assessment_new", "user_id", "item_id", "preference", "timestamp"); RecommenderIRStatsEvaluator evaluator = new GenericRecommenderIRStatsEvaluatorCustom(); RecommenderBuilder recommenderBuilder = new MyRecommenderBuilder(); IRStatistics stats = evaluator.evaluate(recommenderBuilder, null, model, null, 10, GenericRecommenderIRStatsEvaluator.CHOOSE_THRESHOLD, 1.0); System.out.println("Precision: " + stats.getPrecision()); System.out.println("Recall: " + stats.getRecall()); } catch (TasteException ex) { Logger.getLogger(Recommender.class.getName()).log(Level.SEVERE, null, ex); } }