def setCFtype(self, cftype):
        self.CFtype = cftype
        foldername, filename = "Models", self.CFtype + "_CFModel.pkl"

        if (self.fitModeAtInitialize == True):
            if (AlgoBase.checkPathExists(self, foldername, filename) == True):
                self.preds_df = AlgoBase.loadModel(self, foldername, filename)
            else:
                self.fit(similarity="cosine", CFtype="user")
                self.fit(similarity="cosine", CFtype="item")
 def fit(self, similarity="cosine"):     
     try:
         corpus = self.BooksM[self.BooksM.ISBN.isin(self.RatingsM.ISBN)]["Book-Title"].tolist()
         vectorizer = TfidfVectorizer()
         X = vectorizer.fit_transform(corpus)
         self.X_df = pd.DataFrame(X.todense(), columns = vectorizer.get_feature_names(), index=corpus)
         self.Similarity_Matrix = self.Compute_Similarity(similarity)
         AlgoBase.saveModel(self, self.Similarity_Matrix, "Models", "TfidfModel.pkl")
     except Exception as e:
         print(e)
    def __init__(self, dsReader, fitModeAtInitialize=True):
        AlgoBase.__init__(self, dsReader, fitModeAtInitialize)
        self.RECOMMENDER_NAME = "SVD Recommender"

        foldername, filename = "Models", "SVDModel.pkl"

        if (self.fitModeAtInitialize == True):
            if (AlgoBase.checkPathExists(self, foldername, filename) == True):
                self.preds_df = AlgoBase.loadModel(self, foldername, filename)
            else:
                self.fit()
    def __init__(self, dsReader, fitModeAtInitialize=True):
        AlgoBase.__init__(self, dsReader, fitModeAtInitialize)
        self.RECOMMENDER_NAME = "TF=IDF Recommender"

        foldername, filename = "Models", "TfidfModel.pkl"

        if(self.fitModeAtInitialize == True):
            if(AlgoBase.checkPathExists(self, foldername, filename) == True):
                self.similarityM = AlgoBase.loadModel(self, foldername, filename)
            else:
                self.fit()
    def fit(self, similarity="cosine", CFtype="user"):

        self.similarity = similarity
        self.CFtype = CFtype
        self.Similarity_Matrix = self.Compute_Similarity(
            self.similarity, self.train, self.CFtype)
        self.user_prediction = self.predict(self.train, self.Similarity_Matrix,
                                            self.CFtype)
        self.preds_df = pd.DataFrame(self.user_prediction,
                                     columns=self.URM.columns,
                                     index=self.URM.index)
        AlgoBase.saveModel(self, self.preds_df, "Models",
                           self.CFtype + "_CFModel.pkl")
Пример #6
0
    def __init__(self, dsReader, fitModeAtInitialize=True):
        AlgoBase.__init__(self, dsReader, fitModeAtInitialize)
        self.RECOMMENDER_NAME = "Embeddings Recommender"

        # Define N and P - number of users and books respectively
        self.N = len(self.RatingsM["User-ID"].unique().tolist())
        self.P = len(self.RatingsM["ISBN"].unique().tolist())

        foldername, filename = "Models", "EMBModel.h5"
        self.filepath = os.path.dirname(os.path.abspath(__file__))
        self.filepath = self.filepath + "/" + foldername + "/" + filename

        if (self.fitModeAtInitialize == True):
            if (AlgoBase.checkPathExists(self, foldername, filename) == True):
                #self.model = AlgoBase.loadModel(self, foldername, filename)
                self.model = tf.keras.models.load_model(self.filepath)
            else:
                self.fit()
    def fit(self):

        U, s, Vt = svds(self.train, k=100)

        sigma = np.diag(s)

        # Check number of terms of s to include to capture at least 90% of the information
        sum = 0
        tot = s.sum()
        ctr = 0
        while (sum < 0.9):
            sum += s[ctr] / tot
            ctr += 1
        print("K: {}, Cumulative Variance: {}".format(ctr, sum))

        self.all_user_predicted_ratings = np.dot(np.dot(U, sigma), Vt)

        self.preds_df = pd.DataFrame(self.all_user_predicted_ratings,
                                     columns=self.URM.columns,
                                     index=self.URM.index)

        AlgoBase.saveModel(self, self.preds_df, "Models", "SVDModel.pkl")
    def compareActualPredictedRatings(self, user_id, userRecBookList):
        userRecBookList_ISBNs = list(userRecBookList.keys())

        # Get and sort the user's predictions
        sorted_user_predictions = self.preds_df.loc[user_id].sort_values(
            ascending=False)
        predictedRatings = pd.DataFrame(sorted_user_predictions).reset_index()

        # Get predicted ratings for user recommended booklist
        predictedRatings = predictedRatings[predictedRatings["ISBN"].isin(
            userRecBookList_ISBNs)].rename(
                columns={user_id: 'Predicted-Rating'})

        # Get actual ratings for user recommended booklist
        actualRatings = self.dsReader.getRatingsByISBNs(
            user_id, userRecBookList_ISBNs)

        # Merge both predicted and actual ratings
        allRatings = actualRatings.merge(predictedRatings,
                                         how='left',
                                         left_on='ISBN',
                                         right_on='ISBN')

        # Get book details based on ISBN
        allRatings = allRatings.merge(
            self.BooksM[['ISBN', 'Book-Title', 'Book-Author']],
            how='left',
            left_on='ISBN',
            right_on='ISBN')
        allRatings = allRatings[[
            'ISBN', 'Book-Title', 'Book-Author', 'Predicted-Rating',
            'Book-Rating'
        ]]

        # Evaluate RMSE metric for predicted/actual ratings
        predicted = np.asarray(allRatings["Predicted-Rating"].tolist())
        actual = np.asarray(allRatings["Book-Rating"].tolist())
        eval_res = AlgoBase.Evaluate(self, predicted, actual, ["rmse"])

        return allRatings, eval_res
 def __init__(self, dsReader, fitModeAtInitialize=True):
     AlgoBase.__init__(self, dsReader, fitModeAtInitialize)
     self.RECOMMENDER_NAME = "User-Item Based Collaborative Filtering Recommender"