EvaluationData.py

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个推荐者用留一法再划分训练集和测试集,用余弦相似度来计算多样性,用数据集以外的测试集验证评估数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值