推荐系统常用评价指标

转载于:https://blog.csdn.net/qq_40006058/article/details/89432773

1. 混淆矩阵

在这里插入图片描述
TP(true positive):表示样本的真实类别为正,最后预测得到的结果也为正;
FP(false positive):表示样本的真实类别为负,最后预测得到的结果却为正;
FN(false negative):表示样本的真实类别为正,最后预测得到的结果却为负;
TN(true negative):表示样本的真实类别为负,最后预测得到的结果也为负.

其中,TP与TN表示分类正确的样本。

2. 准确率

准确率表示预测正确的样本数占总样本书的比例。
Accuracy=TP+TNTP+TN+FP+FNAccuracy = \frac{TP+TN}{TP+TN+FP+FN}Accuracy=TP+TN+FP+FNTP+TN

3. 精确率

精确率表示预测为正样本的样本中,正确预测为正样本的概率。
Precision=TPTP+FPPrecision = \frac{TP}{TP+FP}Precision=TP+FPTP

4. 召回率

召回率表示正确预测出正样本占实际正样本的概率。
Recall=TPTP+FNRecall = \frac{TP}{TP+FN}Recall=TP+FNTP

5. F1 score

折中了召回率与精确率。
F1=2∗Recall∗PrecisionRecall+PrecisionF1 = \frac{2*Recall*Precision}{Recall+Precision}F1=Recall+Precision2RecallPrecision

6. ROC与AUC

ROC曲线的横轴为假正例率FPR(越小越好),纵轴为真正例率TPR(越大越好)。
FPR=FPTN+FPFPR = \frac{FP}{TN+FP}FPR=TN+FPFP

TPR=TPTP+TNTPR = \frac{TP}{TP+TN}TPR=TP+TNTP

ROC计算过程:

1)首先每个样本都需要有一个label值,并且还需要一个预测的score值(取值0到1);2)然后按这个score对样本由大到小进行排序,假设这些数据位于表格中的一列,从上到下依次降序;3)现在从上到下按照样本点的取值进行划分,位于分界点上面的我们把它归为预测为正样本,位于分界点下面的归为负样本;4)分别计算出此时的TPR和FPR,然后在图中绘制(FPR, TPR)点。

在这里插入图片描述

AUC的含义:测试任意给一个正类样本和一个负类样本,正类样本的score有多大的概率大于负类样本的score。或者,任意给定一个负样本,所有正样本的score中有多大比例是大于该负类样本的score

在这里插入图片描述

7. Hit Ratio(HR)

在top-K推荐中,HR是一种常用的衡量召回率的指标,计算公式为:
HR@K=NumberOfHits@KGTHR@K = \frac{NumberOfHits@K}{GT}HR@K=GTNumberOfHits@K

分母GTGTGT是所有的测试集合,分子表示每个用户top-K列表中属于测试集合的个数的总和。

举个简单的例子,三个用户在测试集中的商品个数分别是10,12,8,模型得到的top-10推荐列表中,分别有6个,5个,4个在测试集中,那么此时HR的值是 (6+5+4)/(10+12+8) = 0.5。

def hit(gt_items, pred_items):
    count = 0
    for item in pred_items:
        if item in gt_items:
            count += 1
    return count

8. Mean Average Precision(MAP)

平均准确率AP,假使当我们使用google搜索某个关键词,返回了10个结果。当然最好的情况是这10个结果都是我们想要的相关信息。但是假如只有部分是相关的,比如5个,那么这5个结果如果被显示的比较靠前也是一个相对不错的结果。但是如果这个5个相关信息从第6个返回结果才开始出现,那么这种情况便是比较差的。这便是AP所反映的指标,与recall的概念有些类似,不过是“顺序敏感的recall。

对于用户u uu,给他推荐一些物品,那么u uu的平均准确率为:

APu=1Ωu∑i∈Ωu∑j∈Ωuh(puj<pui)+1puiAP_u = \frac{1}{Ω_u}\sum_{i \in Ω_u}\frac{\sum_j \in Ω_u h(p_{uj}<p_{ui})+1}{p_{ui}}APu=Ωu1iΩupuijΩuh(puj<pui)+1

其中,Ωu\Omega _uΩu 表示ground-truth的结果,pujp_{uj}puj表示 iii 物品在推荐列表中的位置,puj<puip_{uj} < p_{ui}puj<pui表示 jjj 物品在推荐列表中排在iii物品之前。

在这里插入图片描述

def AP(ranked_list, ground_truth):
    """Compute the average precision (AP) of a list of ranked items
    """
    hits = 0
    sum_precs = 0
    for n in range(len(ranked_list)):
        if ranked_list[n] in ground_truth:
            hits += 1
            sum_precs += hits / (n + 1.0)
    if hits > 0:
        return sum_precs / len(ground_truth)
    else:
        return 0

MAP表示所有用户 uuu 的AP再取均值,计算公式如下:
MAP=∑u∈UAPu∣U∣MAP=\frac{\sum_{u \in U} AP_u}{|U|}MAP=UuUAPu

9. Normalized Discounted Cummulative Gain(NDCG)

累积增益CG,推荐系统中CG表示将每个推荐结果相关性的分值累加后作为整个推荐列表的得分:
CGk=∑I=1kreliCG_k = \sum_{I=1}^k rel_iCGk=I=1kreli
其中,relirel_ireli 表示位置 iii 的推荐结果的相关性,kkk 表示推荐列表的大小。

CG没有考虑每个推荐结果处于不同位置对整个推荐结果的影响,例如,我们总是希望相关性大大的结果排在前面,相关性低的排在前面会影响用户体验。

​DCG在CG的基础上引入了位置影响因素,计算公式如下:

DCGk=∑i=1k2reli−1log2(i+1)DCG_k = \sum_{i=1}^k \frac{2^{rel_i}-1}{log_2(i+1)}DCGk=i=1klog2(i+1)2reli1

从上面的式子可以得出:1)推荐结果的相关性越大,DCG越大。2)相关性好的排在推荐列表前面的话,推荐效果越好,DCG越大。

DCG针对不同的推荐列表之间很难进行横向评估,而我们评估一个推荐系统不可能仅使用一个用户的推荐列表及相应结果进行评估,而是对整个测试集中的用户及其推荐列表结果进行评估。那么,不同用户的推荐列表的评估分数就需要进行归一化,也就是NDCG

NDCG表示推荐系统某一用户返回的最好推荐结果列表, 即假设返回结果按照相关性排序, 最相关的结果放在最前面, 此序列的DCG为NDCG。因此DCG的值介于 (0,NDCG] ,故NDCG的值介于(0,1],那么用户u的NDCG@K定义为:

NDCGU@k=DCGu@kNDCGuNDCG_U@k=\frac{DCG_u@k}{NDCG_u}NDCGU@k=NDCGuDCGu@k

平均NDCG的值为:

NDCG@k=∑u∈UNDCGu@kNDCGuNDCG@_k = \frac{\sum_{u \in U}NDCG_u@k}{NDCG_u}NDCG@k=NDCGuuUNDCGu@k

在这里插入图片描述
CG的计算结果为3+1+2+3+2 = 11。DCG的值为6.69。理想状况下,我们的NDCG排序结果的相关性应该是3,3,2,2,1,因此NDCG为7.14(具体过程不再给出),因此NDCG结果为6.69/7.14 = 0.94。

10. Mean Reciprocal Rank(MRR)

正确检索结果值在检索结果中的排名来评估检索系统的性能。

MRR=1Q∑i=1∣Q∣1rankiMRR = \frac{1}{Q}\sum_{i=1}^{|Q|}\frac{1}{rank_i}MRR=Q1i=1Qranki1
其中QQQ是用户的个数,rankirank_iranki是对于第iii个用户,推荐列表中第一个在ground-truth结果中的item所在的位置

举个例子:假如检索三次的结果如下,需要的结果(cat,torus,virus)分别排在3,2,1的话,此系统地MRR为(1/3 + 1/2 + 1)/3 = 11/18

在这里插入图片描述
如果检索出来的正确结果多于一个时,可以使用MAP(Mean Average Precision)算法。

11. ILS

ILS 衡量推荐列表多样性的指标,计算公式:
ILS(L)=∑bi∈L∑bj∈L,bj≠biS(bi,bj)∑bi∈L∑bj∈L,b−j≠bi1ILS(L)=\frac{\sum_{b_i \in L}\sum_{b_j \in L,b_j \not = b_i}S(b_i,b_j)}{\sum_{b_i \in L}\sum_{b_j \in L,b-j \not = b_i}1}ILS(L)=biLbjL,bj=bi1biLbjL,bj=biS(bi,bj)

如果,S(bi,bj)S(b_i,b_j)S(bi,bj)计算的是 iiijjj两个物品的相似性,如果推荐列表中的物品越不相似,ILS越小,那么推荐结果的多样性越好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值