List of usage examples for org.apache.mahout.cf.taste.impl.similarity CityBlockSimilarity CityBlockSimilarity
public CityBlockSimilarity(DataModel dataModel)
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 w w w . ja va2 s . 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:nl.gridline.zieook.tasks.quality.MahoutEvaluatorTest.java
License:Apache License
@Test public void testCityBlockSimilarity() throws TasteException, IOException { RandomUtils.useTestSeed();/*w w w.j a v a2 s. c o m*/ LOG.info("testing CityBlockSimilarity:"); DataModel model = new FileDataModel(testData); AverageAbsoluteDifferenceRecommenderEvaluator evaluator = new AverageAbsoluteDifferenceRecommenderEvaluator(); RMSRecommenderEvaluator rmsEvaluator = new RMSRecommenderEvaluator(); GenericRecommenderIRStatsEvaluator evaluatorIR = new GenericRecommenderIRStatsEvaluator(); RecommenderBuilder builder = new RecommenderBuilder() { @Override public Recommender buildRecommender(DataModel model) throws TasteException { CityBlockSimilarity similarity = new CityBlockSimilarity(model); UserNeighborhood neighborhood = new NearestNUserNeighborhood(2, similarity, model); return new GenericUserBasedRecommender(model, neighborhood, similarity); } }; long start = System.currentTimeMillis(); double score = evaluator.evaluate(builder, null, model, 0.7, 1.0); LOG.info("average score: {} in {}s", String.format("%.4f", score), ((System.currentTimeMillis() - start) / 1000)); start = System.currentTimeMillis(); score = rmsEvaluator.evaluate(builder, null, model, 0.7, 1.0); LOG.info("rms score: {} in {}s", String.format("%.4f", score), ((System.currentTimeMillis() - start) / 1000)); start = System.currentTimeMillis(); IRStatistics stats = evaluatorIR.evaluate(builder, null, model, null, 2, GenericRecommenderIRStatsEvaluator.CHOOSE_THRESHOLD, 1.0); LOG.info("precision: {} recall: {} in {}s", new Object[] { String.format("%.4f", stats.getPrecision()), String.format("%.4f", stats.getRecall()), ((System.currentTimeMillis() - start) / 1000) }); }
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;/* w w w .ja v a 2 s . c om*/ 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;//from w ww . j a v a 2s. c o m 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:org.easyrec.plugin.mahout.MahoutBooleanGenerator.java
License:Open Source License
@Override protected void doExecute(ExecutionControl executionControl, MahoutBooleanGeneratorStats stats) throws Exception { // when doExecute() is called, the generator has been initialized with the configuration we should use Date execution = new Date(); MahoutBooleanGeneratorConfig config = getConfiguration(); TypeMappingService typeMappingService = (TypeMappingService) super.getTypeMappingService(); ItemAssocService itemAssocService = getItemAssocService(); executionControl.updateProgress("initialize DataModel"); DataModel easyrecDataModel = new EasyrecDataModel(config.getTenantId(), typeMappingService.getIdOfActionType(config.getTenantId(), config.getActionType()), false, mahoutDataModelMappingDAO);//from w w w. j a va 2 s .co m if (config.getCacheDataInMemory() == 1) { executionControl.updateProgress("initialize EasyrecInMemoryDataModel"); easyrecDataModel = new EasyrecInMemoryDataModel(easyrecDataModel); } /*TanimotoCoefficientSimilarity is intended for "binary" data sets where a user either expresses a generic "yes" preference for an item or has no preference.*/ UserSimilarity userSimilarity = null; switch (config.getUserSimilarityMethod()) { case 1: executionControl.updateProgress("using LogLikelihoodSimilarity as UserSimilarity"); userSimilarity = new LogLikelihoodSimilarity(easyrecDataModel); break; case 2: executionControl.updateProgress("using TanimotoCoefficientSimilarity as UserSimilarity"); userSimilarity = new TanimotoCoefficientSimilarity(easyrecDataModel); break; case 3: executionControl.updateProgress("using SpearmanCorrelationSimilarity as UserSimilarity"); userSimilarity = new SpearmanCorrelationSimilarity(easyrecDataModel); break; case 4: executionControl.updateProgress("using CityBlockSimilarity as UserSimilarity"); userSimilarity = new CityBlockSimilarity(easyrecDataModel); break; } /*ThresholdUserNeighborhood is preferred in situations where we go in for a similarity measure between neighbors and not any number*/ UserNeighborhood neighborhood = null; Double userNeighborhoodSamplingRate = config.getUserNeighborhoodSamplingRate(); Double neighborhoodThreshold = config.getUserNeighborhoodThreshold(); int neighborhoodSize = config.getUserNeighborhoodSize(); double userNeighborhoodMinSimilarity = config.getUserNeighborhoodMinSimilarity(); switch (config.getUserNeighborhoodMethod()) { case 1: executionControl.updateProgress("using ThresholdUserNeighborhood as UserNeighborhood"); neighborhood = new ThresholdUserNeighborhood(neighborhoodThreshold, userSimilarity, easyrecDataModel, userNeighborhoodSamplingRate); break; case 2: executionControl.updateProgress("using NearestNUserNeighborhood as UserNeighborhood"); neighborhood = new NearestNUserNeighborhood(neighborhoodSize, userNeighborhoodMinSimilarity, userSimilarity, easyrecDataModel, userNeighborhoodSamplingRate); break; } /*GenericBooleanPrefUserBasedRecommender is appropriate for use when no notion of preference value exists in the data. */ executionControl.updateProgress("using GenericBooleanPrefUserBasedRecommender as Recommender"); Recommender recommender = new GenericBooleanPrefUserBasedRecommender(easyrecDataModel, neighborhood, userSimilarity); itemTypeDAO.insertOrUpdate(config.getTenantId(), "USER", true); Integer assocType = typeMappingService.getIdOfAssocType(config.getTenantId(), config.getAssociationType()); Integer userType = typeMappingService.getIdOfItemType(config.getTenantId(), "USER"); Integer sourceType = typeMappingService.getIdOfSourceType(config.getTenantId(), getId().toString()); Integer viewType = typeMappingService.getIdOfViewType(config.getTenantId(), config.getViewType()); stats.setNumberOfItems(easyrecDataModel.getNumItems()); int totalSteps = easyrecDataModel.getNumUsers(); int currentStep = 1; for (LongPrimitiveIterator it = easyrecDataModel.getUserIDs(); it.hasNext() && !executionControl.isAbortRequested();) { executionControl.updateProgress(currentStep++, totalSteps, "Saving Recommendations..."); long userId = it.nextLong(); List<RecommendedItem> recommendations = recommender.recommend(userId, config.getNumberOfRecs()); if (recommendations.isEmpty()) { logger.debug("User " + userId + " : no recommendations"); } // print the list of recommendations for each for (RecommendedItem recommendedItem : recommendations) { logger.debug("User " + userId + " : " + recommendedItem); Integer itemToId = (int) recommendedItem.getItemID(); Integer itemToType = itemDAO.getItemTypeIdOfItem(config.getTenantId(), itemToId); ItemVO<Integer, Integer> fromItem = new ItemVO<Integer, Integer>(config.getTenantId(), (int) userId, userType); Double recommendationStrength = (double) recommendedItem.getValue(); ItemVO<Integer, Integer> toItem = new ItemVO<Integer, Integer>(config.getTenantId(), itemToId, itemToType); ItemAssocVO<Integer, Integer> itemAssoc = new ItemAssocVO<Integer, Integer>(config.getTenantId(), fromItem, assocType, recommendationStrength, toItem, sourceType, "Mahout Boolean Generator", viewType, null, execution); itemAssocService.insertOrUpdateItemAssoc(itemAssoc); stats.incNumberOfRulesCreated(); } } }
From source file:tv.icntv.recommend.algorithm.test.RecommendFactory.java
License:Apache License
public static UserSimilarity userSimilarity(SIMILARITY type, DataModel m) throws TasteException { switch (type) { case PEARSON: return new PearsonCorrelationSimilarity(m); case COSINE://from w w w . j a v a 2 s. c o m return new UncenteredCosineSimilarity(m); case TANIMOTO: return new TanimotoCoefficientSimilarity(m); case LOGLIKELIHOOD: return new LogLikelihoodSimilarity(m); case SPEARMAN: return new SpearmanCorrelationSimilarity(m); case CITYBLOCK: return new CityBlockSimilarity(m); case EUCLIDEAN: default: return new EuclideanDistanceSimilarity(m); } }
From source file:tv.icntv.recommend.algorithm.test.RecommendFactory.java
License:Apache License
public static ItemSimilarity itemSimilarity(SIMILARITY type, DataModel m) throws TasteException { switch (type) { case PEARSON: return new PearsonCorrelationSimilarity(m); case COSINE://from www . ja v a2s . c o m return new UncenteredCosineSimilarity(m); case TANIMOTO: return new TanimotoCoefficientSimilarity(m); case LOGLIKELIHOOD: return new LogLikelihoodSimilarity(m); case CITYBLOCK: return new CityBlockSimilarity(m); case EUCLIDEAN: default: return new EuclideanDistanceSimilarity(m); } }