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

推荐系统常用评估指标

在这里插入图片描述

RMSE

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

RMSE = ∑ u , i ∈ T ( r u i − r u i ^ ) 2 ∣ T ∣ \text{RMSE}=\sqrt\frac{\sum_{u,i\in{T}}(r_{ui}-\hat{r_{ui}})^2}{|T|} RMSE=Tu,iT(ruirui^)2

# 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 ∣ r u i − r u i ^ ∣ ∣ T ∣ \text{MAE}=\frac{\sum_{u,i\in{T}}|r_{ui}-\hat{r_{ui}}|}{|T|} MAE=Tu,iTruirui^

# 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 ) ∣ \text{Precision}=\frac{\sum_{u\in{U}}|R(u)\bigcap{T(u)}|}{\sum_{u\in{U}}|R(u)|} Precision=uUR(u)uUR(u)T(u)
其中 R ( u ) R(u) R(u)是用户在训练集上的行为给用户作出的推荐列表。

Recall = ∑ u ∈ U ∣ R ( u ) ⋂ T ( u ) ∣ ∑ u ∈ U ∣ T ( u ) ∣ \text{Recall}=\frac{\sum_{u\in{U}}|R(u)\bigcap{T(u)}|}{\sum_{u\in{U}}|T(u)|} Recall=uUT(u)uUR(u)T(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 ∈ U R ( u ) ∣ I \text{Coverate}=\frac{|\bigcup_{u\in{U}}R(u)|}{I} Coverate=IuUR(u)
其中 R ( u ) R(u) R(u)是推荐系统给每个用户推荐一个长度为 N N N的物品列表。

信息熵

  信息熵可以定义覆盖率。

H = ∑ i = 1 n p ( i ) log ⁡ p ( i ) H=\sum_{i=1}^np(i)\log{p(i)} H=i=1np(i)logp(i)
其中 p ( i ) p(i) p(i)是物品 i i i的流行度除以所有物品流行度之和。

基尼系数

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

G = 1 n − 1 ∑ j = 1 n ( 2 j − n − 1 ) p ( i j ) G=\frac{1}{n-1}\sum_{j=1}^n(2j-n-1)p(i_j) G=n11j=1n(2jn1)p(ij)
其中 i j i_j ij是按照物品流行度 p p p从小到大排序的物品列表中的第 j j 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)

多样性

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

Diversity ( R ( u ) ) = 1 − ∑ i , j ∈ R ( u ) , i ≠ j s ( i , j ) 1 2 ∣ R ( u ) ∣ ( ∣ R ( u ) ∣ − 1 ) \text{Diversity}(R(u))=1-\frac{\sum_{i,j\in{R(u)},i\neq{j}}s(i,j)}{\frac{1}{2}|R(u)|(|R(u)|-1)} Diversity(R(u))=121R(u)(R(u)1)i,jR(u),i=js(i,j)
其中 R ( u ) R(u) R(u)为用户 u u u的推荐列表, s ( i , j ) ∈ [ 0 , 1 ] s(i,j)\in[0,1] s(i,j)[0,1]定义了物品 i i i和物品 j j j之间的相似度。

推荐系统的整体多样性定义为:
Diversity = 1 ∣ U ∣ ∑ u ∈ U Diversity ( R ( u ) ) \text{Diversity}=\frac{1}{|U|}\sum_{u\in{U}}\text{Diversity}(R(u)) Diversity=U1uUDiversity(R(u))

获取各种评测指标的途径

-离线实验问卷调差在线实验
用户满意度xyo
预测准确度yyx
覆盖率yyy
多样性oyo
新颖性oyo
惊喜度xyx

长尾分布

f i ( k ) = α i k β i f u ( k ) = α u k β u f_i(k)=\alpha_ik^{\beta_i} \\ f_u(k)=\alpha_uk^{\beta_u} fi(k)=αikβifu(k)=αukβu
其中 f u ( k ) f_u(k) fu(k)表示对 k k k个物品产生行为的用户数; f i ( k ) f_i(k) fi(k)表示被 k k k个用户产生过行为的物品数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值