@Nullable private Long2DoubleMap getUserRatingVector(long user) { Long2DoubleMap ratings = rvDAO.userRatingVector(user); return ratings.isEmpty() ? null : ratings; }
Long2ObjectMap<LongSortedSet> userItems) { try (ObjectStream<IdBox<Long2DoubleMap>> stream = rvDAO.streamUsers()) { for (IdBox<Long2DoubleMap> user : stream) { long uid = user.getId();
@Override public Iterable<Neighbor> getCandidateNeighbors(final long user, LongSet items) { Long2DoubleMap ratings = rvDAO.userRatingVector(user); if (ratings.isEmpty()) { return Collections.emptyList(); } final Long2DoubleMap nratings = similarityNormalizer.makeTransformation(user, ratings) .apply(ratings); final LongSet candidates = findCandidateNeighbors(user, nratings.keySet(), items); logger.debug("found {} candidate neighbors for {}", candidates.size(), user); return new Iterable<Neighbor>() { @Override public Iterator<Neighbor> iterator() { return new NeighborIterator(user, nratings, candidates); } }; }
try (ObjectStream<IdBox<Long2DoubleMap>> ratings = dao.streamUsers()) { for (IdBox<Long2DoubleMap> user: ratings) { final long uid = user.getId();
/** * Score all items into an accumulator. * @param user The user. * @param items The items to score. * @param accum The accumulator. */ private void scoreItems(long user, @Nonnull Collection<Long> items, ItemItemScoreAccumulator accum) { Long2DoubleMap ratings = Long2DoubleSortedArrayMap.create(rvDAO.userRatingVector(user)); logger.trace("user has {} ratings", ratings.size()); InvertibleFunction<Long2DoubleMap, Long2DoubleMap> transform = normalizer.makeTransformation(user, ratings); Long2DoubleMap itemScores = transform.apply(ratings); LongIterator iter = LongIterators.asLongIterator(items.iterator()); while (iter.hasNext()) { final long item = iter.nextLong(); scoreItem(itemScores, item, accum); } accum.applyReversedTransform(transform); }
@Override public UserSnapshot get() { Long2ObjectMap<Long2DoubleMap> vectors = new Long2ObjectOpenHashMap<>(); try (ObjectStream<IdBox<Long2DoubleMap>> users = rvDAO.streamUsers()) { for (IdBox<Long2DoubleMap> user : users) { Long2DoubleMap uvec = LongUtils.frozenMap(user.getValue());
@Nonnull @Override public ResultMap scoreWithDetails(long user, @Nonnull Collection<Long> items) { Long2DoubleMap ratings = dao.userRatingVector(user);
@Override public UserItemBiasModel get() { double intercept = itemBiases.getIntercept(); Long2DoubleMap itemOff = itemBiases.getItemBiases(); Long2DoubleMap map = new Long2DoubleOpenHashMap(); try (ObjectStream<IdBox<Long2DoubleMap>> stream = dao.streamUsers()) { for (IdBox<Long2DoubleMap> user : stream) { Long2DoubleMap uvec = user.getValue(); double usum = 0; for (Long2DoubleMap.Entry e: uvec.long2DoubleEntrySet()) { double off = itemOff.get(e.getLongKey()); usum += e.getDoubleValue() - intercept - off; } map.put(user.getId(), usum / (uvec.size() + damping)); } } return new UserItemBiasModel(intercept, map, itemOff); } }
@Nonnull @Override public ResultMap scoreWithDetails(long user, @Nonnull Collection<Long> items) { Long2DoubleMap ratings = dao.userRatingVector(user);
Long2DoubleMap sums = new Long2DoubleOpenHashMap(); Long2DoubleMap counts = new Long2DoubleOpenHashMap(); try (ObjectStream<IdBox<Long2DoubleMap>> stream = dao.streamUsers()) { for (IdBox<Long2DoubleMap> user : stream) { Long2DoubleMap uvec = user.getValue();
@Nonnull @Override public ResultMap scoreWithDetails(long user, @Nonnull Collection<Long> items) { Long2DoubleMap history = dao.userRatingVector(user);
for (IdBox<Long2DoubleMap> u : test.streamUsers()) { long user = u.getId();
@Override public double getUserBias(long user) { Long2DoubleMap vec = dao.userRatingVector(user); if (vec.isEmpty()) { return 0; } else { double sum = 0; double mean = getIntercept(); for (Long2DoubleMap.Entry e: vec.long2DoubleEntrySet()) { sum += e.getDoubleValue() - mean - getItemBias(e.getLongKey()); } return sum / vec.size(); } }
Long2ObjectMap<LongSortedSet> userItems) { try (ObjectStream<IdBox<Long2DoubleMap>> stream = rvDAO.streamUsers()) { for (IdBox<Long2DoubleMap> user : stream) { long uid = user.getId();
@Test public void testNoUser() { EntityCollectionDAO dao = EntityCollectionDAO.create(); RatingVectorPDAO source = new EntityCountRatingVectorPDAO(dao, LIKE); assertThat(source.userRatingVector(42).entrySet(), hasSize(0)); }
try (ObjectStream<IdBox<Long2DoubleMap>> ratings = dao.streamUsers()) { for (IdBox<Long2DoubleMap> user: ratings) { final long uid = user.getId();
@Test public void testNoUser() { EntityCollectionDAO dao = EntityCollectionDAO.create(); RatingVectorPDAO source = new StandardRatingVectorPDAO(dao); assertThat(source.userRatingVector(42).entrySet(), hasSize(0)); }
@Override public UserSnapshot get() { Long2ObjectMap<Long2DoubleMap> vectors = new Long2ObjectOpenHashMap<>(); try (ObjectStream<IdBox<Long2DoubleMap>> users = rvDAO.streamUsers()) { for (IdBox<Long2DoubleMap> user : users) { Long2DoubleMap uvec = LongUtils.frozenMap(user.getValue());
@Test public void testNoUser() { EntityCollectionDAO dao = EntityCollectionDAO.create(); RatingVectorPDAO source = new CountSumRatingVectorPDAO(dao, LIKE); assertThat(source.userRatingVector(42).entrySet(), hasSize(0)); }
@Override public UserItemBiasModel get() { double intercept = itemBiases.getIntercept(); Long2DoubleMap itemOff = itemBiases.getItemBiases(); Long2DoubleMap map = new Long2DoubleOpenHashMap(); try (ObjectStream<IdBox<Long2DoubleMap>> stream = dao.streamUsers()) { for (IdBox<Long2DoubleMap> user : stream) { Long2DoubleMap uvec = user.getValue(); double usum = 0; for (Long2DoubleMap.Entry e: uvec.long2DoubleEntrySet()) { double off = itemOff.get(e.getLongKey()); usum += e.getDoubleValue() - intercept - off; } map.put(user.getId(), usum / (uvec.size() + damping)); } } return new UserItemBiasModel(intercept, map, itemOff); } }