def test_bias_user_predict(): algo = Bias(items=False) algo.fit(simple_df) p = algo.predict_for_user(10, [1, 2, 3]) assert len(p) == 3 assert p.values == approx(algo.mean_ + 1.0) p = algo.predict_for_user(12, [1, 3]) assert len(p) == 2 assert p.values == approx(algo.mean_ - 0.5)
def test_bias_item_predict(): algo = Bias(users=False) algo.fit(simple_df) p = algo.predict_for_user(10, [1, 2, 3]) assert len(p) == 3 assert p.values == approx((algo.item_offsets_ + algo.mean_).values)
def test_bias_predict_unknown_user(): algo = Bias() algo.fit(simple_df) p = algo.predict_for_user(15, [1, 3]) assert len(p) == 2 assert p.values == approx((algo.item_offsets_.loc[[1, 3]] + algo.mean_).values)
def test_bias_global_predict(): algo = Bias(items=False, users=False) algo.fit(simple_df) p = algo.predict_for_user(10, [1, 2, 3]) assert len(p) == 3 assert (p == algo.mean_).all() assert p.values == approx(algo.mean_)
def test_bias_predict_unknown_item(): algo = Bias() algo.fit(simple_df) p = algo.predict_for_user(10, [1, 3, 4]) assert len(p) == 3 intended = algo.item_offsets_.loc[[1, 3]] + algo.mean_ + 0.25 assert p.loc[[1, 3]].values == approx(intended.values) assert p.loc[4] == approx(algo.mean_ + 0.25)
def test_bias_new_user_predict(): algo = Bias() algo.fit(simple_df) ratings = pd.DataFrame({'item': [1, 2, 3], 'rating': [1.5, 2.5, 3.5]}) ratings = ratings.set_index('item').rating p = algo.predict_for_user(None, [1, 3], ratings=ratings) offs = ratings - algo.mean_ - algo.item_offsets_ umean = offs.mean() _log.info('user mean is %f', umean) assert len(p) == 2 assert p.values == approx((algo.mean_ + algo.item_offsets_ + umean).loc[[1, 3]].values)
def test_bias_train_ml_ratings(): algo = Bias() ratings = ml_test.ratings algo.fit(ratings) assert algo.mean_ == approx(ratings.rating.mean()) imeans_data = ratings.groupby('item').rating.mean() imeans_algo = algo.item_offsets_ + algo.mean_ ares, data = imeans_algo.align(imeans_data) assert ares.values == approx(data.values) urates = ratings.set_index('user').loc[2].set_index('item').rating umean = (urates - imeans_data[urates.index]).mean() p = algo.predict_for_user(2, [10, 11, -1]) assert len(p) == 3 assert p.iloc[0] == approx(imeans_data.loc[10] + umean) assert p.iloc[1] == approx(imeans_data.loc[11] + umean) assert p.iloc[2] == approx(ratings.rating.mean() + umean)