Example usage for org.apache.mahout.cf.taste.impl.model.jdbc MySQLJDBCDataModel MySQLJDBCDataModel

List of usage examples for org.apache.mahout.cf.taste.impl.model.jdbc MySQLJDBCDataModel MySQLJDBCDataModel

Introduction

In this page you can find the example usage for org.apache.mahout.cf.taste.impl.model.jdbc MySQLJDBCDataModel MySQLJDBCDataModel.

Prototype

public MySQLJDBCDataModel(DataSource dataSource, String preferenceTable, String userIDColumn,
        String itemIDColumn, String preferenceColumn, String timestampColumn) 

Source Link

Document

Creates a MySQLJDBCDataModel using the given DataSource and default table/column names.

Usage

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