这章来介绍一下如何评估你搜索以后的结果好坏呢?从而定义算法优化的方向。对于比较粗糙的评估方法如下。
P=检索所有文档数检索出相关文档数−−R=数据库中相关文档数检出相关文档数
看着形式是不是很熟悉,就是经常看到的准确率和召回率。
下面形式化的表达出来。
a表示被检索出的与查询相关的 文献数量;
b表示被检索出的与查询无关的文献数量;
c表示与查询相 关,但是没有被检索出的文献数量
P=a+baR=a+caE=a+bbQ=a+cc
P是准确率,Q是召回率,E是误检率,Q是漏检率。
靠前文档评估
不知道你发现了没有,通过上面的评估我们是能够得到一个粗糙的评估,但是对于排序来讲,顺序十分重要,如果在数量上虽然占优,但是排序都是靠后的,那么这个质量也是不过关的,所以一般会采用下面的方式评估。
MRR
MRR(Mean Reciprocal Rank)是指多个查询的排名的均值,是国际上通用的对搜索结果进行评价的指标。假设有两次查询,第一次查询的第一个相关文档的排序是2,第二次查询的第一个相关文档的排序是5,那个根据这两次查询对搜索结果进行评价,计算方法是: 1/2(1/2+1/5)=0.35。
MRR=Q1i=1∑Qranki1
ranki表示第i个查询的第一个正确答案的排名,Q表示查询的次数。
DGG
对于网络搜索评价来说,DCG(Normalized Discounted Cumulative Gain)是较为常用的方法。
这种方法基于两个假设:
- 高相关性的文档比边缘相关的文档更重要;
- 一个相关文档的排序越靠后,对用户的价值就越低,因为它们很少被用户查看。
在介绍DCG之前,先描述一下CG(Cumulative Gain),其表示前p个位置累计得到的增益,reli表示第i个文档的相关度等级,比如2表示非常相关,1 表示相关,0表示无关。
DGp=i=1∑Preli
通过观察DGp的计算过程能够看出其实这个方法对于排序的顺序仍然不敏感,所以比较直观的方法就是加上惩罚因子
DCGp=i=1∑Plog2i+1reli
还有一种表达形式是
DCGp=i=1∑Plog2i+12reli−1
由于每个查询语句所能检索到的结果文档集合长度不一,p值会对 DCG的计算有较大的影响,因此不能对不同查询语句的DCG求平均,需要进行归一化处理。而nDCG是一个相对比值,这里使用DCG除以IDCG进行归一化处理。
IDCGp=i=1∑rellog2i+12reli−1
其中,|rel|表示结果按照相关度从大到小排序,取前p个结果, 即按照最优的方式对结果进行排序。
进一步的评估指标为
NDCG=IDCGDGG
RMSE和R方
RMSE和MAE原来已经讲了很多啦,就不再多说啦。MAE是看平均偏差,而RMSE对相差比较大的比较敏感,也就是说RMSE是对模型靠谱程度衡量。
R2=1−∑(yr−ym)2∑(y−yr)2
y是预测值,yr是真实值,ym则是均值.R2其实是用 平方误差/平方差。这样做的好处在于R2可以简单直接地评价预测值与
真实值的耦合程度,即R2=0时,模型与真实结果几乎不拟合;R2=1时,
模型与真实结果几乎全拟合。同时,R2还解决了RMES和MAE中样本波动的问题。
MAP和MRR
MAP(Mean Average Precision,平均正确率),其中AP的计算方法
AP=Nrel∑k=1n(P(k)×rel(k))
k为检索结果队列中的排序位置;P(k)为前k个结果的准确率$$\frac{N_{rel}}{N}$$,N表示总文档数量;rel(k)表示与位置k的文档是否相关,相关为1,不相关为0;Nrel表示相关文档数量。
MAP即对将多个查询对应的AP求平均。MAP是反映系统在全部相关 文档上性能的单值指标。系统检索出来的相关文档越靠前,MAP就可能 越高。
MAP=Q∑q=1QAP(q)
Q为查询的数量。
MRR(Mean Reciprocal Rank,平均倒数排名)是依据排序的准确 度,对查询请求响应的结果进行评估。
推荐系统中AUC
这里在给出一个例子说明在推荐系统中AUC的指标是如何计算的。
样本编号 |
真实分类 |
预测值 |
A |
1 |
0.4 |
B |
1 |
0.8 |
C |
0 |
0.2 |
D |
0 |
0.4 |
E |
0 |
0.5 |
以真值A、B为例。
以A为正样本形成的正负样本对为(A, C), (A, D), (A, E),指示函数值分别为1,0.5,0;
以B为正样本形成的正负样本对为(B, C), (B, D), (B, E),指示函数值分别为1,1,1。
当A为正例,且预测得分大于C的负例,那么积一分,相等记0.5分,错误记0分。
AUC=2×31+0.5+0+1+1+1=43
这种方法就把模型的整体准确性记录下来啦。
GAUC
AUC反映整体样本间的排序能力,表示正样本得分比负样本得分高的概率,对样本不区分用户地计算整体样本的AUC。
GAUC实现了用户级别的AUC计算,在单个用户AUC的基础上,按照点击次数或展示次数进行加权平均,消除了用户偏差对模型的影响,更准确的描述了模型的表现效果:
GAUC=∑i=1nwi∑i=1nwi×AUCi
其中权重w既可以是展示次数(impression)也可以是点击次数(clicks)。n是用户数量。
举个很简单的例子,假如有两个用户,分别是甲和乙,一共有5个样本,其中+表示正样本,-表示负样本,我们把5个样本按照模型A预测的score从小到大排序,得到 甲-,甲+,乙-,甲+,乙+. 那么实际的auc应该是 (1+2+2)/(32)=0.833, 那假如有另一个模型B,把这5个样本根据score从小到大排序后,得到 甲-,甲+,甲+,乙-,乙+, 那么该模型预测的auc是(1+1+2)/(32)=0.667.
那么根据auc的表现来看,模型A的表现优于模型B,但是从实际情况来看,对于用户甲,模型B把其所有的负样本的打分都比正样本低,故,对于用户甲,模型B的auc是1, 同理对于用户乙,模型B的auc也应该是1,同样,对于用户甲和乙,模型A的auc也是1,所以从实际情况来看,模型B的效果和模型A应该是一样好的,这和实际的auc的结果矛盾。所以能够看出来单纯看AUC是不能看清楚对于用户级别的模型优劣的。
多样性评估
推荐系统的评估除了关注普通的准确召回以外还关心结果的多样性,也就是对用户探索,这类评估的方法是计算所有推荐结果的相似度,相似度较低表示多样性的指标较好。
总而言之
通过这样的介绍,你应该已经了解了对于排序算法的评估方法,在你的工作中遇到对非单一结果的问题是不是就能马上使用上呢?