@Override public UserIdealRelevanceModel<U, I> getModel(U user) { return (UserIdealRelevanceModel<U, I>) super.getModel(user); }
@Override public double evaluate(Recommendation<U, I> recommendation) { UserRelevanceModel<U, I> urm = relModel.getModel(recommendation.getUser()); return recommendation.getItems().stream() .limit(cutoff) .map(Tuple2od::v1) .filter(urm::isRelevant) .count() >= k ? 1.0 : 0.0; }
/** * Returns a score for the recommendation list. * * @param recommendation recommendation list * @return score of the metric to the recommendation */ @Override public double evaluate(Recommendation<U, I> recommendation) { UserRelevanceModel<U, I> userRelModel = relModel.getModel(recommendation.getUser()); return recommendation.getItems().stream() .limit(cutoff) .map(Tuple2od::v1) .filter(userRelModel::isRelevant) .count() / (double) cutoff; } }
@Override public void add(Recommendation<U, I> recommendation) { RelevanceModel.UserRelevanceModel<U, I> urm = rel.getModel(recommendation.getUser()); List<Tuple2od<I>> list = recommendation.getItems(); int rank = Math.min(cutoff, list.size()); double userNorm = IntStream.range(0, rank).mapToDouble(disc::disc).sum(); IntStream.range(0, rank).forEach(k -> { I i = list.get(k).v1; double d = disc.disc(k); double w = d * urm.gain(i) / userNorm; itemCount.addTo(i, d); itemWeight.addTo(i, w); }); freeNorm += userNorm; numUsers++; }
/** * Returns a score for the recommendation list. * * @param recommendation recommendation list * @return score of the metric to the recommendation */ @Override public double evaluate(Recommendation<U, I> recommendation) { RelevanceModel.UserRelevanceModel<U, I> userRelModel = relModel.getModel(recommendation.getUser()); Set<F> subtopics = new HashSet<>(); int rank = 0; for (Tuple2od<I> iv : recommendation.getItems()) { if (userRelModel.isRelevant(iv.v1)) { subtopics.addAll(featureData.getItemFeatures(iv.v1) .map(Tuple2::v1) .collect(toList())); } rank++; if (rank >= cutoff) { break; } } return subtopics.size() / (double) featureData.numFeatures(); }
/** * Returns a score for the recommendation list. * * @param recommendation recommendation list * @return score of the metric to the recommendation */ @Override public double evaluate(Recommendation<U, I> recommendation) { RelevanceModel.UserRelevanceModel<U, I> urm = relModel.getModel(recommendation.getUser()); List<Tuple2od<I>> items = recommendation.getItems(); int r = range(0, items.size()) .limit(cutoff) .filter(k -> urm.isRelevant(items.get(k).v1)) .findFirst().orElse(-1); if (r == -1) { return 0; } else { return 1 / (1.0 + r); } } }
RelevanceModel.UserRelevanceModel<U, I> userRelModel = relModel.getModel(recommendation.getUser());
/** * Returns a score for the recommendation list. * * @param recommendation recommendation list * @return score of the metric to the recommendation */ @Override public double evaluate(Recommendation<U, I> recommendation) { RelevanceModel.UserRelevanceModel<U, I> userRelModel = relModel.getModel(recommendation.getUser()); BinomialModel<U, I, F>.UserBinomialModel prob = binomialModel.getModel(recommendation.getUser()); Object2IntOpenHashMap<F> count = new Object2IntOpenHashMap<>(); count.defaultReturnValue(0); int rank = 0; int nrel = 0; for (Tuple2od<I> iv : recommendation.getItems()) { if (userRelModel.isRelevant(iv.v1)) { featureData.getItemFeatures(iv.v1) .forEach(fv -> count.addTo(fv.v1, 1)); nrel++; } rank++; if (rank >= cutoff) { break; } } return getResultFromCount(prob, count, nrel, rank); }
@Override public double evaluate(Recommendation<U, I> recommendation) { RelevanceModel.UserRelevanceModel<U, I> userRelModel = relModel.getModel(recommendation.getUser()); BinomialModel<U, I, F>.UserBinomialModel prob = binomialModel.getModel(recommendation.getUser());
public double evaluate(Recommendation<U, I> recommendation) { U u = recommendation.getUser(); RelevanceModel.UserRelevanceModel<U, I> userRelModel = relModel.getModel(u); ItemNovelty.UserItemNoveltyModel<U, I> uinm = novelty.getModel(u);