UITimateBakeOff.py
这个python文件是结合了Content-based,User-Based,Item-Based,SVD,SVD++,Hybrid这几个算法的混合算法系统测试。
下面是这个python文件使用的第三方库,但ContentBasedAlgorithm,Evaluator,HybridAlgorithm这三个库是自己写的python文件。
from MovieLens import MovieLens
from surprise import SVD, SVDpp
from Evaluator import Evaluator
from ContentBasedAlgorithm import ContentBasedAlgorithm
from surprise import KNNBasic
import numpy as np
import random
from time import time
from surprise import NormalPredictor
from HybridAlgorithm import HybridAlgorithm
from surprise.model_selection import GridSearchCV
import random
import numpy as np
##LoadMovieLensData函数
这是加载数据集的函数,返回数据集和电影分数的排名
def LoadMovieLensData():
ml = MovieLens()
print('Loading movie ratings..')
data = ml.loadMovieLensDataset()
#计算相似度和新颖性
rankings = ml.getPopularityRanks()
return (ml,data,rankings)
其他运行代码
将经典算法运行并添加到混合算系统当中,再测评混合算法系统。
#这两个种子是为了使生成的随机数相同
np.random.seed(0)
random.seed(0)
# 加载程序算法的通用数据集
(ml, evaluationData, rankings) = LoadMovieLensData()
t0=time()
evaluator = Evaluator(evaluationData, rankings)
#基于电影去预测电影
ContentKNN = ContentBasedAlgorithm()
evaluator.AddAlgorithm(ContentKNN, "ContentBased")
#基于用户去预测
sim_options_user = {'name':'cosine','user_based':True}
userKNN = KNNBasic(sim_options = sim_options_user)
evaluator.AddAlgorithm(userKNN,"UserBased")
#基于项目预测
sim_options_item = {'name':'cosine','user_based':False}
itemKNN = KNNBasic(sim_options = sim_options_item)
evaluator.AddAlgorithm(itemKNN,"ItemBased")
# 使用SVD算法预测
SVD = SVD()
evaluator.AddAlgorithm(SVD, "SVD")
# 使用SVD++算法预测
SVDPlusPlus = SVDpp()
evaluator.AddAlgorithm(SVDPlusPlus, "SVD++")
#使用Hybrid算法预测
#随机并且基于内容的预测
Random = NormalPredictor()
Hybrid = HybridAlgorithm([Random, ContentKNN], [0.5, 0.5])
evaluator.AddAlgorithm(Hybrid,'Hybrid')
evaluator.Evaluate(True)
evaluator.SampleTopNRecs(ml)
#终极算法的时间
tt=time()-t0
print("Ultimate Algorithm bake-off in %s seconds" % round(tt,3))