from KNN.ItemKNNCFRecommender import ItemKNNCFRecommender from KNN.ItemKNNCBFRecommender import ItemKNNCBFRecommender from KNN.UserKNNCBFRecommender import UserKNNCBFRecommender from KNN.UserKNNCFRecommender import UserKNNCFRecommender import numpy as np import scipy.sparse as sps from FeatureWeighting.User_CFW_D_Similarity_Linalg import User_CFW_D_Similarity_Linalg from Hybrid.HybridGen2Recommender import HybridGen2Recommender from Hybrid.HybridNormRecommender import HybridNormRecommender from Hybrid.HybridNorm1Recommender import HybridNorm1Recommender from Hybrid.HybridNorm2Recommender import HybridNorm2Recommender Data = DataManager() urm_train, urm_test = split_train_leave_k_out_user_wise(Data.get_urm(), threshold=10, temperature='normal') urm_train, urm_valid = split_train_leave_k_out_user_wise(urm_train, threshold=10, temperature='valid') evaluator_valid = EvaluatorHoldout(urm_valid, cutoff_list=[10]) evaluator_test = EvaluatorHoldout(urm_test, cutoff_list=[10]) recommender = HybridNorm1Recommender # recommender_3 = UserKNNCFRecommender(urm_train) # recommender_3.fit(shrink=2, topK=600, normalize=True) # w_sparse = recommender_3.W_sparse parameterSearch = SearchBayesianSkopt(recommender, evaluator_validation=evaluator_valid, evaluator_test=evaluator_test) # earlystopping_keywargs = {"validation_every_n": 5,
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 """ # dataReader = Movielens10MReader() # # URM_train = dataReader.get_URM_train() # URM_validation = dataReader.get_URM_validation() # URM_test = dataReader.get_URM_test() Data = DataManager() urm_temp, urm_test = split_train_leave_k_out_user_wise( Data.get_urm(), use_validation_set=False, leave_random_out=True) urm_train, urm_valid = split_train_leave_k_out_user_wise( urm_temp, use_validation_set=False, leave_random_out=True) output_folder_path = "result_experiments/" # 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 SLIMElasticNetRecommender ] from Base.Evaluation.Evaluator import EvaluatorHoldout evaluator_validation = EvaluatorHoldout(urm_valid, cutoff_list=[10]) evaluator_test = EvaluatorHoldout(urm_test, cutoff_list=[10]) runParameterSearch_Collaborative_partial = partial( runParameterSearch_Collaborative, URM_train=urm_train, metric_to_optimize="MAP", n_cases=10, evaluator_validation_earlystopping=evaluator_validation, evaluator_validation=evaluator_validation, evaluator_test=evaluator_test, output_folder_path=output_folder_path, similarity_type_list=["cosine"], parallelizeKNN=False) # pool = multiprocessing.Pool(processes=int(multiprocessing.cpu_count()), maxtasksperchild=1) # pool.map(runParameterSearch_Collaborative_partial, collaborative_algorithm_list) 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()
from FeatureWeighting.CFW_D_Similarity_Linalg import CFW_D_Similarity_Linalg from Hybrid.HybridNorm1Recommender import HybridNorm1Recommender from Hybrid.HybridNorm2Recommender import HybridNorm2Recommender from Hybrid.HybridGen2Recommender import HybridGen2Recommender from MatrixFactorization.Cython.MatrixFactorization_Cython import MatrixFactorization_BPR_Cython data_folder = Path(__file__).parent.absolute() from FeatureWeighting.User_CFW_D_Similarity_Linalg import User_CFW_D_Similarity_Linalg from Hybrid.HybridNorm3Recommender import HybridNorm3Recommender from MatrixFactorization.ALSRecommender import ALSRecommender from MatrixFactorization.BPRRecommender import BPRRecommender import similaripy as sim data = DataManager() urm_train = data.get_urm() urm_train, urm_test = split_train_leave_k_out_user_wise(data.get_urm(), temperature='normal') urm_train, urm_valid = split_train_leave_k_out_user_wise(urm_train, temperature='valid2') urm_train_warm = data.create_test_warm_users(urm_train, threshold=10) urm_test_warm = data.create_test_warm_users(urm_test, threshold=10) evaluator_test_warm = EvaluatorHoldout(urm_test_warm, cutoff_list=[10]) recommender = UserKNNCFRecommender(urm_train) recommender.fit(shrink=2, topK=600, normalize=True) recommender_warm = UserKNNCFRecommender(urm_train_warm) recommender_warm.fit(shrink=2, topK=500, normalize=True) result, str_result = evaluator_test_warm.evaluateRecommender(recommender)
from DataManager.DataManager import DataManager from lightfm.evaluation import auc_score from DataManager.split_train_validation_leave_k_out import split_train_leave_k_out_user_wise from Base.Evaluation.Evaluator import EvaluatorHoldout from Hybrid.LighFm import LighFMRecommender import matplotlib.pyplot as pyplot from sklearn import metrics, ensemble import numpy as np data = DataManager() urm = data.get_urm() threshold = 10 temperature = 'normal' ucm_age, ucm_region, ucm_all = data.get_ucm() icm_price, icm_asset, icm_sub, icm_all = data.get_icm() urm_train, urm_test = split_train_leave_k_out_user_wise( urm, threshold=threshold, temperature=temperature) urm_train, urm_valid = split_train_leave_k_out_user_wise(urm_train, threshold=threshold, temperature='valid') evaluator_test = EvaluatorHoldout(urm_test, cutoff_list=[10]) evaluator_valid = EvaluatorHoldout(urm_valid, cutoff_list=[10]) # recommender = LighFMRecommender(urm_train, # no_components=150, # loss='warp', # learning_rate=0.09, # random_state=2019) # # # recommender.fit(epochs=10, user_features=ucm_all, item_features=icm_sub, num_threads=4)