def fit(self): self.cold_recommender.fit() rec_augmenter_cold_item = ItemKNNCBFOnlyColdRecommender(self.data) # r2 = ItemKNNCBFRecommender(data.urm_train, data.icm_all_augmented) rec_augmenter_cold_item.fit(topK=10, shrink=1, feature_weighting="BM25") self.warm_recommender.augment(rec_augmenter_cold_item, self.data.ids_warm_train_users, self.warm_recommender.augmented_matrix, cutoff=3, amount=1) rec_warm = RP3betaRecommender(self.warm_recommender.augmented_matrix) rec_warm.fit(topK=20, alpha=0.16, beta=0.24) self.warm_recommender.fit(rec_warm) self.warm_1_recommender.fit() self.warm_7_recommender.augment( rec_augmenter_cold_item, self.data.ids_warm_train_users, self.warm_7_recommender.augmented_matrix, cutoff=3, amount=1) rec_warm_7 = ItemKNNCFRecommender( self.warm_7_recommender.augmented_matrix) rec_warm_7.fit(topK=22, shrink=850, feature_weighting="BM25", similarity="jaccard") self.warm_7_recommender.fit(rec_warm_7)
def __init__(self, data: DataObject, random_seed: int, alpha=1): super(Hybrid3ScoreRecommender, self).__init__(data.urm_train) self.random_seed = random_seed self.slim = SLIMElasticNetRecommender(self.URM_train) self.rp3 = RP3betaRecommender(self.URM_train) self.itemcf = ItemKNNCFRecommender(self.URM_train) self.alpha = alpha
class Hybrid105AlphaRecommender(BaseRecommender): """Hybrid105AlphaRecommender recommender""" RECOMMENDER_NAME = "Hybrid105AlphaRecommender" def __init__(self, data: DataObject): super(Hybrid105AlphaRecommender, self).__init__(data.urm_train) self.data = data # self.rec1 = SLIM_BPR_Cython(data.urm_train) self.rec2 = ItemKNNCFRecommender(data.urm_train) self.rec3 = RP3betaRecommender(data.urm_train) # self.rec1.fit(sgd_mode="adagrad", topK=50, epochs=150, learning_rate=1e-05, lambda_i=1, lambda_j=0.001) self.rec2.fit(topK=10, shrink=30, similarity="tanimoto") self.rec3.fit(topK=30, alpha=0.24, beta=0.24, implicit=True, normalize_similarity=True) self.hybrid_rec = Hybrid1XXAlphaRecommender(data, recommenders=[self.rec2, self.rec3], max_cutoff=20) def fit(self): weights = np.array([[91.45, 46.9, 36.6, 26.75, 19.85, 18.45, 14.95, 11.9, 14.25, 9.9, 10.65, 10.65, 9.85, 9.2, 7.6, 7.8, 6.6, 7.05, 5.8, 6.25, 4.7, 5., 5.45, 4.45, 3.8, 4.05, 4.05, 4.05, 3.75, 3.95], [94.7, 51.2, 34.25, 26.45, 22.25, 17.55, 15.7, 13.7, 10.75, 9.9, 9.15, 8.2, 6.6, 6.35, 6.65, 5.45, 5.25, 4.4, 5.6, 3.95, 3.2, 3.85, 2.6, 2.85, 2.75, 2.3, 2.55, 2.4, 2.9, 1.6]]) weights[0] = weights[0] / 3 * 2 self.hybrid_rec.fit(weights=weights) def recommend(self, user_id_array, cutoff=None, remove_seen_flag=True, items_to_compute=None, remove_top_pop_flag=False, remove_CustomItems_flag=False, return_scores=False): return self.hybrid_rec.recommend(user_id_array=user_id_array, cutoff=cutoff)
def __init__(self, urm_train): super(HybridNorm3Recommender, self).__init__(urm_train) urm_train = check_matrix(urm_train.copy(), 'csr') self.num_users = urm_train.shape[0] # recommender_1 = HybridGenRecommender(urm_train) # recommender_1.fit() recommender_1 = RP3betaRecommender(urm_train) recommender_1.fit(topK=16, alpha=0.03374950051351756, beta=0.24087176329409027, normalize_similarity=True) recommender_3 = UserKNNCFRecommender(urm_train) recommender_3.fit(shrink=2, topK=600, normalize=True) recommender_2 = ItemKNNCFRecommender(urm_train) recommender_2.fit(topK=5, shrink=500, feature_weighting='BM25', similarity='tversky', normalize=False, tversky_alpha=0.0, tversky_beta=1.0) self.recommender_1 = recommender_1 self.recommender_2 = recommender_2 self.recommender_3 = recommender_3
class Hybrid001AlphaRecommender(BaseRecommender): """Hybrid001AlphaRecommender recommender""" RECOMMENDER_NAME = "Hybrid001AlphaRecommender" def __init__(self, URM_train, UCM, cold_users, warm_users): super(Hybrid001AlphaRecommender, self).__init__(URM_train) self.warm_recommender = ItemKNNCFRecommender(URM_train) self.cold_recommender = UserKNNCBFRecommender(UCM, URM_train) self.cold_users = cold_users self.warm_users = warm_users def fit(self): self.warm_recommender.fit(topK=12, shrink=16) self.cold_recommender.fit(topK=11000, shrink=2) def recommend(self, user_id_array, cutoff=None, remove_seen_flag=True, items_to_compute=None, remove_top_pop_flag=False, remove_CustomItems_flag=False, return_scores=False): if user_id_array in self.warm_users: return self.warm_recommender.recommend(user_id_array, cutoff=cutoff) if user_id_array in self.cold_users: return self.cold_recommender.recommend(user_id_array, cutoff=cutoff)
def __init__(self, data: DataObject): super(Hybrid3ScoreSubRecommender, self).__init__(data.urm_train) urm = sps.vstack([data.urm_train, data.icm_all_augmented.T]) urm = urm.tocsr() self.slim = SLIMElasticNetRecommender(urm) self.rp3 = RP3betaRecommender(self.URM_train) self.itemcf = ItemKNNCFRecommender(self.URM_train) self.random_seed = data.random_seed
def objective(**params): recommender = ItemKNNCFRecommender(URM_train) recommender.fit(**params) print(f"RUN#{run}:\n> space: [ topK={recommender.topK}, shrink={recommender.shrink} ]") result_dict, _ = evaluator_validation.evaluateRecommender(recommender) MAP = result_dict[10]['MAP'] print(f"> result: [ MAP={MAP} ]") return -MAP
class Hybrid3ScoreSubRecommender(BaseRecommender): """Hybrid3ScoreSubRecommender recommender""" RECOMMENDER_NAME = "Hybrid3ScoreRecommender" def __init__(self, data: DataObject): super(Hybrid3ScoreSubRecommender, self).__init__(data.urm_train) urm = sps.vstack([data.urm_train, data.icm_all_augmented.T]) urm = urm.tocsr() self.slim = SLIMElasticNetRecommender(urm) self.rp3 = RP3betaRecommender(self.URM_train) self.itemcf = ItemKNNCFRecommender(self.URM_train) self.random_seed = data.random_seed def fit(self, alpha_beta_ratio=1, alpha_gamma_ratio=1): try: self.slim.load_model('stored_recommenders/slim_elastic_net/', f'with_icm_{self.random_seed}_topK=100_l1_ratio=0.04705_alpha=0.00115_positive_only=True_max_iter=35') except: self.slim.fit(topK=100, l1_ratio=0.04705, alpha=0.00115, positive_only=True, max_iter=35) self.slim.save_model('stored_recommenders/slim_elastic_net/', f'with_icm_{self.random_seed}_topK=100_l1_ratio=0.04705_alpha=0.00115_positive_only=True_max_iter=35') self.rp3.fit(topK=20, alpha=0.16, beta=0.24) self.itemcf.fit(topK=22, shrink=850, similarity='jaccard', feature_weighting='BM25') self.alpha = 1 self.beta = alpha_beta_ratio self.gamma = alpha_gamma_ratio def _compute_item_score(self, user_id_array, items_to_compute = None): # ATTENTION! # THIS METHOD WORKS ONLY IF user_id_array IS A SCALAR AND NOT AN ARRAY # TODO scores_slim = self.slim._compute_item_score(user_id_array=user_id_array) scores_rp3 = self.rp3._compute_item_score(user_id_array=user_id_array) scores_itemcf = self.itemcf._compute_item_score(user_id_array=user_id_array) # normalization slim_max = scores_slim.max() rp3_max = scores_rp3.max() itemcf_max = scores_itemcf.max() if not slim_max == 0: scores_slim /= slim_max if not rp3_max == 0: scores_rp3 /= rp3_max if not itemcf_max == 0: scores_itemcf /= itemcf_max scores_total = self.alpha * scores_slim + self.beta * scores_rp3 + self.gamma * scores_itemcf return scores_total
def __init__(self, data: DataObject): super(Hybrid201AlphaRecommender, self).__init__(data.urm_train) self.data = data urm = data.urm_train urm = sps.vstack([data.urm_train, data.icm_all_augmented.T]) urm = urm.tocsr() self.rec1 = SLIM_BPR_Cython(urm) self.rec2 = ItemKNNCFRecommender(urm) self.rec3 = RP3betaRecommender(urm) self.random_seed = data.random_seed try: self.rec1.load_model( "stored_recommenders/slim_bpr/", f'with_icm_{self.random_seed}_topK=15000_epochs=250_learning_rate=1e-05_lambda_i=0.01_lambda_j=0.01' ) except: self.rec1.fit(sgd_mode="adagrad", topK=15000, epochs=250, learning_rate=1e-05, lambda_i=0.01, lambda_j=0.01) self.rec1.save_model( "stored_recommenders/slim_bpr/", f'with_icm_{self.random_seed}_topK=15000_epochs=250_learning_rate=1e-05_lambda_i=0.01_lambda_j=0.01' ) try: self.rec2.load_model( "stored_recommenders/item_cf/", f'with_icm_{self.random_seed}_topK=20000_shrink=20000_feature_weighting=TF-IDF' ) except: self.rec2.fit(topK=20000, shrink=20000, feature_weighting="TF-IDF") self.rec2.save_model( "stored_recommenders/item_cf/", f'with_icm_{self.random_seed}_topK=20000_shrink=20000_feature_weighting=TF-IDF' ) try: self.rec3.load_model( "stored_recommenders/rp3_beta/", f'with_icm_{self.random_seed}_topK=10000_alpha=0.55_beta=0.01_implicit=True_normalize_similarity=True' ) except: self.rec3.fit(topK=10000, alpha=0.55, beta=0.01, implicit=True, normalize_similarity=True) self.rec3.save_model( "stored_recommenders/rp3_beta/", f'with_icm_{self.random_seed}_topK=10000_alpha=0.55_beta=0.01_implicit=True_normalize_similarity=True' ) self.hybrid_rec = Hybrid1XXAlphaRecommender( data, recommenders=[self.rec1, self.rec2, self.rec3], max_cutoff=20)
class Hybrid101AlphaRecommender(BaseRecommender): """Hybrid101AlphaRecommender recommender""" RECOMMENDER_NAME = "Hybrid101AlphaRecommender" def __init__(self, data: DataObject): super(Hybrid101AlphaRecommender, self).__init__(data.urm_train) self.data = data self.rec1 = SLIM_BPR_Cython(data.urm_train) self.rec2 = ItemKNNCFRecommender(data.urm_train) self.rec3 = RP3betaRecommender(data.urm_train) self.rec1.fit(sgd_mode="adagrad", topK=15000, epochs=250, learning_rate=1e-05, lambda_i=0.01, lambda_j=0.01) # self.rec1.fit(topK=435, epochs=115, symmetric=True, sgd_mode='adagrad', lambda_i=0.0010067865845523253, # lambda_j=3.764224446055186e-05, learning_rate=0.00024125117955549121) self.rec2.fit(topK=20000, shrink=20000, feature_weighting="TF-IDF") self.rec3.fit(topK=10000, alpha=0.55, beta=0.01, implicit=True, normalize_similarity=True) self.hybrid_rec = Hybrid1XXAlphaRecommender( data, recommenders=[self.rec1, self.rec2, self.rec3], max_cutoff=20) def fit(self): weights = [[ 69.4, 25.7, 11.7, 9.4, 8.4, 5.4, 6.6, 6., 5.5, 5.6, 5., 4.4, 3.3, 5.7, 4.2, 3.7, 4.5, 2.8, 3.8, 3.4 ], [ 77.8, 29.3, 17.4, 9., 8.5, 8.9, 5.9, 5.9, 5.4, 5.1, 6., 6.3, 4.4, 4.6, 5.2, 4.9, 3.5, 3.3, 3.5, 4.3 ], [ 78.5, 29.2, 15.6, 10.9, 9.4, 6.5, 8.3, 5.7, 6.3, 6.6, 4.3, 4.2, 4.3, 4.6, 6.1, 4.7, 5.1, 4.7, 4.9, 5.1 ]] self.hybrid_rec.fit(weights=weights) def recommend(self, user_id_array, cutoff=None, remove_seen_flag=True, items_to_compute=None, remove_top_pop_flag=False, remove_CustomItems_flag=False, return_scores=False): return self.hybrid_rec.recommend(user_id_array=user_id_array, cutoff=cutoff)
class Hybrid3ScoreRecommender(BaseRecommender): """Hybrid3ScoreRecommender recommender""" RECOMMENDER_NAME = "Hybrid3ScoreRecommender" def __init__(self, data: DataObject, random_seed: int, alpha=1): super(Hybrid3ScoreRecommender, self).__init__(data.urm_train) self.random_seed = random_seed self.slim = SLIMElasticNetRecommender(self.URM_train) self.rp3 = RP3betaRecommender(self.URM_train) self.itemcf = ItemKNNCFRecommender(self.URM_train) self.alpha = alpha def fit(self, alpha_beta_ratio=1, alpha_gamma_ratio=1): self.slim.load_model( '', 'SLIM_ElasticNetURM_seed=' + str(self.random_seed) + '_topK=100_l1_ratio=0.04705_alpha=0.00115_positive_only=True_max_iter=35' ) self.rp3.fit(topK=20, alpha=0.16, beta=0.24) self.itemcf.fit(topK=22, shrink=850, similarity='jaccard', feature_weighting='BM25') # self.alpha = 1 self.beta = self.alpha * alpha_beta_ratio self.gamma = self.alpha * alpha_gamma_ratio def _compute_item_score(self, user_id_array, items_to_compute=None): # ATTENTION! # THIS METHOD WORKS ONLY IF user_id_array IS A SCALAR AND NOT AN ARRAY # TODO scores_slim = self.slim._compute_item_score( user_id_array=user_id_array) scores_rp3 = self.rp3._compute_item_score(user_id_array=user_id_array) scores_itemcf = self.itemcf._compute_item_score( user_id_array=user_id_array) # normalization slim_max = scores_slim.max() rp3_max = scores_rp3.max() itemcf_max = scores_itemcf.max() if not slim_max == 0: scores_slim /= slim_max if not rp3_max == 0: scores_rp3 /= rp3_max if not itemcf_max == 0: scores_itemcf /= itemcf_max scores_total = self.alpha * scores_slim + self.beta * scores_rp3 + self.gamma * scores_itemcf return scores_total
def __init__(self, data: DataObject): super(Hybrid105AlphaRecommender, self).__init__(data.urm_train) self.data = data # self.rec1 = SLIM_BPR_Cython(data.urm_train) self.rec2 = ItemKNNCFRecommender(data.urm_train) self.rec3 = RP3betaRecommender(data.urm_train) # self.rec1.fit(sgd_mode="adagrad", topK=50, epochs=150, learning_rate=1e-05, lambda_i=1, lambda_j=0.001) self.rec2.fit(topK=10, shrink=30, similarity="tanimoto") self.rec3.fit(topK=30, alpha=0.24, beta=0.24, implicit=True, normalize_similarity=True) self.hybrid_rec = Hybrid1XXAlphaRecommender(data, recommenders=[self.rec2, self.rec3], max_cutoff=20)
def __init__(self, data: DataObject): super(Hybrid104AlphaRecommender, self).__init__(data.urm_train) self.data = data self.rec1 = RP3betaRecommender(data.urm_train) self.rec1.fit(topK=26, alpha=0.25, beta=0.21) self.rec2 = ItemKNNCFRecommender(data.urm_train) self.rec2.fit(topK=10, shrink=1000, similarity="tanimoto", feature_weighting="BM25") target_users = data.urm_train_users_by_type[4][1] self.target_users = target_users self.hybrid_rec = Hybrid1CXAlphaRecommender(data, recommenders=[self.rec1, self.rec2], recommended_users=target_users, max_cutoff=30)
def __init__(self, data: DataObject): super(Hybrid109AlphaRecommender, self).__init__(data.urm_train) self.data = data self.rec1 = RP3betaRecommender(data.urm_train) self.rec2 = ItemKNNCFRecommender(data.urm_train) self.rec1.fit(topK=20, alpha=0.11, beta=0.18) self.rec2.fit(topK=18, shrink=850, similarity='jaccard', feature_weighting='BM25') cold = data.ids_cold_user self.target_users = data.urm_train_users_by_type[10][1] self.hybrid_rec = Hybrid1CXAlphaRecommender(data, recommenders=[self.rec1, self.rec2], recommended_users=self.target_users, max_cutoff=30)
class Hybrid102AlphaRecommender(BaseRecommender): """Hybrid102AlphaRecommender recommender""" RECOMMENDER_NAME = "Hybrid102AlphaRecommender" def __init__(self, data: DataObject): super(Hybrid102AlphaRecommender, self).__init__(data.urm_train) self.data = data self.rec1 = UserKNNCFRecommender(data.urm_train) self.rec1.fit(topK=1000, shrink=4500, similarity="cosine", feature_weighting="TF-IDF") self.rec2 = ItemKNNCFRecommender(data.urm_train) self.rec2.fit(topK=2000, shrink=800, similarity="cosine", feature_weighting="TF-IDF") self.rec3 = SLIM_BPR_Cython(data.urm_train) self.rec3.fit(epochs=120, topK=800, lambda_i=0.1, lambda_j=0.1, learning_rate=0.0001) self.rec4 = RP3betaRecommender(data.urm_train) self.rec4.fit(topK=30, alpha=0.21, beta=0.25) target_users = data.urm_train_users_by_type[2][1] self.target_users = target_users self.hybrid_rec = Hybrid1CXAlphaRecommender(data, recommenders=[self.rec1, self.rec2, self.rec3], recommended_users=target_users, max_cutoff=30) def fit(self): weights1 = np.array([[0.37625119, 0.43193487, 0.17444842, 0.16197883, 0.18204363, 0.17016599, 0.14983434, 0.11938279, 0.09980418, 0.1147748, 0.12762677, 0.08689066, 0.09533745, 0.10492991, 0.097475, 0.05278562, 0.05244627, 0.0602501, 0.06743845, 0.06145589, 0.07008017, 0.07410305, 0.07170746, 0.04231058, 0.04493697, 0.02516579, 0.0176046, 0.01360429, 0., 0.], [0.55298149, 0.27456885, 0.2278579, 0.25095311, 0.24721051, 0.09937549, 0.09209609, 0.07158969, 0.07174988, 0.08251237, 0.09157335, 0.10530935, 0.1106961, 0.12150468, 0.12001527, 0.10052318, 0.09536568, 0.10770821, 0.08553278, 0.06198749, 0.05708056, 0.05176975, 0.05953521, 0.05567152, 0.06083775, 0.02776653, 0.02663699, 0.01181728, 0.01168978, 0.], [0.25041731, 0.15536414, 0.16953122, 0.17164006, 0.11443169, 0.11873982, 0.07100542, 0.06452205, 0.06123626, 0.06430055, 0.06311274, 0.05618836, 0.05331187, 0.04611177, 0.04239514, 0.03824963, 0.04398116, 0.04738213, 0.04862799, 0.03962175, 0.04556502, 0.04738956, 0.054498, 0.0626727, 0.04973429, 0.03219802, 0.03227312, 0.0307041, 0.03396853, 0.], [1., 0.5538608, 0.44692181, 0.20321725, 0.22012478, 0.1873366, 0.14329206, 0.09783222, 0.10765581, 0.10658318, 0.12257066, 0.13699397, 0.15743225, 0.12181424, 0.13897041, 0.08672218, 0.09188654, 0.05170634, 0.04459521, 0.04785834, 0.05248675, 0.06035977, 0.06733202, 0.06760871, 0.07775002, 0.0720465, 0.05977294, 0.04260028, 0.00546561, 0.0055422]]) self.hybrid_rec.weights = weights1 def recommend(self, user_id_array, cutoff=None, remove_seen_flag=True, items_to_compute=None, remove_top_pop_flag=False, remove_CustomItems_flag=False, return_scores=False): if user_id_array in self.target_users: return self.hybrid_rec.recommend(user_id_array=user_id_array, cutoff=cutoff) else: return []
def __init__(self, data: DataObject): super(Hybrid003AlphaRecommender, self).__init__(data.urm_train) self.data = data self.poco_warm_recommender = Hybrid101AlphaRecommender(data) self.quasi_warm_recommender = Hybrid102AlphaRecommender(data) # self.warm_recommender = ItemKNNCFRecommender(data.urm_train) # self.warm_recommender = Hybrid105AlphaRecommender(data) self.warm_recommender = RP3betaRecommender(data.urm_train) self.warm_7_recommender = ItemKNNCFRecommender(data.urm_train) self.warm_8_recommender = Hybrid108AlphaRecommender(data) self.warm_9_recommender = Hybrid109AlphaRecommender(data) self.cold_recommender = Hybrid100AlphaRecommender(data)
def eval_one_data(random_seed): data_reader = DataReader() data = DataObject(data_reader, 1, random_seed=random_seed) result = [] recommender = ItemKNNCFRecommender(data.urm_train) recommender.fit(topK = args["topK"], shrink=args["shrink"], similarity=args["similarity"], feature_weighting=args["feature_weighting"]) for n, users, description in data.urm_train_users_by_type: eval, map = MyEvaluator.evaluate_algorithm(data.urm_test, users, recommender, at=10, remove_top=0) result.append(map) users = data.ids_target_users eval, map = MyEvaluator.evaluate_algorithm(data.urm_test, users, recommender, at=10, remove_top=0) result.append(map) return result
def __init__(self, data: DataObject): super(Hybrid108AlphaRecommender, self).__init__(data.urm_train) self.data = data self.rec1 = ItemKNNCFRecommender(data.urm_train) self.rec2 = P3alphaRecommender(data.urm_train) self.rec3 = RP3betaRecommender(data.urm_train) self.rec1.fit(shrink=15, topK=12, feature_weighting="none") self.rec2.fit(topK=170, implicit=True, alpha=0.5) self.rec3.fit(topK=60, alpha=0.5, beta=0.1, implicit=True) self.hybrid_rec = Hybrid1XXAlphaRecommender( data, recommenders=[self.rec1, self.rec2, self.rec3], max_cutoff=12)
def __init__(self, urm_train, eurm=False): super(HybridNorm2Recommender, self).__init__(urm_train) self.data_folder = Path(__file__).parent.parent.absolute() self.eurm = eurm self.num_users = urm_train.shape[0] urm_train = check_matrix(urm_train.copy(), 'csr') recommender_2 = ItemKNNCFRecommender(urm_train) recommender_2.fit(topK=5, shrink=500, feature_weighting='BM25', similarity='tversky', normalize=False, tversky_alpha=0.0, tversky_beta=1.0) recommender_3 = UserKNNCFRecommender(urm_train) recommender_3.fit(shrink=2, topK=600, normalize=True) # recommender_3 = UserKNNCFRecommender(urm_train) # recommender_3.fit(topK=697, shrink=1000, feature_weighting='TF-IDF', similarity='tversky', normalize=False, # tversky_alpha=1.0, tversky_beta=1.0) recommender_4 = RP3betaRecommender(urm_train) recommender_4.fit(topK=16, alpha=0.03374950051351756, beta=0.24087176329409027, normalize_similarity=True) recommender_5 = SLIM_BPR_Cython(urm_train) recommender_5.fit(lambda_i=0.0926694015, lambda_j=0.001697250, learning_rate=0.002391, epochs=65, topK=200) recommender_6 = ALSRecommender(urm_train) recommender_6.fit(alpha=5, iterations=40, reg=0.3) self.recommender_2 = recommender_2 self.recommender_3 = recommender_3 self.recommender_4 = recommender_4 self.recommender_5 = recommender_5 self.recommender_6 = recommender_6 if self.eurm: self.score_matrix_1 = sps.load_npz(self.data_folder / 'Data/icm_sparse.npz') self.score_matrix_2 = self.recommender_2._compute_item_matrix_score(np.arange(self.num_users)) self.score_matrix_3 = self.recommender_3._compute_item_matrix_score(np.arange(self.num_users)) self.score_matrix_4 = self.recommender_4._compute_item_matrix_score(np.arange(self.num_users)) self.score_matrix_5 = self.recommender_5._compute_item_matrix_score(np.arange(self.num_users)) self.score_matrix_6 = self.recommender_6._compute_item_score(np.arange(self.num_users)) self.score_matrix_7 = sps.load_npz(self.data_folder / 'Data/ucm_sparse.npz') self.score_matrix_1 = normalize(self.score_matrix_1, norm='l2', axis=1) self.score_matrix_2 = normalize(self.score_matrix_2, norm='l2', axis=1) self.score_matrix_3 = normalize(self.score_matrix_3, norm='l2', axis=1) self.score_matrix_4 = normalize(self.score_matrix_4, norm='l2', axis=1) self.score_matrix_5 = normalize(self.score_matrix_5, norm='l2', axis=1) self.score_matrix_6 = normalize(self.score_matrix_6, norm='l2', axis=1) self.score_matrix_7 = normalize(self.score_matrix_7, norm='l2', axis=1)
def __init__(self, URM_train, verbose=True): super(MergedHybrid000, self).__init__(URM_train, verbose=verbose) rec1 = RP3betaRecommender(URM_train, verbose=False) try: rec1.load_model( 'stored_recommenders/RP3betaRecommender/best_at_26_10_20') except: rec1.fit(alpha=0.4530815441932864, beta=0.008742088319964482, topK=104, normalize_similarity=False) rec1.save_model( 'stored_recommenders/RP3betaRecommender/best_at_26_10_20') rec2 = ItemKNNCFRecommender(URM_train, verbose=False) try: rec2.load_model( 'stored_recommenders/ItemKNNCFRecommender/best_at_26_10_20') except: rec2.fit(topK=967, shrink=356, similarity='cosine', normalize=True) rec2.save_model( 'stored_recommenders/ItemKNNCFRecommender/best_at_26_10_20') self.rec1 = rec1 self.rec2 = rec2 self.rec1_W_sparse = rec1.W_sparse.copy() self.rec2_W_sparse = rec2.W_sparse.copy() self.URM_train = URM_train
def __init__(self, data: DataObject): super(Hybrid102AlphaRecommender, self).__init__(data.urm_train) self.data = data self.rec1 = UserKNNCFRecommender(data.urm_train) self.rec1.fit(topK=1000, shrink=4500, similarity="cosine", feature_weighting="TF-IDF") self.rec2 = ItemKNNCFRecommender(data.urm_train) self.rec2.fit(topK=2000, shrink=800, similarity="cosine", feature_weighting="TF-IDF") self.rec3 = SLIM_BPR_Cython(data.urm_train) self.rec3.fit(epochs=120, topK=800, lambda_i=0.1, lambda_j=0.1, learning_rate=0.0001) self.rec4 = RP3betaRecommender(data.urm_train) self.rec4.fit(topK=30, alpha=0.21, beta=0.25) target_users = data.urm_train_users_by_type[2][1] self.target_users = target_users self.hybrid_rec = Hybrid1CXAlphaRecommender(data, recommenders=[self.rec1, self.rec2, self.rec3], recommended_users=target_users, max_cutoff=30)
def __init__(self, urm_train): super(HybridNorm1Recommender, self).__init__(urm_train) self.num_users = urm_train.shape[0] urm_train = check_matrix(urm_train.copy(), 'csr') recommender_1 = HybridGen2Recommender(urm_train) recommender_1.fit() recommender_2 = ItemKNNCFRecommender(urm_train) recommender_2.fit(topK=5, shrink=500, feature_weighting='BM25', similarity='tversky', normalize=False, tversky_alpha=0.0, tversky_beta=1.0) recommender_3 = UserKNNCFRecommender(urm_train) recommender_3.fit(topK=697, shrink=1000, feature_weighting='TF-IDF', similarity='tversky', normalize=False, tversky_alpha=1.0, tversky_beta=1.0) recommender_4 = RP3betaRecommender(urm_train) recommender_4.fit(topK=16, alpha=0.03374950051351756, beta=0.24087176329409027, normalize_similarity=True) recommmender_5 = SLIM_BPR_Cython(urm_train) recommmender_5.fit(lambda_i=0.0926694015, lambda_j=0.001697250, learning_rate=0.002391, epochs=65, topK=200) recommender_6 = ALSRecommender(urm_train) recommender_6.fit(alpha=5, iterations=40, reg=0.3) self.recommender_1 = recommender_1 self.recommender_2 = recommender_2 self.recommender_3 = recommender_3 self.recommender_4 = recommender_4 self.recommender_5 = recommmender_5 self.recommender_6 = recommender_6
def __init__(self, URM_train, ICM_train, submission=False, verbose=True, seed=1205): super(LinearHybridC001, self).__init__(URM_train, verbose=verbose) self.URM_train = URM_train self.ICM_train = ICM_train # seed 1205: {'num_factors': 83, 'confidence_scaling': 'linear', 'alpha': 28.4278070726612, 'epsilon': # 1.0234211788885077, 'reg': 0.0027328110246575004, 'epochs': 20} self.__rec1 = IALSRecommender(URM_train, verbose=False) self.__rec1_params = { 'num_factors': 83, 'confidence_scaling': 'linear', 'alpha': 28.4278070726612, 'epsilon': 1.0234211788885077, 'reg': 0.0027328110246575004, 'epochs': 15 } #### -5!! # seed 1205: {'topK': 225, 'shrink': 1000, 'similarity': 'cosine', 'normalize': True, 'feature_weighting': # 'BM25'} self.__rec2 = ItemKNNCBFRecommender(URM_train, ICM_train, verbose=False) self.__rec2_params = { 'topK': 225, 'shrink': 1000, 'similarity': 'cosine', 'normalize': True, 'feature_weighting': 'BM25' } # seed 1205: {'topK': 220, 'shrink': 175, 'similarity': 'cosine', 'normalize': False} self.__rec3 = ItemKNNCFRecommender(URM_train, verbose=False) self.__rec3_params = { 'topK': 220, 'shrink': 175, 'similarity': 'cosine', 'normalize': False } self.__a = self.__b = self.__c = None self.seed = seed self.__submission = submission
def __init__(self, URM_train, ICM_train, submission=False, verbose=True, seed=1205): super(LinearHybrid002, self).__init__(URM_train, verbose=verbose) self.URM_train = URM_train self.ICM_train = ICM_train # seed 1205: 'topK': 190, 'shrink': 0, 'similarity': 'cosine', 'normalize': True self.__rec1 = UserKNNCFRecommender(URM_train, verbose=False) self.__rec1_params = { 'topK': 190, 'shrink': 0, 'similarity': 'cosine', 'normalize': True } # seed 1205: 'topK': 100, 'shrink': 1000, 'similarity': 'asymmetric', 'normalize': True, 'asymmetric_alpha': 0.0 self.__rec2 = ItemKNNCFRecommender(URM_train, verbose=False) self.__rec2_params = { 'topK': 100, 'shrink': 1000, 'similarity': 'asymmetric', 'normalize': True, 'asymmetric_alpha': 0.0 } # seed 1205: 'topK': 205, 'shrink': 1000, 'similarity': 'cosine', 'normalize': True, 'feature_weighting': 'BM25' self.__rec3 = ItemKNNCBFRecommender(URM_train, ICM_train, verbose=False) self.__rec3_params = { 'topK': 205, 'shrink': 1000, 'similarity': 'cosine', 'normalize': True, 'feature_weighting': 'BM25' } self.__a = self.__b = self.__c = None self.seed = seed self.__submission = submission
def __init__(self, URM_train): super(HybridWarmRecommender, self).__init__(URM_train) recommender_1 = ItemKNNCFRecommender(URM_train) recommender_1.fit(topK=20, shrink=30) recommender_2 = SLIM_BPR_Cython(URM_train) recommender_2.fit(epochs=40, lambda_i=0.01, lambda_j=0.001, learning_rate=1e-4, topK=200) # recommender_3 = TopPop(URM_train) # recommender_3.fit() self.URM_train = check_matrix(URM_train.copy(), 'csr') self.recommender_1 = recommender_1 self.recommender_2 = recommender_2
def __init__(self, URM_train, ICM_train, submission=False, verbose=True, seed=1205): super(LinearHybrid001, self).__init__(URM_train, verbose = verbose) self.URM_train = URM_train self.ICM_train = ICM_train self.__rec1 = SLIMElasticNetRecommender(URM_train, verbose=False) self.__rec1_params = {'topK': 120, 'l1_ratio': 1e-5, 'alpha': 0.066} # seed 1205: 'topK': 620, 'shrink': 121, 'similarity': 'asymmetric', 'normalize': True, 'asymmetric_alpha': 0.5526988987666924 self.__rec2 = ItemKNNCFRecommender(URM_train, verbose=False) self.__rec2_params = {'topK': 620, 'shrink': 121, 'similarity': 'asymmetric', 'normalize': True, 'asymmetric_alpha': 0.5526988987666924} # seed 1205: 'topK': 115, 'shrink': 1000, 'similarity': 'cosine', 'normalize': True, 'feature_weighting': 'BM25' self.__rec3 = ItemKNNCBFRecommender(URM_train, ICM_train, verbose=False) self.__rec3_params = {'topK': 115, 'shrink': 1000, 'similarity': 'cosine', 'normalize': True, 'feature_weighting': 'BM25'} self.__a = self.__b = self.__c = None self.seed=seed self.__submission=submission
def split_and_fit(self, random_seed): print(random_seed) data = self.data # Split policy new_urm_train = split_with_triple(data.augmented_urm, self.split_policy)[0] rec = ItemKNNCFRecommender(new_urm_train) rec.fit( topK=self.topK, shrink=self.shrink, similarity=self.similarity, feature_weighting=self.feature_weighting ) rec.URM_train = data.urm_train return rec
class Hybrid111AlphaRecommender(BaseRecommender): """Hybrid111AlphaRecommender recommender""" RECOMMENDER_NAME = "Hybrid111AlphaRecommender" def __init__(self, data: DataObject): super(Hybrid111AlphaRecommender, self).__init__(data.urm_train) self.data = data self.rec1 = RP3betaRecommender(data.urm_train) self.rec2 = ItemKNNCFRecommender(data.urm_train) self.rec1.fit(topK=20, alpha=0.11, beta=0.18) self.rec2.fit(topK=18, shrink=850, similarity='jaccard', feature_weighting='BM25') cold = data.ids_cold_user self.target_users = data.urm_train_users_by_type[11][1] self.hybrid_rec = Hybrid1CXAlphaRecommender(data, recommenders=[self.rec1, self.rec2], recommended_users=self.target_users, max_cutoff=30) def fit(self): weights = [ [0.36263544103305234, 0.2821869186577171, 0.2958040731688242, 0.29923612866193294, 0.25220249762628333, 0.2761756648779422, 0.18915192083976606, 0.182117148228788, 0.1842783740517236, 0.1486885469397763, 0.15841860217081513, 0.1313525617771801, 0.1495204046677669, 0.1442400061423464, 0.14584743502512043, 0.12150982415065534, 0.12535649682927805, 0.08906867097805428, 0.1012469101805646, 0.08566556941254282, 0.08865930444526858, 0.0910510345404526, 0.06557183202757007, 0.05584782961979419, 0.05557650728442622, 0.030967327271124927, 0.029196638757279396, 0.025490236322759728, 0.01569027879218803, 0.015055828167915425], [1.0, 0.5214104256707622, 0.20746796675006374, 0.23560220633621676, 0.2575770382835032, 0.2512775337476986, 0.28896916380985344, 0.3287565885723311, 0.19352951261468151, 0.22255893950688374, 0.12074099390243273, 0.13073528889178715, 0.13251088387516363, 0.13834537392481033, 0.10694898922318279, 0.1211777917594245, 0.1276279143114306, 0.14661389007809034, 0.14142761528430872, 0.11969443714497587, 0.13398226206599023, 0.14707641785555184, 0.11689418050769908, 0.0471984606450728, 0.049494500313232624, 0.04680805679550986, 0.042358887859941775, 0.04342842109287542, 0.0, 0.0]] self.hybrid_rec.weights = weights def recommend(self, user_id_array, cutoff=None, remove_seen_flag=True, items_to_compute=None, remove_top_pop_flag=False, remove_CustomItems_flag=False, return_scores=False): if user_id_array in self.target_users: return self.hybrid_rec.recommend(user_id_array=user_id_array, cutoff=cutoff) else: return []
def __init__(self, URM_train, ICM_train, submission=False, verbose=True, seed=1205): super(LinearHybridC002, self).__init__(URM_train, verbose=verbose) self.URM_train = URM_train self.ICM_train = ICM_train self.__rec1 = ItemKNNCBFRecommender(URM_train, ICM_train, verbose=False) self.__rec1_params = { 'topK': 225, 'shrink': 1000, 'similarity': 'cosine', 'normalize': True, 'feature_weighting': 'BM25' } self.__rec2 = ItemKNNCFRecommender(URM_train, verbose=False) self.__rec2_params = { 'topK': 220, 'shrink': 175, 'similarity': 'cosine', 'normalize': False } self.__rec3 = RP3betaRecommender(URM_train, verbose=False) self.__rec3_params = { 'topK': 974, 'alpha': 0.190821920493987, 'beta': 0.001834105482327875, 'normalize_similarity': False } self.__a = self.__b = self.__c = None self.seed = seed self.__submission = submission
class Hybrid104AlphaRecommender(BaseRecommender): """Hybrid104AlphaRecommender recommender""" RECOMMENDER_NAME = "Hybrid104AlphaRecommender" def __init__(self, data: DataObject): super(Hybrid104AlphaRecommender, self).__init__(data.urm_train) self.data = data self.rec1 = RP3betaRecommender(data.urm_train) self.rec1.fit(topK=26, alpha=0.25, beta=0.21) self.rec2 = ItemKNNCFRecommender(data.urm_train) self.rec2.fit(topK=10, shrink=1000, similarity="tanimoto", feature_weighting="BM25") target_users = data.urm_train_users_by_type[4][1] self.target_users = target_users self.hybrid_rec = Hybrid1CXAlphaRecommender(data, recommenders=[self.rec1, self.rec2], recommended_users=target_users, max_cutoff=30) def fit(self): weights1 = [ [1.0, 0.4517179068981683, 0.3979690096061162, 0.4068926692801725, 0.3404408707736778, 0.35438712937353284, 0.3107497990263178, 0.277027821536975, 0.22460270448263392, 0.258293110155029, 0.22565957216308793, 0.1427039025093434, 0.14850612508172897, 0.1427281482083753, 0.1513486708877009, 0.14931902151854687, 0.1717168747463289, 0.0783259533439393, 0.08066358870496233, 0.0799579856421651, 0.06310732697276022, 0.0679217517962877, 0.07689888001915678, 0.06585136121968413, 0.05989375609327328, 0.05668195370281998, 0.06377071839974079, 0.017091307253589913, 0.017276230828121276, 0.012865982715760244], [0.38688356604557783, 0.3653660032353448, 0.30862315365153425, 0.21699342252527684, 0.24954243590406833, 0.204684429683601, 0.11665613023016438, 0.12839454425138505, 0.14122535566771405, 0.1504381157229052, 0.17300383308134096, 0.1309799007170742, 0.1354656505605249, 0.08481274450716023, 0.09302787057145857, 0.09643918642755862, 0.10731710201865315, 0.07003981095966517, 0.06217937411084906, 0.0457095602617101, 0.04370382323931054, 0.050259396725207114, 0.05401448061464968, 0.03742468372661131, 0.038730399329483335, 0.04401751666811602, 0.01793705784582081, 0.020478791947760068, 0.010738842299817633, 0.0] ] self.hybrid_rec.weights = weights1 def recommend(self, user_id_array, cutoff=None, remove_seen_flag=True, items_to_compute=None, remove_top_pop_flag=False, remove_CustomItems_flag=False, return_scores=False): if user_id_array in self.target_users: return self.hybrid_rec.recommend(user_id_array=user_id_array, cutoff=cutoff) else: return []