Example usage for org.apache.mahout.cf.taste.common Weighting WEIGHTED

List of usage examples for org.apache.mahout.cf.taste.common Weighting WEIGHTED

Introduction

In this page you can find the example usage for org.apache.mahout.cf.taste.common Weighting WEIGHTED.

Prototype

Weighting WEIGHTED

To view the source code for org.apache.mahout.cf.taste.common Weighting WEIGHTED.

Click Source Link

Usage

From source file:com.github.gurelkaynak.recommendationengine.core.RecommenderFactory.java

public Recommender buildUserBasedRecommender(DataModel dataModel) {
    Recommender recommender;//from w  w w  .j  a v a2 s  .  co  m
    recommender = null;

    try {
        UserSimilarity similarity = new CachingUserSimilarity(
                new PearsonCorrelationSimilarity(dataModel, Weighting.WEIGHTED), dataModel);
        UserNeighborhood neighborhood;

        switch (this.userNeighborhoodAlgorithm) {
        case "threshold":
            neighborhood = new ThresholdUserNeighborhood(this.thresholdValue, similarity, dataModel);
            break;
        case "nearestnuser":
            neighborhood = new NearestNUserNeighborhood(this.nearestNUserValue, similarity, dataModel);
            break;
        default:
            neighborhood = new ThresholdUserNeighborhood(this.thresholdValue, similarity, dataModel);
            break;
        }

        recommender = new GenericUserBasedRecommender(dataModel, neighborhood, similarity);

    } catch (TasteException exception) {
        System.err.println(exception);
    }

    return recommender;
}

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   www .  j  a v a  2s  .com
            }
            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:net.ufida.info.mahout.common.MemoryDiffStorage.java

License:Apache License

/**
 * <p>/*from ww  w  . ja v  a  2  s. c o m*/
 * See {@link SlopeOneRecommender} for the meaning of
 * {@code stdDevWeighted}. {@code maxEntries} controls the maximum number of
 * item-item average preference differences that will be tracked internally. After the limit is reached, if
 * a new item-item pair is observed in the data it will be ignored. This is recommended for large datasets.
 * The first {@code maxEntries} item-item pairs observed in the data are tracked. Assuming that item
 * ratings are reasonably distributed among users, this should only ignore item-item pairs that are very
 * infrequently co-rated by a user. The intuition is that data on these infrequently co-rated item-item
 * pairs is less reliable and should be the first that is ignored. This parameter can be used to limit the
 * memory requirements of {@link SlopeOneRecommender}, which otherwise grow as the square of the number of
 * items that exist in the {@link DataModel}. Memory requirements can reach gigabytes with only about 10000
 * items, so this may be necessary on larger datasets.
 *
 * @param stdDevWeighted
 *          see {@link SlopeOneRecommender}
 * @param maxEntries
 *          maximum number of item-item average preference differences to track internally
 * @throws IllegalArgumentException
 *           if {@code maxEntries} is not positive or {@code dataModel} is null
 */
public MemoryDiffStorage(DataModel dataModel, Weighting stdDevWeighted, long maxEntries) throws TasteException {
    Preconditions.checkArgument(dataModel != null, "dataModel is null");
    Preconditions.checkArgument(dataModel.getNumItems() >= 1, "dataModel has no items");
    Preconditions.checkArgument(maxEntries > 0L, "maxEntries must be positive");
    this.dataModel = dataModel;
    this.stdDevWeighted = stdDevWeighted == Weighting.WEIGHTED;
    this.maxEntries = maxEntries;
    this.averageDiffs = new FastByIDMap<FastByIDMap<RunningAverage>>();
    this.averageItemPref = new FastByIDMap<RunningAverage>();
    this.buildAverageDiffsLock = new ReentrantReadWriteLock();
    this.allRecommendableItemIDs = new FastIDSet(dataModel.getNumItems());

    //?
    this.refreshHelper = new RefreshHelper(new Callable<Object>() {
        @Override
        public Object call() throws TasteException {
            buildAverageDiffs(); //
            return null;
        }
    });

    refreshHelper.addDependency(dataModel); //??

    //
    /* List<Refreshable> list = new ArrayList<Refreshable>();
     list.add(dataModel);
     refreshHelper.refresh(list);     */
    buildAverageDiffs();
}

From source file:net.ufida.info.mahout.common.SlopeOneRecommender.java

License:Apache License

/**
 * <p>// www .j av a2 s .c o m
 * Creates a default (weighted)  based on the given {@link DataModel}.
 * </p>
 */
public SlopeOneRecommender(DataModel dataModel) throws TasteException {
    this(dataModel, Weighting.WEIGHTED, Weighting.WEIGHTED,
            new MemoryDiffStorage(dataModel, Weighting.WEIGHTED, Long.MAX_VALUE));
}

From source file:net.ufida.info.mahout.common.SlopeOneRecommender.java

License:Apache License

/**
 * <p>/*ww w  .j  a  v a 2 s. co m*/
 * Creates a  based on the given {@link DataModel}.
 * </p>
 *
 * <p>
 * If {@code weighted} is set, acts as a weighted slope one recommender. This implementation also
 * includes an experimental "standard deviation" weighting which weights item-item ratings diffs with lower
 * standard deviation more highly, on the theory that they are more reliable.
 * </p>
 *
 * @param weighting
 *          if {@link Weighting#WEIGHTED}, acts as a weighted slope one recommender
 * @param stdDevWeighting
 *          use optional standard deviation weighting of diffs
 * @throws IllegalArgumentException
 *           if {@code diffStorage} is null, or stdDevWeighted is set when weighted is not set
 */
public SlopeOneRecommender(DataModel dataModel, Weighting weighting, Weighting stdDevWeighting,
        DiffStorage diffStorage) {
    super(dataModel);
    Preconditions.checkArgument(stdDevWeighting != Weighting.WEIGHTED || weighting != Weighting.UNWEIGHTED,
            "weighted required when stdDevWeighted is set");
    Preconditions.checkArgument(diffStorage != null, "diffStorage is null");
    this.weighted = weighting == Weighting.WEIGHTED;
    this.stdDevWeighted = stdDevWeighting == Weighting.WEIGHTED;
    this.diffStorage = diffStorage;
}

From source file:norbert.mynemo.core.recommendation.recommender.ItemSimilarityRecommender.java

License:Apache License

@Override
public Recommender buildRecommender(DataModel dataModel) throws TasteException {
    checkArgument(dataModel != null, "Data model type must not be null.");

    ItemSimilarity similarity = null;/*from  ww w . j ava2 s  .co m*/
    switch (selectedSimilarity) {
    case ITEM_SIMILARITY_WITH_CITY_BLOCK_DISTANCE:
        similarity = new CityBlockSimilarity(dataModel);
        break;
    case ITEM_SIMILARITY_WITH_EUCLIDEAN_DISTANCE:
        similarity = new EuclideanDistanceSimilarity(dataModel, Weighting.UNWEIGHTED);
        break;
    case ITEM_SIMILARITY_WITH_LOG_LIKELIHOOD:
        similarity = new LogLikelihoodSimilarity(dataModel);
        break;
    case ITEM_SIMILARITY_WITH_PEARSON_CORRELATION:
        similarity = new PearsonCorrelationSimilarity(dataModel, Weighting.UNWEIGHTED);
        break;
    case ITEM_SIMILARITY_WITH_TANIMOTO_COEFFICIENT:
        similarity = new TanimotoCoefficientSimilarity(dataModel);
        break;
    case ITEM_SIMILARITY_WITH_UNCENTERED_COSINE:
        similarity = new UncenteredCosineSimilarity(dataModel, Weighting.UNWEIGHTED);
        break;
    case ITEM_SIMILARITY_WITH_WEIGHTED_EUCLIDEAN_DISTANCE:
        similarity = new EuclideanDistanceSimilarity(dataModel, Weighting.WEIGHTED);
        break;
    case ITEM_SIMILARITY_WITH_WEIGHTED_PEARSON_CORRELATION:
        similarity = new PearsonCorrelationSimilarity(dataModel, Weighting.WEIGHTED);
        break;
    case ITEM_SIMILARITY_WITH_WEIGHTED_UNCENTERED_COSINE:
        similarity = new UncenteredCosineSimilarity(dataModel, Weighting.WEIGHTED);
        break;
    default:
        throw new IllegalStateException();
    }

    int cacheSize = Math.min(dataModel.getNumItems() * dataModel.getNumItems(), MAXIMUM_CACHE_SIZE);
    similarity = new CachingItemSimilarity(similarity, cacheSize);

    return new GenericItemBasedRecommender(dataModel, similarity);
}

From source file:norbert.mynemo.core.recommendation.recommender.UserSimilarityRecommender.java

License:Apache License

private UserSimilarity createSimilarity(DataModel dataModel) throws TasteException {
    UserSimilarity selectedSimilarity;/*  w  w  w . ja v a  2 s .  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);
}