@Before public void createRatingSource() { EntityFactory efac = new EntityFactory(); List<Rating> rs = new ArrayList<>(); rs.add(efac.rating(1, 5, 2)); rs.add(efac.rating(1, 7, 4)); rs.add(efac.rating(8, 4, 5)); rs.add(efac.rating(8, 5, 4)); source = new StaticDataSource(); source.addSource(rs); dao = source.get(); config = new LenskitConfiguration(); config.bind(ItemScorer.class).to(BiasItemScorer.class); }
/** * Create a new rating object. * * @param uid The user ID. * @param iid The item ID. * @param rating The rating value. Cannot be NaN. * @param ts The timestamp. * @return The new rating object. * @throws IllegalArgumentException if {@code rating} is NaN. * @deprecated Use {@link EntityFactory#rating(long, long, double, long)} */ @Deprecated public static Rating create(long uid, long iid, double rating, long ts) { return factory.rating(uid, iid, rating, ts); }
@Test public void testGetsOnlyRating() { EntityCollectionDAO dao = EntityCollectionDAO.create(factory.rating(42, 39, 2.5), factory.rating(42, 20, 3.5), factory.rating(17, 39, 1.5)); RatingVectorPDAO source = new StandardRatingVectorPDAO(dao); Long2DoubleMap vec = source.userRatingVector(42); assertThat(vec.entrySet(), hasSize(2)); assertThat(vec, hasEntry(39L, 2.5)); assertThat(vec, hasEntry(20L, 3.5)); } }
@Test public void testComputeGlobalMean() { EntityFactory efac = new EntityFactory(); EntityCollectionDAOBuilder daoBuilder = new EntityCollectionDAOBuilder(); daoBuilder.addEntities(efac.rating(100, 200, 3.0), efac.rating(101, 200, 4.0), efac.rating(101, 201, 2.5), efac.rating(102, 203, 4.5)); Provider<GlobalBiasModel> biasProvider = new GlobalAverageRatingBiasModelProvider(daoBuilder.build()); BiasModel model = biasProvider.get(); assertThat(model.getIntercept(), closeTo(3.5, 1.0e-1)); } }
@Test public void testAddEntities() { GenericEntityIndexBuilder bld = new GenericEntityIndexBuilder("user"); Entity r1 = factory.rating(10, 100, 3.5); Entity r2 = factory.rating(10, 50, 4.5); Entity r3 = factory.rating(15, 100, 2.5); bld.add(r1); bld.add(r3); bld.add(r2); EntityIndex index = bld.build(); assertThat(index, notNullValue()); assertThat(index.getEntities(10L), containsInAnyOrder(r1, r2)); assertThat(index.getEntities(11L), hasSize(0)); assertThat(index.getEntities(15L), contains(r3)); } }
@Before public void createNormalizer() { EntityFactory ef = new EntityFactory(); EntityCollectionDAOBuilder db = new EntityCollectionDAOBuilder(); /* Set up so that b=3.0, b(u=42) = 0.5, b(u=37) = -0.2, b(i=1) = 0.2, b(i=2) = -0.1 */ db.addEntities(ef.rating(42, 7, 3.0), ef.rating(42, 8, 4.0), ef.rating(37, 9, 3.0), ef.rating(37, 10, 2.6), ef.rating(99, 1, 3.2), ef.rating(99, 2, 2.9), ef.rating(99, 7, 2), ef.rating(99, 8, 3), ef.rating(99, 9, 3.4), ef.rating(99, 10, 3.0), ef.rating(99, 99, 2.9)); db.deriveEntities(CommonTypes.ITEM, CommonTypes.RATING, CommonAttributes.ITEM_ID); db.deriveEntities(CommonTypes.USER, CommonTypes.RATING, CommonAttributes.USER_ID); LenskitConfiguration config = new LenskitConfiguration(); config.bind(BaselineScorer.class, ItemScorer.class).to(UserMeanItemScorer.class); config.bind(UserMeanBaseline.class, ItemScorer.class).to(ItemMeanRatingItemScorer.class); config.bind(UserVectorNormalizer.class).to(BaselineSubtractingUserVectorNormalizer.class); config.addRoot(UserVectorNormalizer.class); recommender = LenskitRecommender.build(config, db.build()); normalizer = recommender.get(UserVectorNormalizer.class); }
@Test public void testAddEntities() { LongEntityIndexBuilder bld = new LongEntityIndexBuilder("user"); Entity r1 = factory.rating(10, 100, 3.5); Entity r2 = factory.rating(10, 50, 4.5); Entity r3 = factory.rating(15, 100, 2.5); bld.add(r1); bld.add(r3); bld.add(r2); EntityIndex index = bld.build(); assertThat(index, notNullValue()); assertThat(index.getEntities(10L), containsInAnyOrder(r1, r2)); assertThat(index.getEntities(11L), hasSize(0)); assertThat(index.getEntities(15L), contains(r3)); } }
@Test public void testGroupEntities() { EntityFactory efac = new EntityFactory(); Rating r1 = efac.rating(100, 200, 3.5); Rating r2 = efac.rating(100, 201, 4.0); Rating r3 = efac.rating(101, 200, 2.0); EntityCollection ec = EntityCollection.newBuilder(CommonTypes.RATING, AttributeSet.create(CommonAttributes.ENTITY_ID, CommonAttributes.USER_ID, CommonAttributes.ITEM_ID, CommonAttributes.RATING)) .add(r1) .add(r2) .add(r3) .addIndex(CommonAttributes.USER_ID) .build(); Map<Long,List<Entity>> groups = ec.grouped(CommonAttributes.USER_ID); assertThat(groups.keySet(), containsInAnyOrder(100L, 101L)); assertThat(groups, hasEntry(equalTo(101L), contains(r3))); assertThat(groups, hasEntry(equalTo(100L), containsInAnyOrder(r1, r2))); groups = ec.grouped(CommonAttributes.ITEM_ID); assertThat(groups.keySet(), containsInAnyOrder(200L, 201L)); assertThat(groups, hasEntry(equalTo(201L), contains(r2))); assertThat(groups, hasEntry(equalTo(200L), containsInAnyOrder(r1, r3))); }
@Test public void testNonLongValueEntity() { LongEntityIndexBuilder bld = new LongEntityIndexBuilder("user"); Entity rating = factory.rating(10, 100, 3.5); bld.add(rating); EntityIndex index = bld.build(); assertThat(index, notNullValue()); assertThat(index.getEntities("10"), hasSize(0)); }
@Test public void testComputeItemMeans() { EntityFactory efac = new EntityFactory(); EntityCollectionDAOBuilder daoBuilder = new EntityCollectionDAOBuilder(); daoBuilder.addEntities(efac.rating(100, 200, 3.0), efac.rating(101, 200, 4.0), efac.rating(101, 201, 2.5), efac.rating(102, 203, 4.5), efac.rating(103, 203, 3.5)); LenskitConfiguration config = new LenskitConfiguration(); config.addRoot(BiasModel.class); config.bind(BiasModel.class).toProvider(ItemAverageRatingBiasModelProvider.class); LenskitRecommender rec = LenskitRecommender.build(config, daoBuilder.build()); BiasModel model = rec.get(BiasModel.class); assertThat(model.getIntercept(), closeTo(3.5, 1.0e-3)); assertThat(model.getItemBias(200), closeTo(0.0, 1.0e-3)); assertThat(model.getItemBias(201), closeTo(-1.0, 1.0e-3)); assertThat(model.getItemBias(203), closeTo(0.5, 1.0e-3)); }
@Test public void testAddEntity() { LongEntityIndexBuilder bld = new LongEntityIndexBuilder("user"); Entity rating = factory.rating(10, 100, 3.5); bld.add(rating); EntityIndex index = bld.build(); assertThat(index, notNullValue()); assertThat(index.getEntities(10L), contains(rating)); assertThat(index.getEntities(11L), hasSize(0)); }
@Test public void testComputeUserMeans() { EntityFactory efac = new EntityFactory(); EntityCollectionDAOBuilder daoBuilder = new EntityCollectionDAOBuilder(); daoBuilder.addEntities(efac.rating(100, 200, 3.0), efac.rating(101, 200, 4.0), efac.rating(102, 201, 2.5), efac.rating(102, 203, 4.5), efac.rating(101, 203, 3.5)); LenskitConfiguration config = new LenskitConfiguration(); config.addRoot(BiasModel.class); config.bind(BiasModel.class).toProvider(UserAverageRatingBiasModelProvider.class); LenskitRecommender rec = LenskitRecommender.build(config, daoBuilder.build()); BiasModel model = rec.get(BiasModel.class); assertThat(model.getIntercept(), closeTo(3.5, 1.0e-3)); assertThat(model.getUserBias(100), closeTo(-0.5, 1.0e-3)); assertThat(model.getUserBias(101), closeTo(0.25, 1.0e-3)); assertThat(model.getUserBias(102), closeTo(0.0, 1.0e-3)); }
@Test public void testAddEntity() { GenericEntityIndexBuilder bld = new GenericEntityIndexBuilder("user"); Entity rating = factory.rating(10, 100, 3.5); bld.add(rating); EntityIndex index = bld.build(); assertThat(index, notNullValue()); assertThat(index.getEntities(10L), hasSize(1)); assertThat(index.getEntities(10L), contains(rating)); assertThat(index.getEntities(11L), hasSize(0)); }
@Test public void testComputeMeans() { EntityFactory efac = new EntityFactory(); EntityCollectionDAOBuilder daoBuilder = new EntityCollectionDAOBuilder(); daoBuilder.addEntities(efac.rating(100, 200, 3.0), efac.rating(101, 200, 4.0), efac.rating(102, 201, 2.5), efac.rating(102, 203, 4.5), efac.rating(101, 203, 3.5)); LenskitConfiguration config = new LenskitConfiguration(); config.addRoot(BiasModel.class); config.bind(BiasModel.class).to(UserBiasModel.class); LenskitRecommender rec = LenskitRecommender.build(config, daoBuilder.build()); BiasModel model = rec.get(BiasModel.class); assertThat(model.getIntercept(), closeTo(3.5, 1.0e-3)); assertThat(model.getUserBias(100), closeTo(-0.5, 1.0e-3)); assertThat(model.getUserBias(101), closeTo(0.25, 1.0e-3)); assertThat(model.getUserBias(102), closeTo(0.0, 1.0e-3)); } }
@Test public void testGetRating() { EntityCollectionDAO dao = EntityCollectionDAO.create(factory.rating(42, 39, 2.5)); RatingVectorPDAO source = new StandardRatingVectorPDAO(dao); assertThat(source.userRatingVector(42), hasEntry(39L, 2.5)); }
@Test public void testComputeMeans() { EntityFactory efac = new EntityFactory(); EntityCollectionDAOBuilder daoBuilder = new EntityCollectionDAOBuilder(); daoBuilder.addEntities(efac.rating(100, 200, 3.0), efac.rating(101, 200, 4.0), efac.rating(101, 201, 2.5), efac.rating(102, 203, 4.5), efac.rating(103, 203, 3.5)); LenskitConfiguration config = new LenskitConfiguration(); config.addRoot(BiasModel.class); config.bind(BiasModel.class).toProvider(ItemAverageRatingBiasModelProvider.class); LenskitRecommender rec = LenskitRecommender.build(config, daoBuilder.build()); BiasModel model = rec.get(BiasModel.class); assertThat(model.getIntercept(), closeTo(3.5, 1.0e-3)); assertThat(model.getItemBias(200), closeTo(0.0, 1.0e-3)); assertThat(model.getItemBias(201), closeTo(-1.0, 1.0e-3)); assertThat(model.getItemBias(203), closeTo(0.5, 1.0e-3)); } }
{1, 2, 2, 5, 3}, {0, 0, 0, 6, 0}}; EntityFactory ef = new EntityFactory(); data = new Long2ObjectOpenHashMap<>(); for (int user = 1; user <= ratings.length; user++) { for (int item = 1; item <= userRatings.length; item++) { double rating = userRatings[item-1]; rs.add(ef.rating(user, item, rating)); Long2DoubleMap itemRatings = data.get(item); if (itemRatings == null) itemRatings = new Long2DoubleOpenHashMap();
/** * Create a new rating object. * * @param uid The user ID. * @param iid The item ID. * @param rating The rating value. Cannot be NaN. * @param ts The timestamp. * @return The new rating object. * @throws IllegalArgumentException if {@code rating} is NaN. * @deprecated Use {@link EntityFactory#rating(long, long, double, long)} */ @Deprecated public static Rating create(long uid, long iid, double rating, long ts) { return factory.rating(uid, iid, rating, ts); }
@Before public void setUp() throws Exception { List<Rating> rs = new ArrayList<>(); double[][] ratings = { {0, 12, 13, 14, 15}, {21, 22, 23, 24, 25}, {31, 32, 33, 34, 35}, {41, 42, 43, 44, 45}, {51, 52, 53, 54, 55}, {61, 62, 63, 64, 65}}; EntityFactory ef = new EntityFactory(); data = new Long2ObjectOpenHashMap<>(); for (int user = 1; user <= ratings.length; user++) { double[] userRatings = ratings[user-1]; for (int item = 1; item <= userRatings.length; item++) { double rating = userRatings[item-1]; rs.add(ef.rating(user, item, rating)); Long2DoubleMap itemRatings = data.get(item); if (itemRatings == null) itemRatings = new Long2DoubleOpenHashMap(); itemRatings.put(user, rating); data.put(item, itemRatings); } } StaticDataSource source = StaticDataSource.fromList(rs); DataAccessObject dao = source.get(); snapshot = new PackedRatingMatrixProvider(new StandardRatingVectorPDAO(dao), new Random()).get(); }