在机器学习中,我们训练得到一个模型后,需要对该模型表现的好坏做出评价。这就需要我们使用各种评价指标(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曲线

评价指标python 评价指标有哪些_搜索


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曲线

评价指标python 评价指标有哪些_评价指标_02


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曲线下的面积什么的,我没有用过,所以先不总结了。