def read_data_split_and_search(): """ This function provides a simple example on how to tune parameters of a given algorithm The BayesianSearch object will save: - A .txt file with all the cases explored and the recommendation quality - A _best_model file which contains the trained model and can be loaded with recommender.load_model() - A _best_parameter file which contains a dictionary with all the fit parameters, it can be passed to recommender.fit(**_best_parameter) - A _best_result_validation file which contains a dictionary with the results of the best solution on the validation - A _best_result_test file which contains a dictionary with the results, on the test set, of the best solution chosen using the validation set """ from Data_manager.Movielens1M.Movielens1MReader import Movielens1MReader from Data_manager.DataSplitter_k_fold_stratified import DataSplitter_Warm_k_fold dataset_object = Movielens1MReader() dataSplitter = DataSplitter_Warm_k_fold(dataset_object) dataSplitter.load_data() URM_train, URM_validation, URM_test = dataSplitter.get_holdout_split() output_folder_path = "result_experiments/SKOPT_prova/" # If directory does not exist, create if not os.path.exists(output_folder_path): os.makedirs(output_folder_path) collaborative_algorithm_list = [ Random, TopPop, P3alphaRecommender, RP3betaRecommender, ItemKNNCFRecommender, UserKNNCFRecommender, # MatrixFactorization_BPR_Cython, # MatrixFactorization_FunkSVD_Cython, # PureSVDRecommender, # SLIM_BPR_Cython, # SLIMElasticNetRecommender ] from Base.Evaluation.Evaluator import EvaluatorHoldout evaluator_validation = EvaluatorHoldout(URM_validation, cutoff_list=[5]) evaluator_test = EvaluatorHoldout(URM_test, cutoff_list=[5, 10]) runParameterSearch_Collaborative_partial = partial( runParameterSearch_Collaborative, URM_train=URM_train, metric_to_optimize="MAP", n_cases=8, evaluator_validation_earlystopping=evaluator_validation, evaluator_validation=evaluator_validation, evaluator_test=evaluator_test, output_folder_path=output_folder_path) from Utils.PoolWithSubprocess import PoolWithSubprocess # pool = PoolWithSubprocess(processes=int(multiprocessing.cpu_count()), maxtasksperchild=1) # resultList = pool.map(runParameterSearch_Collaborative_partial, collaborative_algorithm_list) # pool.close() # pool.join() for recommender_class in collaborative_algorithm_list: try: runParameterSearch_Collaborative_partial(recommender_class) except Exception as e: print("On recommender {} Exception {}".format( recommender_class, str(e))) traceback.print_exc()
def run_recommender(recommender_class): temp_save_file_folder = "./result_experiments/__temp_model/" if not os.path.isdir(temp_save_file_folder): os.makedirs(temp_save_file_folder) try: dataset_object = Movielens1MReader() dataSplitter = DataSplitter_leave_k_out(dataset_object, k_out_value=2) dataSplitter.load_data() URM_train, URM_validation, URM_test = dataSplitter.get_holdout_split() write_log_string(log_file, "On Recommender {}\n".format(recommender_class)) recommender_object = recommender_class(URM_train) if isinstance(recommender_object, Incremental_Training_Early_Stopping): fit_params = {"epochs": 15} else: fit_params = {} recommender_object.fit(**fit_params) write_log_string(log_file, "Fit OK, ") evaluator = EvaluatorHoldout(URM_test, [5], exclude_seen=True) _, results_run_string = evaluator.evaluateRecommender(recommender_object) write_log_string(log_file, "EvaluatorHoldout OK, ") evaluator = EvaluatorNegativeItemSample(URM_test, URM_train, [5], exclude_seen=True) _, _ = evaluator.evaluateRecommender(recommender_object) write_log_string(log_file, "EvaluatorNegativeItemSample OK, ") recommender_object.saveModel(temp_save_file_folder, file_name="temp_model") write_log_string(log_file, "saveModel OK, ") recommender_object = recommender_class(URM_train) recommender_object.loadModel(temp_save_file_folder, file_name="temp_model") evaluator = EvaluatorHoldout(URM_test, [5], exclude_seen=True) _, results_run_string_2 = evaluator.evaluateRecommender(recommender_object) write_log_string(log_file, "loadModel OK, ") shutil.rmtree(temp_save_file_folder, ignore_errors=True) write_log_string(log_file, " PASS\n") write_log_string(log_file, results_run_string + "\n\n") except Exception as e: print("On Recommender {} Exception {}".format(recommender_class, str(e))) log_file.write("On Recommender {} Exception {}\n\n\n".format(recommender_class, str(e))) log_file.flush() traceback.print_exc()