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")
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"