List of usage examples for org.apache.mahout.cf.taste.impl.recommender.svd ALSWRFactorizer ALSWRFactorizer
public ALSWRFactorizer(DataModel dataModel, int numFeatures, double lambda, int numIterations) throws TasteException
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 ww w. j av a 2s .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:norbert.mynemo.core.recommendation.recommender.SvdBasedRecommender.java
License:Apache License
private Factorizer createFactorizer(DataModel dataModel) throws TasteException { int featuresNumber = configuration.getFeatureNumber(); int iterationsNumber = configuration.getIterationNumber(); Factorizer result;//from ww w. j a v a 2s . c o m switch (configuration.getType()) { case SVD_WITH_ALSWR_FACTORIZER: result = new ALSWRFactorizer(dataModel, featuresNumber, DEFAULT_LAMBDA, iterationsNumber); break; case SVD_WITH_PARALLEL_SGD_FACTORIZER: result = new ParallelSGDFactorizer(dataModel, featuresNumber, DEFAULT_LAMBDA, DEFAULT_EPOCHS); break; case SVD_WITH_RATING_SGD_FACTORIZER: result = new RatingSGDFactorizer(dataModel, featuresNumber, iterationsNumber); break; case SVD_WITH_SVDPLUSPLUS_FACTORIZER: result = new SVDPlusPlusFactorizer(dataModel, featuresNumber, iterationsNumber); break; default: throw new UnsupportedOperationException(); } return result; }
From source file:recommender.MyRecommender.java
public void init() { if (svdRecommender == null) { try {/*from ww w . j a v 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:recommender.MyRecommenderBuilder.java
@Override public Recommender buildRecommender(DataModel dataModel) throws TasteException { /*UserSimilarity similarity = new PearsonCorrelationSimilarity(dataModel); UserNeighborhood neighborhood = new ThresholdUserNeighborhood(0.1, similarity, dataModel); return new GenericUserBasedRecommender(dataModel, neighborhood, similarity);*/ ALSWRFactorizer factorizer = new ALSWRFactorizer(dataModel, 2, 0.025, 3); //return new SVDRecommender(dataModel, factorizer); return new MyRecommender(dataModel, factorizer); }
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// w ww . j a v a 2s.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 {//from ww w . j a v a 2 s .co 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:uit.tkorg.pr.method.cf.SVDCF.java
/** * * @param inputFile//from w w w . j a v a 2 s. co m * @param n * @param numFeatures * @param lamda * @param numIterations * @param outputFile * @throws IOException * @throws TasteException */ public static void SVDRecommendation(String inputFile, int n, int numFeatures, double lamda, int numIterations, String outputFile) throws IOException, TasteException { DataModel dataModel = new FileDataModel(new File(inputFile)); Factorizer factorizer = new ALSWRFactorizer(dataModel, numFeatures, lamda, numIterations); Recommender svdRecommender = new SVDRecommender(dataModel, factorizer); BufferedWriter bw = new BufferedWriter(new FileWriter(outputFile)); // Recommend n items for each user for (LongPrimitiveIterator iterator = dataModel.getUserIDs(); iterator.hasNext();) { long userId = iterator.nextLong(); // Generate a list of n recommendations for the user List<RecommendedItem> topItems = svdRecommender.recommend(userId, n); if (!topItems.isEmpty()) { // Display the list of recommendations for (RecommendedItem recommendedItem : topItems) { bw.write( userId + "," + recommendedItem.getItemID() + "," + recommendedItem.getValue() + "\r\n"); } } } bw.close(); }
From source file:uit.tkorg.pr.method.cf.SVDCF.java
public static void computeCFRatingAndPutIntoModelForAuthorList(String inputFile, int numFeatures, double lamda, int numIterations, HashMap<String, Author> authorTestSet, HashSet<String> paperIdsInTestSet, String outputFile) throws IOException, TasteException { DataModel dataModel = new FileDataModel(new File(inputFile)); Factorizer factorizer = new ALSWRFactorizer(dataModel, numFeatures, lamda, numIterations); Recommender svdRecommender = new SVDRecommender(dataModel, factorizer); FileUtils.deleteQuietly(new File(outputFile)); try (BufferedWriter bw = new BufferedWriter(new FileWriter(outputFile))) { int count = 0; System.out.println("Number of users:" + authorTestSet.size()); for (LongPrimitiveIterator iterator = dataModel.getUserIDs(); iterator.hasNext();) { long userId = iterator.nextLong(); // Generate a list of n recommendations for the user if (authorTestSet.containsKey(String.valueOf(userId).trim())) { System.out.println("Computing CF rating value for user no. " + count); List<RecommendedItem> recommendationList = svdRecommender.recommend(userId, dataModel.getNumItems()); if (!recommendationList.isEmpty()) { // Display the list of recommendations for (RecommendedItem recommendedItem : recommendationList) { String authorId = String.valueOf(userId).trim(); String paperId = String.valueOf(recommendedItem.getItemID()).trim(); if (paperIdsInTestSet.contains(paperId)) { authorTestSet.get(authorId).getCfRatingHM().put(paperId, Float.valueOf(recommendedItem.getValue())); bw.write(userId + "," + recommendedItem.getItemID() + "," + recommendedItem.getValue() + "\r\n"); }// w w w.jav a 2 s . co m } } count++; } } } }