Example usage for org.apache.mahout.cf.taste.impl.recommender RandomRecommender RandomRecommender

List of usage examples for org.apache.mahout.cf.taste.impl.recommender RandomRecommender RandomRecommender

Introduction

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

Prototype

public RandomRecommender(DataModel dataModel) throws TasteException 

Source Link

Usage

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