def run_model(model_name, dataset_name, test_size=0.3, clean=False): print('*' * 70) print('\tThis is %s model trained on %s with test_size = %.2f' % (model_name, dataset_name, test_size)) print('*' * 70 + '\n') model_manager = utils.ModelManager(dataset_name, test_size) try: trainset = model_manager.load_model('trainset') testset = model_manager.load_model('testset') except OSError: ratings = DataSet.load_dataset(name=dataset_name) trainset, testset = DataSet.train_test_split(ratings, test_size=test_size) model_manager.save_model(trainset, 'trainset') model_manager.save_model(testset, 'testset') '''Do you want to clean workspace and retrain model again?''' '''if you want to change test_size or retrain model, please set clean_workspace True''' model_manager.clean_workspace(clean) if model_name == 'UserCF': model = UserBasedCF() elif model_name == 'ItemCF': model = ItemBasedCF() elif model_name == 'Random': model = RandomPredict() elif model_name == 'MostPopular': model = MostPopular() elif model_name == 'UserCF-IIF': model = UserBasedCF(use_iif_similarity=True) elif model_name == 'ItemCF-IUF': model = ItemBasedCF(use_iuf_similarity=True) else: raise ValueError('No model named' + model_name) model.fit(trainset) recommend_test(model, [1, 100, 233, 666, 888]) model.test(testset)
def fit(self, trainset): """ Fit the trainset by calculate movie similarity matrix. :param trainset: train dataset :return: None """ model_manager = utils.ModelManager() try: self.movie_sim_mat = model_manager.load_model( 'movie_sim_mat-iif' if self. use_iuf_similarity else 'movie_sim_mat') self.movie_popular = model_manager.load_model('movie_popular') self.movie_count = model_manager.load_model('movie_count') self.trainset = model_manager.load_model('trainset') print( 'Movie similarity model has saved before.\nLoad model success...\n' ) except OSError: print('No model saved before.\nTrain a new model...') self.movie_sim_mat, self.movie_popular, self.movie_count = \ similarity.calculate_item_similarity(trainset=trainset, use_iuf_similarity=self.use_iuf_similarity) self.trainset = trainset print('Train a new model success.') if self.save_model: model_manager.save_model( self.movie_sim_mat, 'movie_sim_mat-iif' if self.use_iuf_similarity else 'movie_sim_mat') model_manager.save_model(self.movie_popular, 'movie_popular') model_manager.save_model(self.movie_count, 'movie_count') model_manager.save_model(self.trainset, 'trainset') print('The new model has saved success.\n')
def fit(self, trainset): """ Fit the trainset via count movies. :param trainset: train dataset :return: None """ model_manager = utils.ModelManager() try: self.movie_popular = model_manager.load_model('movie_popular') self.movie_count = model_manager.load_model('movie_count') self.trainset = model_manager.load_model('trainset') self.total_movies = model_manager.load_model('total_movies') print( 'RandomPredict model has saved before.\nLoad model success...\n' ) except OSError: print('No model saved before.\nTrain a new model...') self.trainset = trainset self.movie_popular, self.movie_count = similarity.calculate_movie_popular( trainset) self.total_movies = list(self.movie_popular.keys()) print('Train a new model success.') if self.save_model: model_manager.save_model(self.movie_popular, 'movie_popular') model_manager.save_model(self.movie_count, 'movie_count') model_manager.save_model(self.total_movies, 'total_movies') print('The new model has saved success.\n')
def fit(self, trainset): """ Fit the trainset by optimize the P and Q. :param trainset: train dataset :return: None """ self.trainset = trainset self.users_set, self.items_set, self.items_list, self.item_popular, self.items_count = \ self.init_users_items_set(trainset) model_manager = utils.ModelManager() try: self.P = model_manager.load_model(self.model_name + '-P') self.Q = model_manager.load_model(self.model_name + '-Q') print( 'User origin similarity model has saved before.\nLoad model success...\n' ) except OSError: print('No model saved before.\nTrain a new model...') self.init_model(self.users_set, self.items_set, self.K) self.train(self.trainset) print('Train a new model success.') if self.save_model: model_manager.save_model(self.P, self.model_name + '-P') model_manager.save_model(self.Q, self.model_name + '-Q') print('The new model has saved success.\n') return self.P, self.Q
def runModel(model_name, dataset_name, testSize=0.3, clean=False): print('*' * 60) print('This is %s model trained on %s with testSize = %.2f' % (model_name, dataset_name, testSize)) print('*' * 60 + '\n') modelManager = utils.ModelManager(dataset_name, testSize) try: trainset = modelManager.loadModel('trainset') testset = modelManager.loadModel('testset') except OSError: ratings = DataSet.loadDataset(name=dataset_name) trainset, testset = DataSet.splitData(ratings, testSize=testSize) modelManager.saveModel(trainset, 'trainset') modelManager.saveModel(testset, 'testset') modelManager.clearWorkspace(clean) if modelType == 'ItemCF': model = ItemBasedCF(iufSimilarity=True) elif modelType == 'UserCF': model = UserBasedCF(use_iif_similarity=True) model.fit(trainset) recommendTest(model, [1, 100, 233, 666]) model.test(trainset)
def fit(self, trainset): model_manager = utils.ModelManager() try: self.user_sim_mat = model_manager.loadModel( 'user_sim_mat-iif' if self. use_iif_similarity else 'user_sim_mat') self.movie_popular = model_manager.loadModel('movie_popular') self.movie_count = model_manager.loadModel('movie_count') self.trainset = model_manager.loadModel('trainset') print( 'User origin similarity model has saved before.\nLoad model success...\n' ) except OSError: print('No model saved before.\nTrain a new model...') self.user_sim_mat, self.movie_popular, self.movie_count = \ UserSimilarity.calculate_user_similarity(trainset=trainset, use_iif_similarity=self.use_iif_similarity) self.trainset = trainset print('Train a new model success.') if self.save_model: model_manager.saveModel( self.user_sim_mat, 'user_sim_mat-iif' if self.use_iif_similarity else 'user_sim_mat') model_manager.saveModel(self.movie_popular, 'movie_popular') model_manager.saveModel(self.movie_count, 'movie_count') print('The new model has saved success.\n')
def fit(self, trainset): modelManager = utils.ModelManager() try: self.simMat = modelManager.loadModel( 'simMat-iif' if self.iufSimilarity else 'simMat') self.moviePopular = modelManager.loadModel('moviePopular') self.movieCount = modelManager.loadModel('movieCount') self.trainset = modelManager.loadModel('trainset') except OSError: print( 'No model for the given description saved before.\nTraining a new model...' ) self.simMat, self.moviePopular, self.movieCount = \ ItemSimilarity.calculateItemSimilarity(trainset=trainset, iufSimilarity=self.iufSimilarity) self.trainset = trainset if self.saveModel: modelManager.saveModel( self.simMat, 'simMat-iif' if self.iufSimilarity else 'simMat') modelManager.saveModel(self.moviePopular, 'moviePopular') modelManager.saveModel(self.movieCount, 'movieCount') modelManager.saveModel(self.trainset, 'trainset')