推荐系统常用评估指标
RMSE
加大了对预测不准的用户物品评分的惩罚。
# records[i] = [u,i,rui,pui] # rui是用户u对物品i的实际评分,pui是用户u对物品i的预测评分
def rmse(records):
"""计算均方根误差"""
return math.sqrt(sum([(rui-pui)*(rui-pui) for u,i,rui,pui in records])/len(records))
MAE
如果评分系统是基于整数建立的,对预测结果取整会降低MAE的误差。
# records[i] = [u,i,rui,pui] # rui是用户u对物品i的实际评分,pui是用户u对物品i的预测评分
def mae(records):
"""计算平均绝对误差"""
return math.sqrt(sum([abs(rui-pui) for u,i,rui,pui in records])/len(records))
Precision(准确率)&Recall(召回率)
其中是用户在训练集上的行为给用户作出的推荐列表。
其中是用户在测试集上的行为给用户作出的推荐列表。
def precision_recall(test, N):
"""
计算准确率和召回率
test:
N: 推荐列表长度
"""
hit = 0
n_recall = 0
n_precision = 0
for user, item in test.items():
rank = Recommend(user, N)
hit += lenn(rank & itmes)
n_recall += len(items)
n_precision += N
return [hit/(1.*n_recall), hit/(1.*n_precision)]
覆盖率
覆盖率描述一个推荐系统对物品长尾的发掘能力。
其中是推荐系统给每个用户推荐一个长度为的物品列表。
信息熵
信息熵可以定义覆盖率。
其中是物品的流行度除以所有物品流行度之和。
基尼系数
基尼系数可以定义覆盖率。基尼系数也可以查看推荐系统算法是否具有马太效应(流行更流行,不流行更不流行)。
其中是按照物品流行度从小到大排序的物品列表中的第个物品。
def gini_index(p):
"""计算基尼系数"""
j = 1
n = len(p)
G = 0
for item, weight in sorted(p.items(), key=itemgetter(1)):
G += (2*j-n-1)*weight
return G / float(n-1)
多样性
多样性描述了推荐列表中物品两两之间的不相似性。
其中为用户的推荐列表,定义了物品和物品之间的相似度。
推荐系统的整体多样性定义为:
获取各种评测指标的途径
- | 离线实验 | 问卷调差 | 在线实验 |
---|---|---|---|
用户满意度 | x | y | o |
预测准确度 | y | y | x |
覆盖率 | y | y | y |
多样性 | o | y | o |
新颖性 | o | y | o |
惊喜度 | x | y | x |
长尾分布
其中表示对个物品产生行为的用户数;表示被个用户产生过行为的物品数。
来源:CSDN
作者:小猿取经
链接:https://blog.csdn.net/weixin_46032351/article/details/104626050