Example usage for org.apache.mahout.cf.taste.impl.similarity UncenteredCosineSimilarity UncenteredCosineSimilarity

List of usage examples for org.apache.mahout.cf.taste.impl.similarity UncenteredCosineSimilarity UncenteredCosineSimilarity

Introduction

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

Prototype

public UncenteredCosineSimilarity(DataModel dataModel) throws TasteException 

Source Link

Usage

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 ww .  j a va2s .co  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:edu.uniandes.movie.recommenders.ItemRecommender.java

public void init() throws TasteException, IOException {
    DataModel dm = new FileDataModel(new File(""));
    ItemSimilarity is = new UncenteredCosineSimilarity(dm);
    recommender = new GenericItemBasedRecommender(dm, is);
}

From source file:nl.gridline.zieook.tasks.quality.MahoutEvaluatorTest.java

License:Apache License

@Test
public void testUncenteredCosineSimilarity() throws TasteException, IOException {
    RandomUtils.useTestSeed();/*  w w w. j  a  va 2s.c  o m*/

    LOG.info("testing: UncenteredCosineSimilarity:");

    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 {
            UncenteredCosineSimilarity similarity = new UncenteredCosineSimilarity(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: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 va  2  s.c  om
        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  w ww  .  j  a  va2s  . co 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);
    }
}

From source file:uit.tkorg.pr.method.cf.KNNCF.java

public static void CosineRecommend(String inputFile, int k, int n, String outputFile)
        throws IOException, TasteException {
    File userPreferencesFile = new File(inputFile);
    DataModel dataModel = new FileDataModel(userPreferencesFile);

    UserSimilarity userSimilarity = new UncenteredCosineSimilarity(dataModel);
    UserNeighborhood userNeighborhood = new NearestNUserNeighborhood(k, userSimilarity, dataModel);

    // Create a generic user based recommender with the dataModel, the userNeighborhood and the userSimilarity
    Recommender genericRecommender = new GenericUserBasedRecommender(dataModel, userNeighborhood,
            userSimilarity);//from   ww  w  . j  av  a  2 s  .co  m
    BufferedWriter bw = new BufferedWriter(new FileWriter(outputFile));

    // Recommend 5 items for each user
    for (LongPrimitiveIterator iterator = dataModel.getUserIDs(); iterator.hasNext();) {
        long userId = iterator.nextLong();

        // Generate a list of 5 recommendations for the user
        List<RecommendedItem> itemRecommendations = genericRecommender.recommend(userId, n);

        if (!itemRecommendations.isEmpty()) {
            // Display the list of recommendations
            for (RecommendedItem recommendedItem : itemRecommendations) {
                bw.write(
                        userId + "," + recommendedItem.getItemID() + "," + recommendedItem.getValue() + "\r\n");
            }
        }
    }
    bw.close();
}

From source file:uit.tkorg.pr.method.cf.KNNCF.java

/**
 * //from   w w  w  .  java 2 s  . com
 * @param inputFile
 * @param similarityScheme: 1: CoPearson, 2: Cosine.
 * @param k
 * @param authorTestSet
 * @param outputFile
 * @throws IOException
 * @throws TasteException 
 */
public static void computeCFRatingAndPutIntoModelForAuthorList(String inputFile, int similarityScheme, int k,
        HashMap<String, Author> authorTestSet, HashSet<String> paperIdsInTestSet, String outputFile)
        throws IOException, TasteException {
    DataModel dataModel = new FileDataModel(new File(inputFile));

    UserSimilarity userSimilarity = null;
    if (similarityScheme == 1) {
        userSimilarity = new PearsonCorrelationSimilarity(dataModel);
    } else if (similarityScheme == 2) {
        userSimilarity = new UncenteredCosineSimilarity(dataModel);
    }
    UserNeighborhood userNeighborhood = new NearestNUserNeighborhood(k, userSimilarity, dataModel);

    // Create a generic user based recommender with the dataModel, the userNeighborhood and the userSimilarity
    Recommender genericRecommender = new GenericUserBasedRecommender(dataModel, userNeighborhood,
            userSimilarity);
    FileUtils.deleteQuietly(new File(outputFile));
    try (BufferedWriter bw = new BufferedWriter(new FileWriter(outputFile))) {
        int count = 0;
        System.out.println("Number of users:" + authorTestSet.size());
        for (LongPrimitiveIterator iterator = dataModel.getUserIDs(); iterator.hasNext();) {
            long userId = iterator.nextLong();
            // Generate a list of n recommendations for the user
            if (authorTestSet.containsKey(String.valueOf(userId).trim())) {
                System.out.println("Computing CF rating value for user no. " + count);
                List<RecommendedItem> recommendationList = genericRecommender.recommend(userId,
                        dataModel.getNumItems());
                if (!recommendationList.isEmpty()) {
                    // Display the list of recommendations
                    for (RecommendedItem recommendedItem : recommendationList) {
                        String authorId = String.valueOf(userId).trim();
                        String paperId = String.valueOf(recommendedItem.getItemID()).trim();
                        if (paperIdsInTestSet.contains(paperId)) {
                            authorTestSet.get(authorId).getCfRatingHM().put(paperId,
                                    Float.valueOf(recommendedItem.getValue()));
                            bw.write(userId + "," + recommendedItem.getItemID() + ","
                                    + recommendedItem.getValue() + "\r\n");
                        }
                    }
                }
                count++;
            }
        }
    }
}