EvaluatedAlgorithm.py
EvaluatedAlgorithm.py
这个python文件是一个评估算法的文件。
用到的第三方库如下:
AlgoBase是surprise中的库,具体功能可以点击去官方文档了解。
from RecommendationMetrics import RecommendationMetrics
from surprise import AlgoBase
init函数
初始化函数,传入的参数为algorithm和name
def __init__(self,algorithm,name):
self.algorithm=algorithm
self.name=name
GetName函数
获取name的函数
def GetName(self):
return self.name
GetAlgorithm函数
获取algorithm的函数
def GetAlgorithm(self):
return self.algorithm
Evaluate函数
评估函数,将数据的准确率计算(MAE和RMSE),用留一法计算前十电影预测的命中率和ARHR,最后则是计算出多样性和新颖性。
def Evaluate(self,evaluationData, doTopN, n=10, verbose = True):
metrics={}
#计算MAE和RMSE
if (verbose):
print('评估准确率...')
self.algorithm.fit(evaluationData.GetTrainSet())
predictions = self.algorithm.test(evaluationData.GetTestSet())
#这里的准确率就调用RecommendationMetrics中写好的函数计算
metrics["MAE"] = RecommendationMetrics.MAE(predictions)
metrics["RMSE"] = RecommendationMetrics.RMSE(predictions)
if (doTopN):
#如果doTopN存在,则用留一法再建立test去测试
if (verbose):
print("用留一法评估TopN...")
self.algorithm.fit(evaluationData.GetLOOCVTrainSet())
leftOutPredictions = self.algorithm.test(evaluationData.GetLOOCVTestSet())
#给不在训练集中的用户测试
allPredictions = self.algorithm.test(evaluationData.GetLOOCVAntiTestSet())
#计算每个用户前十的记录
topNPredicted = RecommendationMetrics.GetTopN(allPredictions,n)
if (verbose):
print("计算命中率的排名和指标的排名...")
#检查我们建议用户实际评分的频率
metrics["HR"] = RecommendationMetrics.HitRate(topNPredicted,leftOutPredictions)
metrics["ARHR"] = RecommendationMetrics.AvergeReciprocalHitRank(topNPredicted,leftOutPredictions)
if (verbose):
print("分析多样性和新颖性")
#计算多样性和新颖性
metrics["Diversity"] = RecommendationMetrics.Diversity(topNPredicted,evaluationData.GetSimilarities())
metrics["Novelty"] = RecommendationMetrics.Novelty(topNPredicted,evaluationData.GetPopularityRankings())
if (verbose):
print('分析完成!')
return metrics
总结
这个python文件没啥复杂的地方,就是调用RecommendationMetrics.py这个文件里的函数,进行评估分析。