EvaluationData.py
这个python文件是用来评估数据的。
这个python文件用到的第三方库如下:
from surprise.model_selection import train_test_split
from surprise.model_selection import LeaveOneOut
from surprise import KNNBaseline
init函数
这个初始化函数输入参数为数据和最受欢迎的排名,使用KNNBasleine算法创建用于预测的训练和反测试集,随机用3/4的数据为训练集,1/4的数据为测试集,还是对前n名推荐者用留一法交叉验证,建立预测的反测试集,计算相似度使用余弦相似度测量多样性。
def __init__(self,data,popularityRanking):
self.ranking = popularityRanking
#创建训练集和反测试集
self.fullTrainingSet = data.build_full_trainset()
self.fullAntiTestSet = self.fullTrainingSet.build_anti_testset()
#运用随机种子来划分数据集,3/4为训练集,1/4为测试集
self.trainset, self.testset = train_test_split(data, test_size=0.25,random_state=1)
#对前n名推荐者再使用留一法交叉验证
LOOCV=LeaveOneOut(n_splits=1, random_state=1)
for train,test in LOOCV.split(data):
self.LOOCVTrain = train
self.LOOCVTest = test
#对反测试集进行预测
self.LOOCVAntiTestSet = self.LOOCVTrain.build_anti_testset()
#用余弦相似度测量多样性
sim_options = {'name': 'cosine', 'user_based': False}
self.simsAlgo = KNNBaseline(sim_options=sim_options)
self.simsAlgo.fit(self.fullTrainingSet)
GetAntiTestSetForUser函数
使用训练集之外的用户评分测试,缺少的评分使用了平均填充。
def GetAntiTestSetForUser(self,testSubject):
trainset = self.fullTrainingSet
#计算均值fill,作为空值的填充值
fill = trainset.global_mean
anti_testSet = []
user = trainset.to_inner_uid(str(testSubject))
user_items = set([j for (j,_) in trainset.ur[user]])
anti_testSet += [(trainset.to_raw_uid(user),trainset.to_raw_iid(i),fill) for i in trainset.all_items() if i not in user_items]
return anti_testSet
其他函数
其他函数都是返回自身,也就是init函数输入啥就是啥,所以就放到一块了。
GetFullTrainSet函数返回self.fullTrainingSet
GetFullAntiTestSet函数返回self.fullAntiTestSet
GetTrainSet函数返回self.trainset
GetTestSet函数返回self.testset
GetLOOCVTrainSet函数返回self.LOOCVTrain
GetLOOCVTestSet函数返回self.LOOCVTest
GetLOOCVAntiTestSet函数返回self.LOOCVAntiTestSet
GetSimilarities函数返回self.simsAlgo
GetPopularityRankings函数返回self.ranking
def GetFullTrainSet(self):
return self.fullTrainingSet
def GetFullAntiTestSet(self):
return self.fullAntiTestSet
def GetTrainSet(self):
return self.trainset
def GetTestSet(self):
return self.testset
def GetLOOCVTrainSet(self):
return self.LOOCVTrain
def GetLOOCVTestSet(self):
return self.LOOCVTest
def GetLOOCVAntiTestSet(self):
return self.LOOCVAntiTestSet
def GetSimilarities(self):
return self.simsAlgo
def GetPopularityRankings(self):
return self.ranking
总结
这个python文件用来将数据评估,运用KNN来预测,再将前n个推荐者用留一法再划分训练集和测试集,用余弦相似度来计算多样性,用数据集以外的测试集验证评估数据。