def runTest(self): base_dir = os.path.dirname(os.path.realpath(__file__)) with open( os.path.join(os.path.dirname(base_dir), 'config/recommender.json')) as data_file: json_config = json.load(data_file) rec_system = RecommenderSystem() self.assertEqual(rec_system.hyperparameters, json_config['recommender']['hyperparameters']) self.assertEqual(rec_system.config.config_dict, json_config['recommender']) n_factors = self.n_factors rec_system.initializer.config['n_factors'] = n_factors rec_system.content_based.n_factors = n_factors rec_system.content_based.hyperparameters['n_factors'] = n_factors rec_system.collaborative_filtering.n_factors = n_factors rec_system.collaborative_filtering.hyperparameters[ 'n_factors'] = n_factors self.assertTrue(isinstance(rec_system.evaluator, Evaluator)) self.assertTrue(isinstance(rec_system.content_based, ContentBased)) self.assertTrue( isinstance(rec_system.collaborative_filtering, CollaborativeFiltering)) self.assertTrue( isinstance(rec_system.content_based, AbstractRecommender)) if rec_system.config.config_dict['recommender'] == 'userbased': self.assertTrue( isinstance(rec_system.recommender, CollaborativeFiltering)) if rec_system.config.config_dict['recommender'] == 'itembased': self.assertTrue(isinstance(rec_system.recommender, ContentBased)) self.assertEqual(rec_system.content_based.n_items, self.documents) self.assertEqual(rec_system.content_based.n_factors, n_factors) rec_system.train()
def run_experiment(self): """ Runs experiment """ all_results = [[ 'n_factors', '_lambda', 'desc', 'rmse', 'train_recall', 'test_recall', 'recall_at_200', 'ratio', 'mrr @ 5', 'ndcg @ 5', 'mrr @ 10', 'ndcg @ 10' ]] runs = RunsLoader() for run_idx, config_dict in enumerate( runs.get_runnable_recommenders()): if run_idx: print( "\n___________________________________________________________________________________________" ) this_config = config_dict.copy() recommender = RecommenderSystem( abstracts_preprocessor=self.abstracts_preprocessor, ratings=self.ratings, config=this_config, verbose=self.verbose, load_matrices=self.load_matrices, dump_matrices=self.dump, train_more=self.train_more, random_seed=self.random_seed) print( "Run #%d %s: " % ((run_idx + 1), recommender.config.get_description()), recommender.content_based, recommender.collaborative_filtering, ", with: ", recommender.config.config_dict) results = recommender.train() report_str = 'Summary: Test sum {:.2f}, Train sum {:.2f}, Final error {:.5f}, train recall {:.5f}, '\ 'test recall {:.5f}, recall@200 {:.5f}, '\ 'ratio {:.5f}, mrr@5 {:.5f}, '\ 'ndcg@5 {:.5f}, mrr@10 {:.5f}, ndcg@10 {:.5f}' print(report_str.format(*results)) current_result = [ recommender.hyperparameters['n_factors'], recommender.hyperparameters['_lambda'], recommender.config.get_description() ] current_result.extend(results) all_results.append(current_result) GridSearch(recommender, {}, self.verbose, report_name='experiment_results').dump_csv(all_results)
def run_recommender(self): """ Runs recommender """ recommender = RecommenderSystem( abstracts_preprocessor=self.abstracts_preprocessor, ratings=self.ratings, verbose=self.verbose, load_matrices=self.load_matrices, dump_matrices=self.dump, train_more=self.train_more, random_seed=self.random_seed) results = recommender.train() report_str = 'Summary: Test sum {:.2f}, Train sum {:.2f}, Final error {:.5f}, train recall {:.5f}, '\ 'test recall {:.5f}, recall@200 {:.5f}, '\ 'ratio {:.5f}, mrr@5 {:.5f}, '\ 'ndcg@5 {:.5f}, mrr@10 {:.5f}, ndcg@10 {:.5f}' print(report_str.format(*results)) recommender.dump_recommendations(200)
def run_recommender(self): recommender = RecommenderSystem( abstracts_preprocessor=self.abstracts_preprocessor, ratings=self.ratings, verbose=self.verbose, load_matrices=self.load_matrices, dump_matrices=self.dump, train_more=self.train_more) recommender.train() recommender.get_evaluation_report()
def run_grid_search(self): """ Runs grid search """ hyperparameters = { '_lambda': [0.01], 'n_factors': [50, 100, 150, 200, 250, 300] } recommender = RecommenderSystem( abstracts_preprocessor=self.abstracts_preprocessor, ratings=self.ratings, verbose=self.verbose, load_matrices=self.load_matrices, dump_matrices=self.dump, train_more=self.train_more, random_seed=self.random_seed) GS = GridSearch(recommender, hyperparameters, self.verbose) best_params, all_results = GS.train()
def run_experiment_with_gridsearch(self): """ Runs experiment after running grid search. """ print("Getting Userbased hyperparameters") userbased_configs = { '_lambda': [0.01], 'n_factors': [50, 100, 150, 200, 250, 300] } self.config.set_recommender_type('userbased') self.config.set_iterations(5) self.config.set_folds_num(1) recommender = RecommenderSystem( abstracts_preprocessor=self.abstracts_preprocessor, ratings=self.ratings, config=self.config.get_all_config(), verbose=self.verbose, load_matrices=self.load_matrices, dump_matrices=False, train_more=self.train_more, random_seed=self.random_seed) userbased_hyperparameters, userbased_gridsearch_results =\ GridSearch(recommender, userbased_configs, self.verbose, report_name='grid_search_userbased').train() print("Userbased hyperparameters:", userbased_hyperparameters) print("Getting Itembased hyperparameters") itembased_configs = { '_lambda': [0.01], 'n_factors': [50, 100, 150, 200, 250, 300] } self.config.set_recommender_type('itembased') recommender = RecommenderSystem( abstracts_preprocessor=self.abstracts_preprocessor, ratings=self.ratings, config=self.config.get_all_config(), verbose=self.verbose, load_matrices=self.load_matrices, dump_matrices=False, train_more=self.train_more, random_seed=self.random_seed) itembased_hyperparameters, itembased_gridsearch_results =\ GridSearch(recommender, itembased_configs, self.verbose, report_name='grid_search_itembased').train() print("Itembased hyperparameters:", itembased_hyperparameters) for _ in range(5): print('.') print('Grid search done...') print('') print("Userbased hyperparameters:", userbased_hyperparameters) print("Itembased hyperparameters:", itembased_hyperparameters) all_results = [[ 'n_factors', '_lambda', 'desc', 'rmse', 'train_recall', 'test_recall', 'recall_at_200', 'ratio', 'mrr @ 5', 'ndcg @ 5', 'mrr @ 10', 'ndcg @ 10' ]] runs = RunsLoader() for run_idx, config_dict in enumerate( runs.get_runnable_recommenders()): if run_idx: print( "\n___________________________________________________________________________________________" ) this_config = config_dict.copy() if this_config['recommender']['recommender'] == 'itembased': if itembased_hyperparameters: this_config['recommender'][ 'hyperparameters'] = itembased_hyperparameters.copy() elif this_config['recommender']['recommender'] == 'userbased': if userbased_hyperparameters: this_config['recommender'][ 'hyperparameters'] = userbased_hyperparameters.copy() recommender = RecommenderSystem( abstracts_preprocessor=self.abstracts_preprocessor, ratings=self.ratings, config=this_config, verbose=self.verbose, load_matrices=self.load_matrices, dump_matrices=self.dump, train_more=self.train_more, random_seed=self.random_seed) print( "Run #%d %s: " % ((run_idx + 1), recommender.config.get_description()), recommender.content_based, recommender.collaborative_filtering, ", with: ", recommender.config.config_dict) results = recommender.train() report_str = 'Summary: Test sum {:.2f}, Train sum {:.2f}, Final error {:.5f}, train recall {:.5f}, '\ 'test recall {:.5f}, recall@200 {:.5f}, '\ 'ratio {:.5f}, mrr@5 {:.5f}, '\ 'ndcg@5 {:.5f}, mrr@10 {:.5f}, ndcg@10 {:.5f}' print(report_str.format(*results)) current_result = [ recommender.hyperparameters['n_factors'], recommender.hyperparameters['_lambda'], recommender.config.get_description() ] current_result.extend(results) all_results.append(current_result) GridSearch(recommender, {}, self.verbose, report_name='experiment_results').dump_csv(all_results)
def run_experiment(self): print("Getting Userbased hyperparameters") userbased_configs = { '_lambda': [0.00001, 0.01, 0.1, 0.5, 10], 'n_factors': [100, 200, 300, 400, 500] } self.config.set_recommender_type('userbased') print(self.config.config_dict) recommender = RecommenderSystem( abstracts_preprocessor=self.abstracts_preprocessor, ratings=self.ratings, config=self.config.get_all_config(), verbose=self.verbose, load_matrices=self.load_matrices, dump_matrices=self.dump, train_more=self.train_more) userbased_hyperparameters, userbased_gridsearch_results =\ GridSearch(recommender, userbased_configs, self.verbose, report_name='grid_search_userbased').train() print("Userbased hyperparameters:", userbased_hyperparameters) print("Getting Itembased hyperparameters") itembased_configs = { '_lambda': [0.00001], 'n_factors': [500, 400, 300, 200, 100] } self.config.set_recommender_type('itembased') print(self.config.config_dict) recommender = RecommenderSystem( abstracts_preprocessor=self.abstracts_preprocessor, ratings=self.ratings, config=self.config.get_all_config(), verbose=self.verbose, load_matrices=self.load_matrices, dump_matrices=self.dump, train_more=self.train_more) itembased_hyperparameters, itembased_gridsearch_results =\ GridSearch(recommender, itembased_configs, self.verbose, report_name='grid_search_itembased').train() print("Itembased hyperparameters:", itembased_hyperparameters) all_results = [[ 'n_factors', '_lambda', 'rmse', 'train_recall', 'test_recall', 'recall_at_200', 'ratio', 'mrr @ 5', 'ndcg @ 5', 'mrr @ 10', 'ndcg @ 10' ]] runs = RunsLoader() for config_dict in runs.get_runnable_recommenders(): this_config = config_dict.copy() if this_config['recommender']['recommender'] == 'itembased': if itembased_hyperparameters: this_config['recommender'][ 'hyperparameters'] = itembased_hyperparameters.copy() elif this_config['recommender']['recommender'] == 'userbased': if userbased_hyperparameters: this_config['recommender'][ 'hyperparameters'] = userbased_hyperparameters.copy() recommender = RecommenderSystem( abstracts_preprocessor=self.abstracts_preprocessor, ratings=self.ratings, config=this_config, verbose=self.verbose, load_matrices=self.load_matrices, dump_matrices=self.dump, train_more=self.train_more) print("Running: ", recommender.content_based, recommender.collaborative_filtering, ", with: ", recommender.config.config_dict) recommender.train() current_result = [ recommender.hyperparameters['n_factors'], recommender.hyperparameters['_lambda'] ] current_result.extend(recommender.get_evaluation_report()) all_results.append(current_result) GridSearch(recommender, {}, self.verbose, report_name='experiment_results').dump_csv(all_results)