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')
Exemple #3
0
 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
Exemple #5
0
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)
Exemple #6
0
 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')
Exemple #7
0
    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')