Python代码实现推荐算法评估:F1得分计算
这段代码实现了一个评估推荐算法的函数'printF1Score',输入参数为一个推荐列表'recommend',其中每个元素为一个(uid, bid)的二元组,表示用户uid被推荐购买了商品bid。该函数读取实际的购买情况(从文件'./data/result.txt'中读取),并将预测结果格式调整为字典'R',其中每个元素为一个(uid, [bid1, bid2, ...])的二元组,表示用户uid被推荐购买了商品列表[bid1, bid2, ...]。然后该函数计算推荐数量以及命中数量,并输出精确度、召回率和F1得分。其中,精确度定义为命中数除以预测总数,召回率定义为命中数除以实际购买的商品数,F1得分定义为精确度与召回率的调和平均数。如果实际购买的商品数为0或命中数为0,则F1得分为0。
def printF1Score(recommend):
predict_num = 0
hit_num = 0
brand = 0
# 读取实际的购买情况
f = open("./data/result.txt", "r")
result = {}
lines = f.readlines()
for index, item in enumerate(lines):
uid, bid = item.strip("\n").split("\t")
result[uid] = set(bid.split(","))
brand += len(result[uid])
f.close()
# 调整预测结果格式
R = {}
for uid, bid in recommend:
R.setdefault(uid, [])
if bid not in R[uid]:
R[uid].append(bid)
# 计算推荐数量以及命中数量
for uid, bid_list in R.items():
predict_num += len(bid_list)
if uid in result:
for bid in bid_list:
if bid in result[uid]:
hit_num += 1
# 输出结果
print u"执行时间: %s" % datetime.datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d %H:%M:%S')
print u"预测总数: %d" % predict_num
print u"命中数量: %d" % hit_num
if brand == 0 or hit_num == 0:
print u"F1得分: 0"
else:
precision = float(hit_num)/predict_num
recall = float(hit_num)/brand
print u"精确度: %.2f%%" % round(100*precision, 2)
print u"召回率: %.2f%%" % round(100*recall, 2)
print u"F1得分: %.2f%%" % round(100*2*precision*recall/(precision+recall), 2)
该代码首先读取实际购买数据,并存储在字典'result'中。然后,代码将预测结果格式调整为字典'R',方便后续计算。最后,代码计算了推荐数量、命中数量、精确度、召回率和F1得分,并输出结果。
原文地址: https://www.cveoy.top/t/topic/oY1W 著作权归作者所有。请勿转载和采集!