07-01 推荐系统常用度量指标
目录
更新、更全的《机器学习》的更新网站,更有python、go、数据结构与算法、爬虫、人工智能教学等着你:https://www.cnblogs.com/nickchen121/p/11686958.html
推荐系统常用评估指标
一、RMSE
加大了对预测不准的用户物品评分的惩罚。
RMSE=∑u,i∈T(rui−rui^)2|T|−−−−−−−−−−−−−−−√RMSE=∑u,i∈T(rui−rui^)2|T|
# 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的误差。
MAE=∑u,i∈T|rui−rui^||T|MAE=∑u,i∈T|rui−rui^||T|
# 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(召回率)
Precision=∑u∈U|R(u)⋂T(u)|∑u∈U|R(u)|Precision=∑u∈U|R(u)⋂T(u)|∑u∈U|R(u)|
其中R(u)R(u) 是用户在训练集上的行为给用户作出的推荐列表。
Recall=∑u∈U|R(u)⋂T(u)|∑u∈U|T(u)|Recall=∑u∈U|R(u)⋂T(u)|∑u∈U|T(u)|
其中T(u)T(u) 是用户在测试集上的行为给用户作出的推荐列表。
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)]
四、覆盖率
覆盖率描述一个推荐系统对物品长尾的发掘能力。
Coverate=|⋃u∈UR(u)|ICoverate=|⋃u∈UR(u)|I
其中R(u)R(u) 是推荐系统给每个用户推荐一个长度为NN 的物品列表。
五、信息熵
信息熵可以定义覆盖率。
H=∑i=1np(i)logp(i)H=∑i=1np(i)logp(i)
其中p(i)p(i) 是物品ii 的流行度除以所有物品流行度之和。
六、基尼系数
基尼系数可以定义覆盖率。基尼系数也可以查看推荐系统算法是否具有马太效应(流行更流行,不流行更不流行)。
G=1n−1∑j=1n(2j−n−1)p(ij)G=1n−1∑j=1n(2j−n−1)p(ij)
其中ijij 是按照物品流行度pp 从小到大排序的物品列表中的第jj 个物品。
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)
七、多样性
多样性描述了推荐列表中物品两两之间的不相似性。
Diversity(R(u))=1−∑i,j∈R(u),i≠js(i,j)12|R(u)|(|R(u)|−1)Diversity(R(u))=1−∑i,j∈R(u),i≠js(i,j)12|R(u)|(|R(u)|−1)
其中R(u)R(u) 为用户uu 的推荐列表,s(i,j)∈[0,1]s(i,j)∈[0,1] 定义了物品ii 和物品jj 之间的相似度。
推荐系统的整体多样性定义为:
Diversity=1|U|∑u∈UDiversity(R(u))Diversity=1|U|∑u∈UDiversity(R(u))
八、获取各种评测指标的途径
- | 离线实验 | 问卷调差 | 在线实验 |
---|---|---|---|
用户满意度 | x | y | o |
预测准确度 | y | y | x |
覆盖率 | y | y | y |
多样性 | o | y | o |
新颖性 | o | y | o |
惊喜度 | x | y | x |
九、长尾分布
fi(k)=αikβifu(k)=αukβufi(k)=αikβifu(k)=αukβu
其中fu(k)fu(k) 表示对kk 个物品产生行为的用户数;fi(k)fi(k) 表示被kk 个用户产生过行为的物品数。