Example usage for org.apache.mahout.cf.taste.impl.neighborhood ThresholdUserNeighborhood ThresholdUserNeighborhood

List of usage examples for org.apache.mahout.cf.taste.impl.neighborhood ThresholdUserNeighborhood ThresholdUserNeighborhood

Introduction

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

Prototype

public ThresholdUserNeighborhood(double threshold, UserSimilarity userSimilarity, DataModel dataModel) 

Source Link

Usage

From source file:UserbasedRecommender.java

License:Apache License

/**
 * Method that creates a list of recommendations based on collaborative filtering
 * //from ww  w.  ja va2 s.  co m
 * @param model      the data needed. The data is what is stored at the moment in the collaborativ_view in the database.
 * @return         the list of computed recommendations
 */
public ArrayList<CollaborativeRecommendation> RunUserbasedRecommender(DataModel model) {

    ArrayList<CollaborativeRecommendation> recommendedItemsList = new ArrayList<CollaborativeRecommendation>();
    try {
        /*Comparing the user interactions. This computes the correlation coefficient between user interactions.*/
        UserSimilarity similarity = new PearsonCorrelationSimilarity(model);

        /*Deciding for which users to affect the recommender. Here we use all that have a similarity greater than 0.1 */
        UserNeighborhood neighborhood = new ThresholdUserNeighborhood(0.1, similarity, model);

        /*Recommender*/
        UserBasedRecommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity);

        /*Get recommendations for this userId*/
        List<RecommendedItem> recommendations = recommender.recommend(userId, 167);
        if (!recommendations.isEmpty()) {
            for (RecommendedItem recommendation : recommendations) {
                recommendedItemsList
                        .add(new CollaborativeRecommendation(recommendation, (int) userId, "user based"));
            }
        } else {
            /*There are no recommendations for this user*/
            System.out.println("No recommendations for this user in userbased");
        }

    } catch (TasteException e) {
        e.printStackTrace();
    }
    return recommendedItemsList;
}

From source file:com.checkup.mahout.test.ExampleTest.java

@Test
public void quickstart() throws IOException, TasteException {
    DataModel model = new FileDataModel(new File(Resources.quickstart_csv.getFile()));
    UserSimilarity similarity = new PearsonCorrelationSimilarity(model);
    UserNeighborhood neighborhood = new ThresholdUserNeighborhood(0.1, similarity, model);
    UserBasedRecommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity);
    List<RecommendedItem> recommendations = recommender.recommend(2, 3);
    for (RecommendedItem recommendation : recommendations) {
        System.out.println(recommendation);
    }//from   ww w  .  j  av  a2  s .  c  om
}

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

public Recommender buildUserBasedRecommender(DataModel dataModel) {
    Recommender recommender;/*from ww  w .j  av a  2 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:com.mycompany.mahoutrecco.App.java

public static void main(String[] args) throws Exception {

    DataModel model = new FileDataModel(new File("data/justBeforeMahout.csv"));

    UserSimilarity similarity = new PearsonCorrelationSimilarity(model);
    UserNeighborhood neighborhood = new ThresholdUserNeighborhood(0.1, similarity, model);
    UserBasedRecommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity);

    List<RecommendedItem> recommendations = recommender.recommend(503046, 5);
    System.out.println(recommendations);
    for (RecommendedItem recommendation : recommendations) {
        System.out.println(recommendation);
    }/*from   ww  w  .ja  v a2s . c  o m*/
}

From source file:com.mycompany.mavenproject1.Recommendor.java

public static void main(String[] args) throws Exception {
    DataModel model = new FileDataModel(new File("src/Data/data.csv"));
    UserSimilarity similarity = new PearsonCorrelationSimilarity(model);
    UserNeighborhood neighborhood = new ThresholdUserNeighborhood(2, similarity, model);
    UserBasedRecommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity);
    List<RecommendedItem> recommendations = recommender.recommend(1, 1);
    for (RecommendedItem recommendation : recommendations) {
        System.out.println(recommendation);
    }//ww w .  ja va2 s .  c o  m

}

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

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

/**
 * @param args the command line arguments
 *//*from w  ww  .  j av a 2  s  .  c  om*/
public static void main(String[] args) throws TasteException, IOException {
    DataModel model = new FileDataModel(new File("/Users/wendyzhuo/Desktop/data3.csv"));
    //Computer the similarity between users,according to their preference
    UserSimilarity similarity = new EuclideanDistanceSimilarity(model);

    //Group the users with similar preference
    UserNeighborhood neighborhood = new ThresholdUserNeighborhood(0.2, similarity, model);

    //Create a recommender
    UserBasedRecommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity);
    //For the user with the id 1 get two recommendations

    List<RecommendedItem> recommendations = recommender.recommend(1, 2);
    for (RecommendedItem recommendation : recommendations) {
        System.out.println("they should not take id: " + recommendation.getItemID() + "(predicted preference:"
                + recommendation.getValue() + ")");
    }

    // TODO code application logic here
}

From source file:fr.paris.lutece.plugins.recommendation.service.RecommendationService.java

License:Open Source License

/**
 * Initialize a recommender/*from  w  w  w . ja va  2 s  . c  om*/
 * @param strName The recommender name
 * @return The recommender
 */
private static UserBasedRecommender initRecommender(String strName) {
    try {
        AppLogService.info("Initialize Mahout JDBC DataModel for Recommender '" + strName + "'");

        String strKeyPrefix = PREFIX + strName;
        String strDataSource = AppPropertiesService.getProperty(strKeyPrefix + PROPERTY_DATASOURCE);
        AppLogService.info("- DataSource = " + strDataSource);

        String strPrefTable = AppPropertiesService.getProperty(strKeyPrefix + PROPERTY_PREF_TABLE);
        AppLogService.info("- Table = " + strPrefTable);

        String strUserIdColumn = AppPropertiesService.getProperty(strKeyPrefix + PROPERTY_USER_ID_COL);
        AppLogService.info("- User ID Column = " + strUserIdColumn);

        String strItemIdColumn = AppPropertiesService.getProperty(strKeyPrefix + PROPERTY_ITEM_ID_COL);
        AppLogService.info("- Item ID Column = " + strItemIdColumn);

        String strPrefColumn = AppPropertiesService.getProperty(strKeyPrefix + PROPERTY_PREF_COL);
        AppLogService.info("- Pref Column = " + strPrefColumn);

        PoolManager pm = AppConnectionService.getPoolManager();
        DataSource dataSource = pm.getDataSource(strDataSource);

        DataModel model = new MySQLJDBCDataModel(dataSource, strPrefTable, strUserIdColumn, strItemIdColumn,
                strPrefColumn, null);
        UserSimilarity similarity = new PearsonCorrelationSimilarity(model);
        UserNeighborhood neighborhood = new ThresholdUserNeighborhood(0.1, similarity, model);

        return new GenericUserBasedRecommender(model, neighborhood, similarity);
    } catch (TasteException ex) {
        AppLogService.error("Error loading recommender : " + ex.getMessage(), ex);
    }

    return null;
}

From source file:hr.fer.tel.rovkp.homework03.task02.RecommenderUtils.java

public static GenericUserBasedRecommender userBasedRecommender(DataModel model) throws TasteException {
    UserSimilarity similarity = new PearsonCorrelationSimilarity(model);
    UserNeighborhood neighborhood = new ThresholdUserNeighborhood(0.9, similarity, model);
    return new GenericUserBasedRecommender(model, neighborhood, similarity);
}