在机器学习中,我们训练得到一个模型后,需要对该模型表现的好坏做出评价。这就需要我们使用各种评价指标(Metrics)来对模型进行评价。
目录
- Accuracy,Precision,Recall,F1score
- PR曲线
- AUC和ROC曲线
- NDCG
- MAP
- Reference
Accuracy,Precision,Recall,F1score
这些概念都比较简单,用于二分类问题的评价。
首先定义TP(True positives),TN(True negatives),FP(False Positives),FN(False negatives)(这些由分类结果混淆矩阵可以轻易得到)。
四者相加构成所有样本,则有
\[Acc = \frac{TP+TN}{TP+TN+FP+FN}\\ Precision = \frac{TP}{TP+FP}\\ Recall = \frac{TP}{TP+FN}\\ f1score = \frac{2*precision*recall}{precision+recall}\\ \frac{1}{f1score}=\frac{1}{2}(\frac{1}{p}+\frac{1}{r})\]
PR曲线
PR图是对一个分类系统好坏的评价指标。使用precision作为y轴,recall作为x轴。若一个学习器的PR曲线被另一个学习器完全“包住”,那么可以判断后面的学习器性能更优。
如果两个学习器的PR曲线发生了交叉,则不好直接评价优劣,只能在具体precision或recall值下做对比。
此外,平衡点(Break-Even point)也是一个相关的评价指标,表示PR曲线中,precision==recall时的值。BEP越大,性能越优。
那么PR曲线是怎么得到的呢?
比如我们有100个样本,按得到的ranking(正类概率)排好序,从1到100,每次取前k个样本作为正例,其他作为负例,于是每次都可以计算出一个precision和一个recall,比如第一次:
去前1个样本作为正例,这个样本大概率为TP,(当然也有概率是FP),那么这时,FP为0(只有一个正例且被我们正确分类),FN为0-99间的一个数a,precision=1/(1+0)=1,recall=1/(1+a),然后就可以找到图中对应的点。
每次都是基于假设:前k个样本是正例。所以PR图也可以看作是以截断点为变量的评价指标。现实中我们对一些样本分类,我们是不知道最佳截断点,比如以0.5为划分点划分正负样本是不是最好的,所以,PR图出现了。它可以在不确定截断点的情况下对分类器们做性能比较。
AUC和ROC曲线
ROC曲线和PR曲线类似,只不过ROC使用了真正例率TPR作为坐标轴y和假正例率FPR来作为坐标轴x。
\[TPR=\frac{TP}{TP+FP}=precision\\FPR=\frac{FP}{FP+TN}\]
然后ROC曲线先假设所有样本都是负样本,即没有正例,于是从(0,0)开始,然后依次把top1,top2,...,所有元素当作正例。
AUC(Area Under Curve)就是ROC曲线下的面积。
GAUC
NDCG
NDCG,Normalized Discounted Cumulative Gain , 归一化折损累计增益,是一种考虑了结果相关性和顺序因素的评价指标,可用于多分类问题评价。它的核心思想:
1.高关联度的结果比一般关联度的结果更影响最终的指标得分;
2.有高关联度的结果出现在更靠前的位置的时候,指标会越高。
CG
\[CG@K=\sum\limits_{i=1}^Krel_i\]
其中@K表示,结果截取topK个。比如在推荐系统中,我们有100个待选物品,但是最终只推荐5个,那么若使用NDCG来评价,就会使用NDCG@5。
rel表示相关程度,比如我们的相关程度设为3级,则3为最高级,对应的Gain:\(rel_i\)就是3,1为最低级,对应的Gain为1,不相关则Gain为0。
这里Gain也有另外一种定义方法,\(Gain_i=2^{rel_i}-1\)。即Gain有两种定义方法:\(Gain_i=2^{rel_i}-1\)或\(Gain_i=rel_i={0,1,2,...,N}\)。
两种在搜索排序和序列推荐中都有使用,更多使用的是前一种,但后一种比较简单,我们后面以后一种为例。
DCG
DCG就是在CG基础上,除以一个折损值\(log_2(i+1)\),从而让排名靠前的样本对评价结果影响更大。
\[DCG@K=\sum\limits_{i=1}^K\frac{rel_i}{log_2(i+1)}\]
NDCG
NDCG则是在DCG的基础上加一个Normalization。这样的话,我们可以使用NDCG对不同的搜索结果/序列推荐结果进行比较。
NDCG Normalization的方法是用DCG除以IDCG。IDCG是理想化结果对应的DCG值,也就是DCG的最大值。
\[IDCG@K=\sum\limits_{i=1}^K\frac{bestrel_i}{log_2(i+1)}\]
\[NDCG@K = \frac{DCG@K}{IDCG@K} \]
实例
比如,我们截取5个物品进行推荐,其相关度标签按预测顺序分别为3,2,1,0,2。则有
pos | Gain | D | DG |
1 | 3 | 1 | 3 |
2 | 2 | 1.58 | 1.26 |
3 | 1 | 2 | 0.5 |
4 | 0 | 2.32 | 0 |
5 | 1 | 2.58 | 0.39 |
DCG = 5.15 | |||
而对于理想状态,假设理想状态下最多有4个最高相关度(当然也可以5个都是最高相关度,根据实际情况而定),则有: | |||
pos | Gain | D | DG |
--- | --- | --- | --- |
1 | 3 | 1 | 3 |
2 | 3 | 1.58 | 1.90 |
3 | 3 | 2 | 1.5 |
4 | 3 | 2.32 | 1.29 |
5 | 2 | 2.58 | 0.78 |
IDCG=8.47 | |||
故NDCG@5= 0.608. |
MAP
MAP,Mean Average Precison,用于二分类问题评价,有多种定义方法,且定义出来的结果不太一致。所以使用这个评价指标的时候还是看具体问题对它的定义再使用吧。
首先是定义1,参考论文CDAE:Collaborative Denoising Auto-Encodersfor Top-N Recommender Systems。
这个问题要评价的是,推荐系统中,推荐TopK个物品的准确程度。
我们知道precision是使用结果的正例中,真正例的比例来进行评价。
那么precision@k其实就是使用前k个应该是正例的结果中,真正例的比例来进行评价。
而AP@N则是对precision@kq求一个近似均值(分母取N和真正例数量的最小值)。
\[Precision@k = \frac{|C_{k,rec}\cap C_{adopted}|}{k}\\AP@N = \frac{\sum_{k=1}^NPrecision@k*rel(k)}{min(N,C_{adopted})}\]
其中,rel(k)为指示函数,当第k个推荐物品被adopted,则为1,否则为0。
MAP@N则是对所有用户的AP@N做均值。
比如计算AP@5:给用户i推荐了5个商品,对应label为1,1,0,0,1的话。而测试集中,truelabel为1的样本还有1条,故,Cadopted=4。
p@1 = 1/1 = 1; p@2 = 2/2 = 1; p@3 = 0; p@4 = 0; p@5 = 3/5 = 0.6
那么AP@5 = (1+1+0.6)/min(5,4) = 2.6/4.
若Cadopted=10,则
AP@5 = (1+1+0.6)/min(5,10) = 2.6/5.
可见MAP也是一个考虑了顺序因素的评价指标,越靠前的推荐物品准确,则最终评价会更高。
不过没有NDCG对顺序因素的考量那么直观。
另外一种定义方法,AP是PR曲线下的面积什么的,我没有用过,所以先不总结了。