Example usage for org.apache.mahout.cf.taste.impl.recommender GenericBooleanPrefUserBasedRecommender GenericBooleanPrefUserBasedRecommender

List of usage examples for org.apache.mahout.cf.taste.impl.recommender GenericBooleanPrefUserBasedRecommender GenericBooleanPrefUserBasedRecommender

Introduction

In this page you can find the example usage for org.apache.mahout.cf.taste.impl.recommender GenericBooleanPrefUserBasedRecommender GenericBooleanPrefUserBasedRecommender.

Prototype

public GenericBooleanPrefUserBasedRecommender(DataModel dataModel, UserNeighborhood neighborhood,
            UserSimilarity similarity) 

Source Link

Usage

From source file:com.buddycloud.channeldirectory.search.handler.common.mahout.ChannelRecommender.java

License:Apache License

public ChannelRecommender(Properties properties) throws TasteException {

    this.recommenderDataModel = createDataModel(properties);
    DataModel dataModel = recommenderDataModel.getDataModel();

    UserSimilarity userSimilarity = new CachingUserSimilarity(new LogLikelihoodSimilarity(dataModel),
            MAX_CACHE_SIZE);//  w  w w .j a va  2  s. c  o m
    this.userNeighborhood = new NearestNUserNeighborhood(10, Double.NEGATIVE_INFINITY, userSimilarity,
            dataModel, 1.0);
    this.userRecommender = new GenericBooleanPrefUserBasedRecommender(dataModel, userNeighborhood,
            userSimilarity);

    this.itemSimilarity = new LogLikelihoodSimilarity(dataModel);
}

From source file:com.mycompany.xplor_recommendation_engine.Xplor.java

/**
 * @param args the command line arguments
 * @throws java.sql.SQLException/*  w  w  w  .  j  a v a  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: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();//  www.ja va 2s . 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: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);//  ww  w .  jav a 2 s  .  com

    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:org.easyrec.plugin.mahout.MahoutBooleanGeneratorTest.java

License:Open Source License

@Test
public void mahoutSlopeoneGeneratorTest_testBoolRecommender() throws TasteException {
    EasyrecDataModel easyrecDataModel = new EasyrecDataModel(TENANT_ID, BUY_ACTION_TYPE_ID, false,
            mahoutDataModelMappingDAO);//from   ww w .ja v  a 2  s .  c  o m
    /*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 = new TanimotoCoefficientSimilarity(easyrecDataModel);

    /*ThresholdUserNeighborhood is preferred in situations where we go in for a  similarity measure between neighbors and not any number*/
    UserNeighborhood neighborhood = new ThresholdUserNeighborhood(0.1d, userSimilarity, easyrecDataModel);

    /*GenericBooleanPrefUserBasedRecommender is appropriate for use when no notion of preference value exists in the data. */
    Recommender recommender = new GenericBooleanPrefUserBasedRecommender(easyrecDataModel, neighborhood,
            userSimilarity);

    Assert.assertEquals(30, recommender.recommend(3, 1).get(0).getItemID());
    Assert.assertEquals(1, (int) recommender.recommend(3, 1).get(0).getValue());
}

From source file:org.zaizi.mahout.config.UserBasedConfiguration.java

License:Open Source License

public Recommender configure(DataModel dataModel) throws TasteException {
    UserSimilarity userSimilarity = userSimilarityConfiguration.getUserSimilarity(dataModel);
    UserNeighborhood neighborhood = neighborhoodConfiguration.getNeighborhood(dataModel, userSimilarity);
    switch (ratingScheme) {
    case BOOLEAN_PREF:
        return new GenericBooleanPrefUserBasedRecommender(dataModel, neighborhood, userSimilarity);
    case SCORE_PREF:
        return new GenericUserBasedRecommender(dataModel, neighborhood, userSimilarity);
    default:// w  w  w.  j  a  va 2  s  .c  om
        throw new TasteException("Only Boolean or Score rating supported.");
    }

}

From source file:tv.icntv.recommend.algorithm.test.RecommendFactory.java

License:Apache License

public static RecommenderBuilder userRecommender(final UserSimilarity us, final UserNeighborhood un,
        boolean pref) throws TasteException {
    return pref ? new RecommenderBuilder() {
        @Override//from  www.ja v a 2 s.c  o m
        public Recommender buildRecommender(DataModel model) throws TasteException {
            return new GenericUserBasedRecommender(model, un, us);
        }
    } : new RecommenderBuilder() {
        @Override
        public Recommender buildRecommender(DataModel model) throws TasteException {
            return new GenericBooleanPrefUserBasedRecommender(model, un, us);
        }
    };
}

From source file:user.based.recommendation.PearsonCorrelation.java

private void cmboboxUserItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_cmboboxUserItemStateChanged
    // TODO add your handling code here:
    try {/*from w w  w.ja v  a2  s .  c  om*/

        DataModel model = new FileDataModel(new File("userPreference.csv"));

        UserSimilarity similarity = new PearsonCorrelationSimilarity(model);
        //UserSimilarity similarity1 = new SpearmanCorrelationSimilarity(model);

        UserNeighborhood neighborhood = new ThresholdUserNeighborhood(0.1, similarity, model);
        //UserNeighborhood neighborhood1 = new ThresholdUserNeighborhood(0.1, similarity1, model);

        UserBasedRecommender recommender = new GenericBooleanPrefUserBasedRecommender(model, neighborhood,
                similarity);
        UserBasedRecommender recommender1 = new GenericUserBasedRecommender(model, neighborhood, similarity);

        List<RecommendedItem> recommendations = recommender
                .recommend(Integer.parseInt(cmboboxUser.getSelectedItem().toString()), 3);
        List<RecommendedItem> recommendations1 = recommender1
                .recommend(Integer.parseInt(cmboboxUser.getSelectedItem().toString()), 3);

        System.out.println("Recommendation length: " + recommendations.size());
        result = new ArrayList<>();
        for (RecommendedItem item : recommendations) {
            System.out.println(
                    table.get(Integer.parseInt(Long.toString(item.getItemID()))) + " : " + item.getValue());
            result.add(table.get(Integer.parseInt(Long.toString(item.getItemID()))) + " : " + item.getValue());
        }

        System.out.println("Boolean recommendation: ");
        for (RecommendedItem item : recommendations1) {
            //              System.out.println(table.get(Integer.parseInt(Long.toString(item.getItemID()))) + " : " + item.getValue());
            //               result.add(table.get(Integer.parseInt(Long.toString(item.getItemID()))) + " : " + item.getValue());
        }

        lstRecommendedItems.setListData(result.toArray());
    } catch (IOException | TasteException | NumberFormatException ex) {
        System.out.println("Here is the exception: " + ex.getMessage());
    }

}