Example usage for org.apache.mahout.cf.taste.model DataModel getNumUsers

List of usage examples for org.apache.mahout.cf.taste.model DataModel getNumUsers

Introduction

In this page you can find the example usage for org.apache.mahout.cf.taste.model DataModel getNumUsers.

Prototype

int getNumUsers() throws TasteException;

Source Link

Usage

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