List of usage examples for org.apache.mahout.cf.taste.recommender IDRescorer isFiltered
boolean isFiltered(long id);
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; }