List of usage examples for org.apache.mahout.cf.taste.model DataModel getNumUsers
int getNumUsers() throws TasteException;
From source file:be.ugent.tiwi.sleroux.newsrec.newsreccollaborativefiltering.MahoutTermRecommender.java
public Map<Long, List<RecommendedItem>> makeRecommendations(int n) throws IOException, TasteException { DataModel model = new FileDataModel(new File(mahoutInputFile), ";"); UserSimilarity similarity = new TanimotoCoefficientSimilarity(model); UserNeighborhood neighborhood = new NearestNUserNeighborhood(2, similarity, model); Recommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity); LongPrimitiveIterator it = model.getUserIDs(); Map<Long, List<RecommendedItem>> output = new HashMap<>(model.getNumUsers()); while (it.hasNext()) { long user = it.nextLong(); List<RecommendedItem> items = recommender.recommend(user, n); output.put(user, items);/* w ww .j ava 2 s. c om*/ } return output; }
From source file:com.mycompany.xplor_recommendation_engine.Xplor.java
/** * @param args the command line arguments * @throws java.sql.SQLException/*from w w w . ja va 2 s. c o m*/ * @throws java.io.IOException */ public static void main(String[] args) throws SQLException, IOException, TasteException { FileConverter fc = FileConverter.getFileConverter(); int[] columnSpecs = new int[2]; columnSpecs[0] = 2; columnSpecs[1] = 2; fc.convertToCSV("xplor_development", "blog_profile_maps", columnSpecs); // Calibrate recommender for csv file DataModel model = new FileDataModel(new File("blog_profile_maps.csv")); UserSimilarity similarity = new TanimotoCoefficientSimilarity(model); UserNeighborhood neighborhood = new ThresholdUserNeighborhood(0.1, similarity, model); Recommender recommender = new GenericBooleanPrefUserBasedRecommender(model, neighborhood, similarity); Recommender cachingRecommender = new CachingRecommender(recommender); // Establish JDBC connection for (int i = 1; i <= model.getNumUsers(); i++) { List<RecommendedItem> recommendations = cachingRecommender.recommend(i, 10); for (RecommendedItem recommendation : recommendations) { // Store recommendations in recommendations table } } // Store recommendations in database }
From source file:com.webir.popcornsaver.cluster.TreeClusteringRecommender.java
License:Apache License
private void buildClusters() throws TasteException { DataModel model = getDataModel(); int numUsers = model.getNumUsers(); if (numUsers > 0) { List<FastIDSet> newClusters = new ArrayList<FastIDSet>(numUsers); // Begin with a cluster for each user: LongPrimitiveIterator it = model.getUserIDs(); while (it.hasNext()) { FastIDSet newCluster = new FastIDSet(); newCluster.add(it.nextLong()); newClusters.add(newCluster); }//ww w. j a v a 2s .c om if (numUsers > 1) { findClusters(newClusters); } topRecsByUserID = computeTopRecsPerUserID(newClusters); clustersByUserID = computeClustersPerUserID(newClusters); allClusters = newClusters.toArray(new FastIDSet[newClusters.size()]); } else { topRecsByUserID = new FastByIDMap<List<RecommendedItem>>(); clustersByUserID = new FastByIDMap<FastIDSet>(); allClusters = NO_CLUSTERS; } }
From source file:lib.eval.AbstractRecommenderEvaluator.java
License:Apache License
@Override public double evaluate(RecommenderBuilder recommenderBuilder, DataModelBuilder dataModelBuilder, DataModel dataModel, double trainingPercentage, double evaluationPercentage) throws TasteException { Preconditions.checkArgument(recommenderBuilder != null, "recommenderBuilder is null"); Preconditions.checkArgument(dataModel != null, "dataModel is null"); Preconditions.checkArgument(trainingPercentage >= 0.0 && trainingPercentage <= 1.0, "Invalid trainingPercentage: " + trainingPercentage); Preconditions.checkArgument(evaluationPercentage >= 0.0 && evaluationPercentage <= 1.0, "Invalid evaluationPercentage: " + evaluationPercentage); log.info("Beginning evaluation using {} of {}", trainingPercentage, dataModel); int numUsers = dataModel.getNumUsers(); FastByIDMap<PreferenceArray> trainingUsers = new FastByIDMap<PreferenceArray>( 1 + (int) (evaluationPercentage * numUsers)); FastByIDMap<PreferenceArray> testUserPrefs = new FastByIDMap<PreferenceArray>( 1 + (int) (evaluationPercentage * numUsers)); LongPrimitiveIterator it = dataModel.getUserIDs(); while (it.hasNext()) { long userID = it.nextLong(); if (random.nextDouble() < evaluationPercentage) { processOneUser(trainingPercentage, trainingUsers, testUserPrefs, userID, dataModel); } else { //this user will not be used for evaluation so use all its preferences in training PreferenceArray trainingPrefs = dataModel.getPreferencesFromUser(userID); trainingUsers.put(userID, trainingPrefs); }/*from w w w . j a va2s. c o m*/ } DataModel trainingModel = dataModelBuilder == null ? new GenericDataModel(trainingUsers) : dataModelBuilder.buildDataModel(trainingUsers); Recommender recommender = recommenderBuilder.buildRecommender(trainingModel); double result = getEvaluation(testUserPrefs, recommender); log.info("Evaluation result: {}", result); return result; }
From source file:lib.similarity.AbstractUnboundedSimilarity.java
License:Apache License
/** * <p>//from w w w . j av a 2 s. co m * Creates an AbstractUnboundedSimilarity. * </p> */ AbstractUnboundedSimilarity(final DataModel dataModel) throws TasteException { super(dataModel); this.cachedNumItems = dataModel.getNumItems(); this.cachedNumUsers = dataModel.getNumUsers(); this.refreshHelper = new RefreshHelper(new Callable<Object>() { @Override public Object call() throws TasteException { cachedNumItems = dataModel.getNumItems(); cachedNumUsers = dataModel.getNumUsers(); return null; } }); }
From source file:norbert.mynemo.core.evaluation.PersonnalRecommenderEvaluator.java
License:Apache License
/** * Build the training preferences with a given percentage of user. The preferences are extracted * from the given data model. The returned map does not include the target user. * * <p>//from w ww . jav a 2 s.co m * The given percentage must be between 0 and 1. */ private FastByIDMap<PreferenceArray> buildBaseTrainingPreferences(DataModel model, double evaluationPercentage) throws TasteException { FastByIDMap<PreferenceArray> result = new FastByIDMap<PreferenceArray>(model.getNumUsers() - 1); LongPrimitiveIterator it = model.getUserIDs(); while (it.hasNext()) { long userId = it.nextLong(); double nextDouble = random.nextDouble(); if (nextDouble < evaluationPercentage && userId != targetUser) { copyUserPreferences(model, result, userId); } } return result; }
From source file:norbert.mynemo.core.recommendation.recommender.UserSimilarityRecommender.java
License:Apache License
private UserSimilarity createSimilarity(DataModel dataModel) throws TasteException { UserSimilarity selectedSimilarity;//from ww w . j av a 2s . c om switch (configuration.getType()) { case USER_SIMILARITY_WITH_CITY_BLOCK_DISTANCE: selectedSimilarity = new CityBlockSimilarity(dataModel); break; case USER_SIMILARITY_WITH_EUCLIDEAN_DISTANCE: selectedSimilarity = new EuclideanDistanceSimilarity(dataModel, Weighting.UNWEIGHTED); break; case USER_SIMILARITY_WITH_LOG_LIKELIHOOD: selectedSimilarity = new LogLikelihoodSimilarity(dataModel); break; case USER_SIMILARITY_WITH_ORIGINAL_SPEARMAN_CORRELATION: selectedSimilarity = new OriginalSpearmanCorrelationSimilarity(dataModel); break; case USER_SIMILARITY_WITH_PEARSON_CORRELATION: selectedSimilarity = new PearsonCorrelationSimilarity(dataModel, Weighting.UNWEIGHTED); break; case USER_SIMILARITY_WITH_SPEARMAN_CORRELATION: selectedSimilarity = new SpearmanCorrelationSimilarity(dataModel); break; case USER_SIMILARITY_WITH_TANIMOTO_COEFFICIENT: selectedSimilarity = new TanimotoCoefficientSimilarity(dataModel); break; case USER_SIMILARITY_WITH_UNCENTERED_COSINE: selectedSimilarity = new UncenteredCosineSimilarity(dataModel, Weighting.UNWEIGHTED); break; case USER_SIMILARITY_WITH_WEIGHTED_EUCLIDEAN_DISTANCE: selectedSimilarity = new EuclideanDistanceSimilarity(dataModel, Weighting.WEIGHTED); break; case USER_SIMILARITY_WITH_WEIGHTED_PEARSON_CORRELATION: selectedSimilarity = new PearsonCorrelationSimilarity(dataModel, Weighting.WEIGHTED); break; case USER_SIMILARITY_WITH_WEIGHTED_UNCENTERED_COSINE: selectedSimilarity = new UncenteredCosineSimilarity(dataModel, Weighting.WEIGHTED); break; default: throw new IllegalStateException(); } int cacheSize = Math.min(dataModel.getNumUsers() * dataModel.getNumUsers(), MAXIMUM_CACHE_SIZE); return new CachingUserSimilarity(selectedSimilarity, cacheSize); }
From source file:norbert.mynemo.ui.RecommendCommandParser.java
License:Apache License
/** * Parses and checks the "data-model" option. *///from ww w.ja v a 2 s . co m private static DataModel parseDataModel(String dataModel) throws TasteException { if (!new File(dataModel).exists()) { throw new IllegalArgumentException("Error: unable to find the the data model file."); } DataModel result; try { result = new StringUserDataModel(new File(dataModel)); } catch (IOException e) { throw new IllegalStateException("Error: unable to load the data model.", e); } // check if (result.getNumUsers() == 0 || result.getNumItems() == 0) { throw new IllegalArgumentException("Error: the data model doesn't contain any data."); } return result; }
From source file:norbert.mynemo.ui.SelectCommandParser.java
License:Apache License
/** * Parses and checks the "data-model" option. *//* ww w .j a va2 s. c o m*/ private static DataModel parseDataModel(String dataModelValue) throws TasteException { if (!new File(dataModelValue).exists()) { throw new IllegalArgumentException("Error: unable to find the the data model file."); } DataModel result; try { result = new StringUserDataModel(new File(dataModelValue)); } catch (IOException e) { throw new IllegalStateException("Error: unable to load the data model.", e); } // check if (result.getNumUsers() == 0 || result.getNumItems() == 0) { throw new IllegalArgumentException("Error: the data model doesn't contain any data."); } return result; }
From source file:org.easyrec.mahout.EasyrecInMemoryDataModelTest.java
License:Open Source License
@Test public void testEasyrecDataModel_getNumUsers() throws TasteException { DataModel easyrecDataModel = new EasyrecDataModel(TENANT_ID, RATE_ACTION_TYPE_ID, HAS_RATING_VALUES, mahoutDataModelMappingDAO);/* ww w. j a v a 2 s .c o m*/ easyrecDataModel = new EasyrecInMemoryDataModel(easyrecDataModel); int numberOfUsers = easyrecDataModel.getNumUsers(); assertEquals(2, numberOfUsers); }