Exemplo n.º 1
0
 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))
Exemplo n.º 2
0
 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)