Example usage for org.apache.mahout.cf.taste.recommender IDRescorer isFiltered

List of usage examples for org.apache.mahout.cf.taste.recommender IDRescorer isFiltered

Introduction

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

Prototype

boolean isFiltered(long id);

Source Link

Document

Returns true to exclude the given thing.

Usage

From source file:com.mashup.resys.recommender.TopItems.java

License:Apache License

public static List<RecommendedItem> getTopItems(int howMany, LongPrimitiveIterator possibleItemIDs,
        IDRescorer rescorer, Estimator<Long> estimator) throws TasteException {
    if ((possibleItemIDs == null) || (estimator == null)) {
        throw new IllegalArgumentException("argument is null");
    }/*from w w w . j a  v a  2 s . c o  m*/
    Queue<RecommendedItem> topItems = new PriorityQueue<RecommendedItem>(howMany + 1,
            Collections.reverseOrder(ByValueRecommendedItemComparator.getInstance()));
    boolean full = false;
    double lowestTopValue = Double.NEGATIVE_INFINITY;
    while (possibleItemIDs.hasNext()) {
        long itemID = possibleItemIDs.next();
        if ((rescorer == null) || !rescorer.isFiltered(itemID)) {
            double preference;
            try {
                preference = estimator.estimate(itemID);
            } catch (NoSuchItemException nsie) {
                continue;
            }
            double rescoredPref = rescorer == null ? preference : rescorer.rescore(itemID, preference);

            if (!Double.isNaN(rescoredPref) && (!full || (rescoredPref > lowestTopValue))) {
                topItems.add(new GenericRecommendedItem(itemID, (float) rescoredPref));
                if (full) {
                    topItems.poll();
                } else if (topItems.size() > howMany) {
                    full = true;
                    topItems.poll();
                }
                lowestTopValue = topItems.peek().getValue();
            }
        }
    }
    int size = topItems.size();

    if (size == 0) {
        return Collections.emptyList();
    }
    List<RecommendedItem> result = new ArrayList<RecommendedItem>(size);
    result.addAll(topItems);
    Collections.sort(result, ByValueRecommendedItemComparator.getInstance());
    return result;
}

From source file:com.mashup.resys.recommender.TopItems.java

License:Apache License

public static long[] getTopUsers(int howMany, LongPrimitiveIterator allUserIDs, IDRescorer rescorer,
        Estimator<Long> estimator) throws TasteException {
    Queue<SimilarUser> topUsers = new PriorityQueue<SimilarUser>(howMany + 1, Collections.reverseOrder());
    boolean full = false;
    double lowestTopValue = Double.NEGATIVE_INFINITY;
    while (allUserIDs.hasNext()) {
        long userID = allUserIDs.next();
        if ((rescorer != null) && rescorer.isFiltered(userID)) {
            continue;
        }/*from  w w  w .j ava2  s.  c o m*/
        double similarity;
        try {
            similarity = estimator.estimate(userID);
        } catch (NoSuchUserException nsue) {
            continue;
        }
        double rescoredSimilarity = rescorer == null ? similarity : rescorer.rescore(userID, similarity);
        if (!Double.isNaN(rescoredSimilarity) && (!full || (rescoredSimilarity > lowestTopValue))) {
            topUsers.add(new SimilarUser(userID, similarity));
            if (full) {
                topUsers.poll();
            } else if (topUsers.size() > howMany) {
                full = true;
                topUsers.poll();
            }
            lowestTopValue = topUsers.peek().getSimilarity();
        }
    }
    int size = topUsers.size();
    if (size == 0) {
        return NO_IDS;
    }
    List<SimilarUser> sorted = new ArrayList<SimilarUser>(size);
    sorted.addAll(topUsers);
    Collections.sort(sorted);
    long[] result = new long[size];
    int i = 0;
    for (SimilarUser similarUser : sorted) {
        result[i++] = similarUser.getUserID();
    }
    return result;
}

From source file:com.webir.popcornsaver.cluster.TreeClusteringRecommender.java

License:Apache License

@Override
public List<RecommendedItem> recommend(long userID, int howMany, IDRescorer rescorer) throws TasteException {
    Preconditions.checkArgument(howMany >= 1, "howMany must be at least 1");
    buildClusters();/*from w  w  w  .ja v a  2  s  . c o m*/

    log.debug("Recommending items for user ID '{}'", userID);

    List<RecommendedItem> recommended = topRecsByUserID.get(userID);
    if (recommended == null) {
        return Collections.emptyList();
    }

    DataModel dataModel = getDataModel();
    List<RecommendedItem> rescored = new ArrayList<RecommendedItem>(recommended.size());
    // Only add items the user doesn't already have a preference for.
    // And that the rescorer doesn't "reject".
    for (RecommendedItem recommendedItem : recommended) {
        long itemID = recommendedItem.getItemID();
        if ((rescorer != null) && rescorer.isFiltered(itemID)) {
            continue;
        }
        if ((dataModel.getPreferenceValue(userID, itemID) == null) && ((rescorer == null)
                || !Double.isNaN(rescorer.rescore(itemID, recommendedItem.getValue())))) {
            rescored.add(recommendedItem);
        }
    }
    Collections.sort(rescored, new ByRescoreComparator(rescorer));

    return rescored;
}

From source file:net.myrrix.online.MostPopularItemsIterator.java

License:Apache License

@Override
public RecommendedItem next() {
    FastByIDFloatMap.MapEntry entry = countsIterator.next();
    long id = entry.getKey();
    float value = entry.getValue();
    IDRescorer theRescorer = rescorer;
    if (theRescorer != null) {
        if (theRescorer.isFiltered(id)) {
            return null;
        }//from w w  w  .  j  a  v a2  s . c  o  m
        value = (float) theRescorer.rescore(id, value);
        if (!LangUtils.isFinite(value)) {
            return null;
        }
    }
    delegate.set(id, value);
    return delegate;
}

From source file:net.myrrix.online.MultiRescorer.java

License:Apache License

@Override
public boolean isFiltered(long itemID) {
    for (IDRescorer rescorer : rescorers) {
        if (rescorer.isFiltered(itemID)) {
            return true;
        }/*from  w w  w  . j a v  a2s .co  m*/
    }
    return false;
}

From source file:net.myrrix.online.MultiRescorerProviderTest.java

License:Apache License

@Test
public void testMultiRecommendRescorer() {
    RescorerProvider multi = new MultiRescorerProvider(new SimpleModRescorerProvider(2),
            new SimpleModRescorerProvider(3));

    IDRescorer provider = multi.getRecommendRescorer(new long[] { 5 }, (MyrrixRecommender) null);
    assertNull(provider);/*from   w  w  w  .  ja  v a2  s  .  c om*/

    provider = multi.getRecommendRescorer(new long[] { 2 }, (MyrrixRecommender) null);
    assertNotNull(provider);
    assertFalse(provider instanceof MultiRescorer);
    assertTrue(provider.isFiltered(3));
    assertFalse(provider.isFiltered(2));

    provider = multi.getRecommendRescorer(new long[] { 6 }, (MyrrixRecommender) null);
    assertNotNull(provider);
    assertTrue(provider instanceof MultiRescorer);
    assertTrue(provider.isFiltered(3));
    assertTrue(provider.isFiltered(2));
    assertFalse(provider.isFiltered(12));
}

From source file:net.myrrix.online.MultiRescorerProviderTest.java

License:Apache License

@Test
public void testMultiRecommendToAnonymousRescorer() {
    RescorerProvider multi = new MultiRescorerProvider(new SimpleModRescorerProvider(2),
            new SimpleModRescorerProvider(3));

    IDRescorer provider = multi.getRecommendToAnonymousRescorer(new long[] { 5 }, (MyrrixRecommender) null);
    assertNull(provider);//from   w ww.  j a v  a  2 s  . co m

    provider = multi.getRecommendToAnonymousRescorer(new long[] { 2 }, (MyrrixRecommender) null);
    assertNotNull(provider);
    assertFalse(provider instanceof MultiRescorer);
    assertTrue(provider.isFiltered(3));
    assertFalse(provider.isFiltered(2));

    provider = multi.getRecommendToAnonymousRescorer(new long[] { 6 }, (MyrrixRecommender) null);
    assertNotNull(provider);
    assertTrue(provider instanceof MultiRescorer);
    assertTrue(provider.isFiltered(3));
    assertTrue(provider.isFiltered(2));
    assertFalse(provider.isFiltered(12));
}

From source file:net.myrrix.online.MultiRescorerProviderTest.java

License:Apache License

@Test
public void testMultiMostPopularItemsRescorer() {
    RescorerProvider multi = new MultiRescorerProvider(new SimpleModRescorerProvider(2),
            new SimpleModRescorerProvider(3));
    IDRescorer provider = multi.getMostPopularItemsRescorer(null);
    assertNotNull(provider);//from  w w w .j  a v a  2 s. co  m
    assertTrue(provider instanceof MultiRescorer);
    assertTrue(provider.isFiltered(3));
    assertTrue(provider.isFiltered(2));
    assertFalse(provider.isFiltered(6));
}

From source file:net.myrrix.online.RecommendIterator.java

License:Apache License

@Override
public RecommendedItem next() {
    FastByIDMap.MapEntry<float[]> entry = Yiterator.next();
    long itemID = entry.getKey();

    if (userTagIDs.contains(itemID)) {
        return null;
    }/*  w  w w  . j av a  2s  . c o m*/

    FastIDSet theKnownItemIDs = knownItemIDs;
    if (theKnownItemIDs != null) {
        synchronized (theKnownItemIDs) {
            if (theKnownItemIDs.contains(itemID)) {
                return null;
            }
        }
    }

    IDRescorer rescorer = this.rescorer;
    if (rescorer != null && rescorer.isFiltered(itemID)) {
        return null;
    }

    float[] itemFeatures = entry.getValue();
    double sum = 0.0;
    int count = 0;
    for (float[] oneUserFeatures : features) {
        sum += SimpleVectorMath.dot(itemFeatures, oneUserFeatures);
        count++;
    }

    if (rescorer != null) {
        sum = rescorer.rescore(itemID, sum);
        if (!LangUtils.isFinite(sum)) {
            return null;
        }
    }

    float result = (float) (sum / count);
    Preconditions.checkState(LangUtils.isFinite(result), "Bad recommendation value");
    delegate.set(itemID, result);
    return delegate;
}

From source file:org.plista.kornakapi.core.recommender.ArrayTopItems.java

License:Apache License

public static List<RecommendedItem> getTopItems(int howMany, long[] possibleItemIDs, int fromIndex, int toIndex,
        IDRescorer rescorer, TopItems.Estimator<Long> estimator) throws TasteException {

    Preconditions.checkArgument(possibleItemIDs != null, "possibleItemIDs is null");
    Preconditions.checkArgument(estimator != null, "estimator is null");

    Queue<RecommendedItem> topItems = new PriorityQueue<RecommendedItem>(howMany + 1,
            Collections.reverseOrder(ByValueRecommendedItemComparator.getInstance()));
    boolean full = false;
    double lowestTopValue = Double.NEGATIVE_INFINITY;
    for (int index = fromIndex; index < toIndex; index++) {
        long itemID = possibleItemIDs[index];
        if (rescorer == null || !rescorer.isFiltered(itemID)) {
            double preference;
            try {
                preference = estimator.estimate(itemID);
            } catch (NoSuchItemException nsie) {
                continue;
            } catch (NoSuchUserException nsue) {
                continue;
            }//from ww w .java  2  s .c om
            double rescoredPref = rescorer == null ? preference : rescorer.rescore(itemID, preference);
            if (!Double.isNaN(rescoredPref) && (!full || rescoredPref > lowestTopValue)) {
                topItems.add(new GenericRecommendedItem(itemID, (float) rescoredPref));
                if (full) {
                    topItems.poll();
                } else if (topItems.size() > howMany) {
                    full = true;
                    topItems.poll();
                }
                lowestTopValue = topItems.peek().getValue();
            }
        }
    }
    int size = topItems.size();
    if (size == 0) {
        return Collections.emptyList();
    }
    List<RecommendedItem> result = Lists.newArrayListWithCapacity(size);
    result.addAll(topItems);
    Collections.sort(result, ByValueRecommendedItemComparator.getInstance());
    return result;
}