def main(): import argparse import os import pickle import sys key_names = KEYS.keys() # set up arguments parser = argparse.ArgumentParser() parser.add_argument('--latent-d', '-D', type=int, default=5) parser.add_argument('--steps', '-s', type=int, default=None) parser.add_argument('--discrete', action='store_true', default=None) parser.add_argument('--no-discrete', action='store_false', dest='discrete') parser.add_argument('--subtract-mean', action='store_true', default=True) parser.add_argument('--no-subtract-mean', action='store_false', dest='subtract_mean') parser.add_argument('--fit', default='batch') parser.add_argument('--lookahead-fit', default='batch') parser.add_argument('--samps', '-S', type=int, default=128) parser.add_argument('--lookahead-samps', type=int, default=128) parser.add_argument('--threaded', action='store_true', default=True) parser.add_argument('--unthreaded', action='store_false', dest='threaded') parser.add_argument('--procs', '-P', type=int, default=None) parser.add_argument('--test-set', default='all') parser.add_argument('--load-data', required='True', metavar='FILE') parser.add_argument('--save-results', nargs='?', default=True, const=True, metavar='FILE') parser.add_argument('--no-save-results', action='store_false', dest='save_results') parser.add_argument( '--note', action='append', help="Doesn't do anything, just there to save any notes you'd like " "in the results file.") parser.add_argument('keys', nargs='*', help="Choices: {}.".format(', '.join( sorted(key_names)))) args = parser.parse_args() # check that args.keys are valid for k in args.keys: if k not in key_names: sys.stderr.write("Invalid key name %s; options are %s.\n" % (k, ', '.join(sorted(key_names)))) sys.exit(1) if not args.keys: args.keys = sorted(key_names) # make directories to save results if necessary if args.save_results is True: args.save_results = 'results.pkl' elif args.save_results: dirname = os.path.dirname(args.save_results) if dirname and not os.path.exists(dirname): os.makedirs(dirname) # load data with open(args.load_data, 'rb') as f: data = np.load(f) if isinstance(data, np.ndarray): data = {'_real': data} real = data['_real'] ratings = data['_ratings'] rating_vals = data['_rating_vals'] if '_rating_vals' in data else None if args.discrete is None: args.discrete = rating_vals is not None # do the comparison try: results = compare_active(key_names=args.keys, latent_d=args.latent_d, real=real, ratings=ratings, rating_vals=rating_vals, test_set=args.test_set, num_steps=args.steps, discrete=args.discrete, subtract_mean=args.subtract_mean, fit_type=parse_fit_type(args.fit), lookahead_fit=args.lookahead_fit, num_samps=args.samps, lookahead_samps=args.lookahead_samps, procs=args.procs, threaded=args.threaded) except Exception: import traceback print() traceback.print_exc() import pdb print() pdb.post_mortem() sys.exit(1) # save the results file if args.save_results: print("\nsaving results in '{}'".format(args.save_results)) results['_args'] = args with open(args.save_results, 'wb') as f: pickle.dump(results, f)
def main(): import argparse import os import pickle import sys key_names = set(KEY_FUNCS.keys()) types = {'float', 'int', 'int-bounds', 'binary'} parser = argparse.ArgumentParser() model = parser.add_argument_group("Model Options") model.add_argument('--latent-d', '-D', type=int, default=5) model.add_argument('--discrete-integration', nargs='?', const=True, default=False) model.add_argument('--continuous-integration', action='store_false', dest='discrete_integration') add_bool_opt(model, 'fit-sigmas', default=False) add_bool_opt(model, 'refit-lookahead', default=False) model.add_argument('--fit', default='batch') model.add_argument('--sig-u-mean', type=float, default=0) model.add_argument('--sig-u-var', type=float, default=-1) model.add_argument('--sig-v-mean', type=float, default=0) model.add_argument('--sig-v-var', type=float, default=-1) model.add_argument('keys', nargs='*', help="Choices: {}.".format(', '.join( sorted(key_names)))) problem_def = parser.add_argument_group("Problem Definiton") problem_def.add_argument('--load-data', default=None, metavar='FILE') add_bool_opt(problem_def, 'load-model', default=False) problem_def.add_argument('--gen-rank', '-R', type=int, default=5) problem_def.add_argument( '--type', default='float', help="An integer (meaning values are from 0 to that integer) or " "one of {}".format(', '.join(sorted(types)))) problem_def.add_argument('--u-mean', type=float, default=0) problem_def.add_argument('--u-std', type=float, default=2) problem_def.add_argument('--v-mean', type=float, default=0) problem_def.add_argument('--v-std', type=float, default=2) problem_def.add_argument('--noise', '-n', type=float, default=.25) problem_def.add_argument('--num-users', '-N', type=int, default=10) problem_def.add_argument('--num-items', '-M', type=int, default=10) problem_def.add_argument('--mask', '-m', default=0) running = parser.add_argument_group("Running") running.add_argument('--processes', '-P', type=int, default=None) add_bool_opt(running, 'threading', True) running.add_argument('--steps', '-s', type=int, default=None) results = parser.add_argument_group("Results") results.add_argument('--save-results', nargs='?', default=None, const=True, metavar='FILE') results.add_argument('--no-save-results', action='store_false', dest='save_results') results.add_argument( '--note', action='append', help="Doesn't do anything, just there to save any notes you'd like " "in the results file.") args = parser.parse_args() # is args.mask supposed to be a float? try: args.mask = float(args.mask) except ValueError: pass # check args.type try: args.type = int(args.type) except ValueError: if args.type not in types: raise ValueError("--type must be integer or one of {}".format( ', '.join(sorted(types)))) # check that args.keys are valid for k in args.keys: if k not in key_names: sys.stderr.write("Invalid key name %s; options are %s.\n" % (k, ', '.join(sorted(key_names)))) sys.exit(1) if not args.keys: args.keys = sorted(key_names) # make directories to save results if necessary if args.save_results is True: args.save_results = 'results.pkl' elif args.save_results: dirname = os.path.dirname(args.save_results) if dirname and not os.path.exists(dirname): os.makedirs(dirname) # load previous data, if we're doing that real_ratings_vals = None apmf = None knowable = None if args.load_data: with open(args.load_data, 'rb') as f: data = np.load(f) if isinstance(data, np.ndarray): data = {'_real': data} real = data['_real'] real_ratings_vals = ( real, data['_ratings'] if '_ratings' in data else get_ratings( real, args.mask), data['_rating_vals'] if '_rating_vals' in data else None, ) if args.load_model: apmf = data['_initial_apmf'] knowable = np.isfinite(real) knowable[real == 0] = 0 knowable = zip(*knowable.nonzero()) # get results try: results = compare(args.keys, num_users=args.num_users, num_items=args.num_items, real_ratings_vals=real_ratings_vals, apmf=apmf, u_mean=args.u_mean, u_std=args.u_std, v_mean=args.v_mean, v_std=args.v_std, noise=args.noise, mask_type=args.mask, rank=args.gen_rank, latent_d=args.latent_d, discrete_exp=args.discrete_integration, refit_lookahead=args.refit_lookahead, fit_sigmas=args.fit_sigmas, sig_u_mean=args.sig_u_mean, sig_u_var=args.sig_u_var, sig_v_mean=args.sig_v_mean, sig_v_var=args.sig_v_var, data_type=args.type, steps=args.steps, fit_type=parse_fit_type(args.fit), processes=args.processes, do_threading=args.threading) except Exception: import traceback print() traceback.print_exc() import pdb print() pdb.post_mortem() sys.exit(1) # save the results file if args.save_results: print("saving results in '{}'".format(args.save_results)) results['_args'] = args with open(args.save_results, 'wb') as f: pickle.dump(results, f)
def main(): import argparse import os import pickle import sys key_names = KEYS.keys() # set up arguments parser = argparse.ArgumentParser() parser.add_argument('--latent-d', '-D', type=int, default=5) parser.add_argument('--steps', '-s', type=int, default=None) parser.add_argument('--discrete', action='store_true', default=None) parser.add_argument('--no-discrete', action='store_false', dest='discrete') parser.add_argument('--subtract-mean', action='store_true', default=True) parser.add_argument('--no-subtract-mean', action='store_false', dest='subtract_mean') parser.add_argument('--fit', default='batch') parser.add_argument('--lookahead-fit', default='batch') parser.add_argument('--samps', '-S', type=int, default=128) parser.add_argument('--lookahead-samps', type=int, default=128) parser.add_argument('--threaded', action='store_true', default=True) parser.add_argument('--unthreaded', action='store_false', dest='threaded') parser.add_argument('--procs', '-P', type=int, default=None) parser.add_argument('--test-set', default='all') parser.add_argument('--load-data', required='True', metavar='FILE') parser.add_argument('--save-results', nargs='?', default=True, const=True, metavar='FILE') parser.add_argument('--no-save-results', action='store_false', dest='save_results') parser.add_argument('--note', action='append', help="Doesn't do anything, just there to save any notes you'd like " "in the results file.") parser.add_argument('keys', nargs='*', help="Choices: {}.".format(', '.join(sorted(key_names)))) args = parser.parse_args() # check that args.keys are valid for k in args.keys: if k not in key_names: sys.stderr.write("Invalid key name %s; options are %s.\n" % ( k, ', '.join(sorted(key_names)))) sys.exit(1) if not args.keys: args.keys = sorted(key_names) # make directories to save results if necessary if args.save_results is True: args.save_results = 'results.pkl' elif args.save_results: dirname = os.path.dirname(args.save_results) if dirname and not os.path.exists(dirname): os.makedirs(dirname) # load data with open(args.load_data, 'rb') as f: data = np.load(f) if isinstance(data, np.ndarray): data = { '_real': data } real = data['_real'] ratings = data['_ratings'] rating_vals = data['_rating_vals'] if '_rating_vals' in data else None if args.discrete is None: args.discrete = rating_vals is not None # do the comparison try: results = compare_active( key_names=args.keys, latent_d=args.latent_d, real=real, ratings=ratings, rating_vals=rating_vals, test_set=args.test_set, num_steps=args.steps, discrete=args.discrete, subtract_mean=args.subtract_mean, fit_type=parse_fit_type(args.fit), lookahead_fit=args.lookahead_fit, num_samps=args.samps, lookahead_samps=args.lookahead_samps, procs=args.procs, threaded=args.threaded) except Exception: import traceback print() traceback.print_exc() import pdb print() pdb.post_mortem() sys.exit(1) # save the results file if args.save_results: print("\nsaving results in '{}'".format(args.save_results)) results['_args'] = args with open(args.save_results, 'wb') as f: pickle.dump(results, f)
def main(): import argparse import os import pickle import sys key_names = set(KEY_FUNCS.keys()) types = {'float', 'int', 'int-bounds', 'binary'} parser = argparse.ArgumentParser() parser.add_argument('--load-data', default=None, metavar='FILE') model = parser.add_argument_group("Model Options") model.add_argument('--latent-d', '-D', type=int, default=5) model.add_argument('--discrete-integration', nargs='?', const=True, default=False) model.add_argument('--continuous-integration', action='store_false', dest='discrete_integration') add_bool_opt(model, 'fit-sigmas', default=False) add_bool_opt(model, 'refit-lookahead', default=False) model.add_argument('--fit', default='batch') model.add_argument('--sig-u-mean', type=float, default=0) model.add_argument('--sig-u-var', type=float, default=-1) model.add_argument('--sig-v-mean', type=float, default=0) model.add_argument('--sig-v-var', type=float, default=-1) model.add_argument('keys', nargs='*', help="Choices: {}.".format(', '.join( sorted(key_names)))) running = parser.add_argument_group("Running") running.add_argument('--processes', '-P', type=int, default=None) add_bool_opt(running, 'threading', True) running.add_argument('--steps', '-s', type=int, default=None) results = parser.add_argument_group("Results") results.add_argument('--save-results', default=True, metavar='FILE') results.add_argument('--no-save-results', action='store_false', dest='save_results') results.add_argument( '--note', action='append', help="Doesn't do anything, just there to save any notes you'd like " "in the results file.") args = parser.parse_args() # check that args.keys are valid for k in args.keys: if k not in key_names: sys.stderr.write("Invalid key name %s; options are %s.\n" % (k, ', '.join(sorted(key_names)))) sys.exit(1) if not args.keys: args.keys = sorted(key_names) # make directories to save results if necessary if args.save_results is True: args.save_results = 'results.pkl' elif args.save_results: dirname = os.path.dirname(args.save_results) if dirname and not os.path.exists(dirname): os.makedirs(dirname) # load previous data with open(args.load_data, 'rb') as f: data = np.load(f) if isinstance(data, np.ndarray): data = {'_real': data} real = data['_real'] ratings = data['_ratings'] rating_vals = data['_rating_vals'] if '_rating_vals' in data else None test_on = data['_test_on'] if '_test_on' in data else None is_new_item = data['_is_new_item'] if '_is_new_item' in data else None # XXX handle is_new_item knowable = np.isfinite(real) knowable[real == 0] = False if test_on is not None: print("using test set from file") knowable[test_on] = False knowable = zip(*knowable.nonzero()) # get results try: results = compare(args.keys, real=real, ratings=ratings, rating_vals=rating_vals, knowable=knowable, test_on=test_on, latent_d=args.latent_d, discrete_exp=args.discrete_integration, refit_lookahead=args.refit_lookahead, fit_sigmas=args.fit_sigmas, sig_u_mean=args.sig_u_mean, sig_u_var=args.sig_u_var, sig_v_mean=args.sig_v_mean, sig_v_var=args.sig_v_var, steps=args.steps, fit_type=parse_fit_type(args.fit), processes=args.processes, do_threading=args.threading) except Exception: import traceback print() traceback.print_exc() import pdb print() pdb.post_mortem() sys.exit(1) # save the results file if args.save_results: print("saving results in '{}'".format(args.save_results)) results['_args'] = args with open(args.save_results, 'wb') as f: pickle.dump(results, f)
def main(): import argparse import os import pickle import sys key_names = set(KEY_FUNCS.keys()) types = {'float', 'int', 'int-bounds', 'binary'} parser = argparse.ArgumentParser() model = parser.add_argument_group("Model Options") model.add_argument('--latent-d', '-D', type=int, default=5) model.add_argument('--discrete-integration', nargs='?', const=True, default=False) model.add_argument('--continuous-integration', action='store_false', dest='discrete_integration') add_bool_opt(model, 'fit-sigmas', default=False) add_bool_opt(model, 'refit-lookahead', default=False) model.add_argument('--fit', default='batch') model.add_argument('--sig-u-mean', type=float, default=0) model.add_argument('--sig-u-var', type=float, default=-1) model.add_argument('--sig-v-mean', type=float, default=0) model.add_argument('--sig-v-var', type=float, default=-1) model.add_argument('keys', nargs='*', help="Choices: {}.".format(', '.join(sorted(key_names)))) problem_def = parser.add_argument_group("Problem Definiton") problem_def.add_argument('--load-data', default=None, metavar='FILE') add_bool_opt(problem_def, 'load-model', default=False) problem_def.add_argument('--gen-rank', '-R', type=int, default=5) problem_def.add_argument('--type', default='float', help="An integer (meaning values are from 0 to that integer) or " "one of {}".format(', '.join(sorted(types)))) problem_def.add_argument('--u-mean', type=float, default=0) problem_def.add_argument('--u-std', type=float, default=2) problem_def.add_argument('--v-mean', type=float, default=0) problem_def.add_argument('--v-std', type=float, default=2) problem_def.add_argument('--noise', '-n', type=float, default=.25) problem_def.add_argument('--num-users', '-N', type=int, default=10) problem_def.add_argument('--num-items', '-M', type=int, default=10) problem_def.add_argument('--mask', '-m', default=0) running = parser.add_argument_group("Running") running.add_argument('--processes', '-P', type=int, default=None) add_bool_opt(running, 'threading', True) running.add_argument('--steps', '-s', type=int, default=None) results = parser.add_argument_group("Results") results.add_argument('--save-results', nargs='?', default=None, const=True, metavar='FILE') results.add_argument('--no-save-results', action='store_false', dest='save_results') results.add_argument('--note', action='append', help="Doesn't do anything, just there to save any notes you'd like " "in the results file.") args = parser.parse_args() # is args.mask supposed to be a float? try: args.mask = float(args.mask) except ValueError: pass # check args.type try: args.type = int(args.type) except ValueError: if args.type not in types: raise ValueError("--type must be integer or one of {}".format( ', '.join(sorted(types)))) # check that args.keys are valid for k in args.keys: if k not in key_names: sys.stderr.write("Invalid key name %s; options are %s.\n" % ( k, ', '.join(sorted(key_names)))) sys.exit(1) if not args.keys: args.keys = sorted(key_names) # make directories to save results if necessary if args.save_results is True: args.save_results = 'results.pkl' elif args.save_results: dirname = os.path.dirname(args.save_results) if dirname and not os.path.exists(dirname): os.makedirs(dirname) # load previous data, if we're doing that real_ratings_vals = None apmf = None knowable = None if args.load_data: with open(args.load_data, 'rb') as f: data = np.load(f) if isinstance(data, np.ndarray): data = {'_real': data} real = data['_real'] real_ratings_vals = ( real, data['_ratings'] if '_ratings' in data else get_ratings(real, args.mask), data['_rating_vals'] if '_rating_vals' in data else None, ) if args.load_model: apmf = data['_initial_apmf'] knowable = np.isfinite(real) knowable[real == 0] = 0 knowable = zip(*knowable.nonzero()) # get results try: results = compare(args.keys, num_users=args.num_users, num_items=args.num_items, real_ratings_vals=real_ratings_vals, apmf=apmf, u_mean=args.u_mean, u_std=args.u_std, v_mean=args.v_mean, v_std=args.v_std, noise=args.noise, mask_type=args.mask, rank=args.gen_rank, latent_d=args.latent_d, discrete_exp=args.discrete_integration, refit_lookahead=args.refit_lookahead, fit_sigmas=args.fit_sigmas, sig_u_mean=args.sig_u_mean, sig_u_var=args.sig_u_var, sig_v_mean=args.sig_v_mean, sig_v_var=args.sig_v_var, data_type=args.type, steps=args.steps, fit_type=parse_fit_type(args.fit), processes=args.processes, do_threading=args.threading) except Exception: import traceback print() traceback.print_exc() import pdb print() pdb.post_mortem() sys.exit(1) # save the results file if args.save_results: print("saving results in '{}'".format(args.save_results)) results['_args'] = args with open(args.save_results, 'wb') as f: pickle.dump(results, f)