def main(self): user_ratings_train = self.load_data(self.train_data_path) self.load_test_data(self.test_data_path) for u in range(self.user_count): for item in range(self.item_count): if int(self.test_data[u][item]) == 1: self.test[u * self.item_count + item] = 1 else: self.test[u * self.item_count + item] = 0 for i in range(self.user_count * self.item_count): self.test[i] = int(self.test[i]) # training for i in range(self.train_count): if random.randint(1, i + 2) > i: self.set_up() self.train(user_ratings_train) predict_matrix = self.predict(self.U, self.V) # prediction self.predict_ = predict_matrix.getA().reshape(-1) self.predict_ = pre_handel(user_ratings_train, self.predict_, self.item_count) auc_score = roc_auc_score(self.test, self.predict_) print('AUC:', auc_score) # Top-K evaluation str( scores.topK_scores(self.test, self.predict_, 20, self.user_count, self.item_count))
def main(self): user_ratings_train = self.load_data( self.train_data_path ) #将训练集变为{u1:{i_1,i_3,...},u2:{i_2,i_6,...},...}的形式 self.load_test_data(self.test_data_path) #将测试集数据以二维矩阵的形式存在test_data中 for u in range(self.user_count): for item in range(self.item_count): if int(self.test_data[u][item]) == 1: #对于存在于测试集的物品在一维test中标记为1 self.test[u * self.item_count + item] = 1 else: #不存在标记为0 self.test[u * self.item_count + item] = 0 # training for i in range(self.train_count): #迭代次数 self.train(user_ratings_train) predict_matrix = self.predict(self.U, self.V) # prediction 模型评价 self.predict_ = predict_matrix.getA().reshape(-1) self.predict_ = pre_handel(user_ratings_train, self.predict_, self.item_count) auc_score = roc_auc_score(self.test, self.predict_) print('AUC:', auc_score) # Top-K evaluation 自定义模型评价 str( scores.topK_scores(self.test, self.predict_, 5, self.user_count, self.item_count))
def main(self): user_ratings_train = self.load_data(self.train_data_path) self.load_test_data(self.test_data_path) tbar_1 = tqdm(total=self.user_count * self.item_count) for u in range(self.user_count): for item in range(self.item_count): tbar_1.update(1) if int(self.test_data[u][item]) == 1: self.test[u * self.item_count + item] = 1 else: self.test[u * self.item_count + item] = 0 tbar_1.close() # training max_re_count = 30 tbar_2 = tqdm(total=self.train_count * max_re_count) wb = Workbook() sheet = wb.active sheet.title = "New Shit" re_count = 3 for t in range(max_re_count): for i in range(self.train_count): if random.randint(1, i + 2) > i: self.set_up() tbar_2.update(1) self.train(user_ratings_train) predict_matrix = self.predict(self.U, self.V) # prediction self.predict_ = predict_matrix.getA().reshape(-1) self.predict_ = pre_handel(user_ratings_train, self.predict_, self.item_count) auc_score = roc_auc_score(self.test, self.predict_) print('AUC:', auc_score) # Top-K evaluation # str(scores.topK_scores(self.test, self.predict_, 5, self.user_count, self.item_count)) MAP, MRR, Prec, Rec, F1, NDCG, l_call = scores.topK_scores( self.test, self.predict_, re_count, self.user_count, self.item_count) sheet["A%d" % (t + 1)].value = re_count sheet["B%d" % (t + 1)].value = auc_score sheet["C%d" % (t + 1)].value = MAP sheet["D%d" % (t + 1)].value = MRR sheet["E%d" % (t + 1)].value = Prec sheet["F%d" % (t + 1)].value = Rec sheet["G%d" % (t + 1)].value = F1 sheet["H%d" % (t + 1)].value = NDCG sheet["I%d" % (t + 1)].value = l_call if re_count > 30: break re_count += 1 # self.U = np.random.rand(self.user_count, self.latent_factors) * 0.01 self.U = np.loadtxt("U.txt") # self.V = np.random.rand(self.item_count, self.latent_factors) * 0.01 self.V = np.loadtxt("V.txt") # self.biasV = np.random.rand(self.item_count) * 0.01 self.biasV = np.loadtxt("biasV.txt") wb.save("MPR各评价标准.xlsx") wb.close() tbar_2.close()
def main(self): user_ratings_train = self.load_data(self.train_data_path) self.load_test_data(self.test_data_path) tbar_1 = tqdm(total=self.user_count * self.item_count) for u in range(self.user_count): for item in range(self.item_count): tbar_1.update(1) if int(self.test_data[u][item]) == 1: self.test[u * self.item_count + item] = 1 else: self.test[u * self.item_count + item] = 0 tbar_1.close() # training tbar_2 = tqdm(total=self.train_count) re_count = 5 for i in range(self.train_count): if random.randint(1, i + 2) > i: self.set_up() tbar_2.update(1) self.train(user_ratings_train) predict_matrix = self.predict(self.U, self.V) # prediction self.predict_ = predict_matrix.getA().reshape(-1) self.predict_ = pre_handel(user_ratings_train, self.predict_, self.item_count) auc_score = roc_auc_score(self.test, self.predict_) print('AUC:', auc_score) # Top-K evaluation # str(scores.topK_scores(self.test, self.predict_, 5, self.user_count, self.item_count)) MAP, MRR, Prec, Rec, F1, NDCG, l_call = scores.topK_scores( self.test, self.predict_, re_count, self.user_count, self.item_count) tbar_2.close()
def main(self): user_ratings_train = self.load_data(self.train_data_path) self.load_test_data(self.test_data_path) tbar_1 = tqdm(total=self.user_count * self.item_count) for u in range(self.user_count): for item in range(self.item_count): tbar_1.update(1) if int(self.test_data[u][item]) == 1: self.test[u * self.item_count + item] = 1 else: self.test[u * self.item_count + item] = 0 re_count = 30 # BPR加噪音 # self.U = np.loadtxt("self.U.txt") # self.V = np.loadtxt("self.V.txt") # MBPR加噪音 self.U = np.loadtxt("self.U_MBPR.txt") self.V = np.loadtxt("self.V_MBPR.txt") # 此处可加噪音 noise_U = np.random.rand(self.U.shape[0], self.U.shape[1]) * 1.0 noise_V = np.random.rand(self.V.shape[0], self.V.shape[1]) * 1.0 self.U = self.U + noise_U self.V = self.V + noise_V predict_matrix = self.predict(self.U, self.V) # prediction self.predict_ = predict_matrix.getA().reshape(-1) self.predict_ = pre_handel(user_ratings_train, self.predict_, self.item_count) auc_score = roc_auc_score(self.test, self.predict_) print('AUC:', auc_score) # Top-K evaluation MAP, MRR, Prec, Rec, F1, NDCG, l_call = scores.topK_scores( self.test, self.predict_, re_count, self.user_count, self.item_count)