/** * Constructor. * * @param caching are profile distances cached? * @param recommenderData preference data * @param dist item distance model */ public PDItemNovelty(boolean caching, PreferenceData<U, I> recommenderData, ItemDistanceModel<I> dist) { super(caching, recommenderData.getUsersWithPreferences()); this.recommenderData = recommenderData; this.dist = dist; }
@Override public int numPreferences() { return d1.numPreferences() + d2.numPreferences(); }
/** * Loads a SimplePreferenceData from a stream of user-item-value triples. * * @param <U> user type * @param <I> item type * @param tuples user-item-value triples * @return instance of SimplePreferenceData containing the information in the input */ public static <U, I> SimplePreferenceData<U, I> load(Stream<Tuple3<U, I, Double>> tuples) { return load((Stream<Tuple4<U, I, Double, Void>>) tuples.map(t -> t.concat((Void) null)), (u, i, v, o) -> new IdPref<>(i, v), (u, i, v, o) -> new IdPref<>(u, v)); }
@Override public Stream<IdPref<I>> getUserPreferences(U u) { return Stream.concat(d1.getUserPreferences(u), d2.getUserPreferences(u)); }
/** * Constructor with default converters between IdxPref and IdPref. * * @param recommenderData preference data to be transposed */ public TransposedPreferenceData(FastPreferenceData<U, I> recommenderData) { this(recommenderData, (u, p) -> new IdPref<>(u, p.v2), (uidx, p) -> new IdxPref(uidx, p.v2)); }
@Override public Stream<I> getAllItems() { return Stream.concat(d1.getAllItems(), d2.getAllItems()).distinct(); }
@Override public Stream<U> getAllUsers() { return Stream.concat(d1.getAllUsers(), d2.getAllUsers()).distinct(); }
@Override public boolean containsItem(I i) { return d1.containsItem(i) || d2.containsItem(i); }
@Override public boolean containsUser(U u) { return d1.containsUser(u) || d2.containsUser(u); }
@Override public Stream<IdPref<U>> getItemPreferences(I i) { return Stream.concat(d1.getItemPreferences(i), d2.getItemPreferences(i)); }
@Override public Stream<I> getItemsWithPreferences() { return Stream.concat(d1.getItemsWithPreferences(), d2.getItemsWithPreferences()).distinct(); } }
@Override public int numItems() { return (int) getAllItems().count(); }
@Override public int numUsersWithPreferences() { return (int) getUsersWithPreferences().count(); }
@Override public int numUsers() { return (int) getAllUsers().count(); }
/** * Constructors. * * @param caching are the user relevance models being cached? * @param testData test subset of preferences * @param threshold relevance threshold */ public NDCGRelevanceModel(boolean caching, PreferenceData<U, I> testData, double threshold) { super(caching, testData.getUsersWithPreferences()); this.testData = testData; this.threshold = threshold; }
/** * Constructor * * @param caching are the user relevance models being cached? * @param testData test subset of the preferences * @param threshold relevance threshold */ public BinaryRelevanceModel(boolean caching, PreferenceData<U, I> testData, double threshold) { super(caching, testData.getUsersWithPreferences()); this.testData = testData; this.threshold = threshold; }
/** * Constructor. * * @param caching are the user relevance models being cached? * @param testData test subset of preferences * @param threshold relevance threshold * @param background gain of unseen items in the test subset */ public BackgroundBinaryRelevanceModel(boolean caching, PreferenceData<U, I> testData, double threshold, double background) { super(caching, testData.getUsersWithPreferences()); this.testData = testData; this.threshold = threshold; this.background = background; }
@Override public Stream<U> getUsersWithPreferences() { return Stream.concat(d1.getUsersWithPreferences(), d2.getUsersWithPreferences()).distinct(); }