Ejemplo n.º 1
0
 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()
Ejemplo n.º 2
0
 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)
Ejemplo n.º 3
0
 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)
Ejemplo n.º 4
0
 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()
Ejemplo n.º 5
0
 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()
Ejemplo n.º 6
0
    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)
Ejemplo n.º 7
0
    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)