def test_store_als(store_cls): algo = BiasedMF(10) algo.fit(lktu.ml_test.ratings) with store_cls() as store: k = store.put_model(algo) client = store.client() a2 = client.get_model(k) assert a2 is not algo assert a2.item_features_ is not algo.item_features_ assert np.all(a2.item_features_ == algo.item_features_) assert a2.user_features_ is not algo.user_features_ assert np.all(a2.user_features_ == algo.user_features_) del a2
def test_store_als(): algo = BiasedMF(10) algo.fit(lktu.ml_test.ratings) shared = lks.persist(algo) k2 = pickle.loads(pickle.dumps(shared)) try: a2 = k2.get() assert a2 is not algo assert a2.item_features_ is not algo.item_features_ assert np.all(a2.item_features_ == algo.item_features_) assert a2.user_features_ is not algo.user_features_ assert np.all(a2.user_features_ == algo.user_features_) del a2 k2.close() del k2 finally: shared.close()
def test_als_isolate(ml20m, rng): users = rng.choice(ml20m['user'].unique(), 5000, replace=False) algo = BiasedMF(20, iterations=10) algo = Recommender.adapt(algo) _log.info('training %s', algo) ares = batch.train_isolated(algo, ml20m) try: _log.info('recommending with %s', algo) recs = batch.recommend(ares, users, 10) assert recs['user'].nunique() == 5000 _log.info('predicting with %s', algo) pairs = ml20m.sample(1000) preds = batch.predict(ares, pairs) assert len(preds) == len(pairs) finally: ares.close()
def instantiate(opts, implicit): feats, ureg, ireg, damp = opts return GenderCalibratedRecommender( BiasedMF(feats, reg=(ureg, ireg), damping=damp), getBookGender(), 0.5)
""" Code for a gender balanced explicit ALS algorithm. """ from skopt.space import Integer, Real from lenskit.algorithms.als import BiasedMF from bookgender.rerank.GenderCalibratedRecommender import GenderCalibratedRecommender from bookgender.rerank.fastForceGenderBalanceRecommender import FastForceGenderBalanceRecommender from bookgender.rerank.rerankUtil import getBookGender from bookgender.rerank.slowForceGenderBalanceRecommender import SlowForceGenderBalanceRecommender from bookgender.rerank.slowForceGenderTargetRecommender import SlowForceGenderTargetRecommender dimensions = [Integer(5, 300), Real(1.0e-6, 5), Real(1.0e-6, 5), Real(0, 25)] def instantiate(opts, implicit): feats, ureg, ireg, damp = opts return GenderCalibratedRecommender( BiasedMF(feats, reg=(ureg, ireg), damping=damp), getBookGender(), 0.5) #return SlowForceGenderTargetRecommender(BiasedMF(feats, reg=(ureg, ireg), damping=damp), getBookGender()) update = None sweep_points = [BiasedMF(nf) for nf in range(25, 250, 25)] sweep_attrs = ['features']
import pickle from lenskit.algorithms.als import BiasedMF from lenskit.batch import predict from lenskit.metrics.predict import rmse test_bool = True train = pd.read_pickle("../data/ml-1m-split/train.pkl") val = pd.read_pickle("../data/ml-1m-split/val.pkl") test = pd.read_pickle("../data/ml-1m-split/test.pkl") num_factors = 30 num_iters = 100 model = BiasedMF(num_factors, iterations=num_iters) print("Fitting model...") model.fit(train) print("Making validation predictions...") val_preds = predict(model, val) val_result = rmse(val_preds["prediction"], val_preds["rating"]) if test_bool: print("Making test predictions...") test_preds = predict(model, test) test_result = rmse(test_preds["prediction"], test_preds["rating"]) else: test_result = 0 print("============= RESULTS =============\nFactors: {}\nIterations: {}\nValidation RMSE: {}\nTest RMSE: {}" \ .format(num_factors, num_iters, val_result, test_result))
def default(implicit): return BiasedMF(50)
def instantiate(opts, implicit): feats, ureg, ireg, damp = opts return BiasedMF(feats, reg=(ureg, ireg), damping=damp)