List of usage examples for org.apache.mahout.cf.taste.common Weighting WEIGHTED
Weighting WEIGHTED
To view the source code for org.apache.mahout.cf.taste.common Weighting WEIGHTED.
Click Source Link
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); }