07-01 推荐系统常用度量指标


更新、更全的《机器学习》的更新网站,更有python、go、数据结构与算法、爬虫、人工智能教学等着你:https://www.cnblogs.com/nickchen121/p/11686958.html

推荐系统常用评估指标

一、RMSE

加大了对预测不准的用户物品评分的惩罚。

[ ext{RMSE}=sqrtfrac{sum_{u,iin{T}}(r_{ui}-hat{r_{ui}})^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的误差。

[ ext{MAE}=frac{sum_{u,iin{T}}|r_{ui}-hat{r_{ui}}|}{|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(召回率)

[ ext{Precision}=frac{sum_{uin{U}}|R(u)igcap{T(u)}|}{sum_{uin{U}}|R(u)|} ]

其中(R(u))是用户在训练集上的行为给用户作出的推荐列表。

[ ext{Recall}=frac{sum_{uin{U}}|R(u)igcap{T(u)}|}{sum_{uin{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)]

四、覆盖率

覆盖率描述一个推荐系统对物品长尾的发掘能力。

[ ext{Coverate}=frac{|igcup_{uin{U}}R(u)|}{I} ]

其中(R(u))是推荐系统给每个用户推荐一个长度为(N)的物品列表。

五、信息熵

信息熵可以定义覆盖率。

[H=sum_{i=1}^np(i)log{p(i)} ]

其中(p(i))是物品(i)的流行度除以所有物品流行度之和。

六、基尼系数

基尼系数可以定义覆盖率。基尼系数也可以查看推荐系统算法是否具有马太效应(流行更流行,不流行更不流行)。

[G=frac{1}{n-1}sum_{j=1}^n(2j-n-1)p(i_j) ]

其中(i_j)是按照物品流行度(p)从小到大排序的物品列表中的第(j)个物品。

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)

七、多样性

多样性描述了推荐列表中物品两两之间的不相似性。

[ ext{Diversity}(R(u))=1-frac{sum_{i,jin{R(u)},i eq{j}}s(i,j)}{frac{1}{2}|R(u)|(|R(u)|-1)} ]

其中(R(u))为用户(u)的推荐列表,(s(i,j)in[0,1])定义了物品(i)和物品(j)之间的相似度。

推荐系统的整体多样性定义为:

[ ext{Diversity}=frac{1}{|U|}sum_{uin{U}} ext{Diversity}(R(u)) ]

八、获取各种评测指标的途径

- 离线实验 问卷调差 在线实验
用户满意度 x y o
预测准确度 y y x
覆盖率 y y y
多样性 o y o
新颖性 o y o
惊喜度 x y x

九、长尾分布

[f_i(k)=alpha_ik^{eta_i} \ f_u(k)=alpha_uk^{eta_u} ]

其中(f_u(k))表示对(k)个物品产生行为的用户数;(f_i(k))表示被(k)个用户产生过行为的物品数。

原文地址:https://www.cnblogs.com/nickchen121/p/11686767.html