-o output destination directory [default: output] -n N number of recommendations for a unique user [default: 100] -m MODULE import algorithms from MODULE [default: lkdemo.algorithms] ALGO name of algorithm to load """ from docopt import docopt from pathlib import Path from lenskit.algorithms import Recommender, Predictor from lenskit import batch, util from lkdemo import log import importlib import pandas as pd _log = log.script(__file__) args = docopt(__doc__) mod_name = args.get('-m') input = args.get('--splits') output = args.get('-o') n_recs = int(args.get('-n')) model = args.get('ALGO') _log.info(f'importing from module {mod_name}') algorithms = importlib.import_module(mod_name) algo = getattr(algorithms, model) path = Path(input)
path.name) train = datasets.ds_diff(ds_def.ratings, test) train.reset_index(drop=True, inplace=True) else: _log.error('could not find training data for %s', file.name) continue _log.info('[%s] Fitting the model', timer) # We train isolated to manage resource use model = batch.train_isolated(algo, train) try: _log.info('[%s] generating recommendations for unique users', timer) users = test.user.unique() recs = batch.recommend(model, users, n_recs) _log.info('[%s] writing recommendations to %s', timer, dest) recs.to_csv(dest / f'recs-{suffix}', index=False) if isinstance(algo, Predictor) and not args['--no-predict']: _log.info('[%s] generating predictions for user-item', timer) preds = batch.predict(model, test) preds.to_csv(dest / f'pred-{suffix}', index=False) finally: model.close() if __name__ == '__main__': args = docopt(__doc__) _log = log.script(__file__, log_file=args['--log-file']) main(args)