本篇博文主要总结下机器学习,深度学习,自然语言处理里面的一些的评价指标及其背后的原理。
机器学习
分类问题
精确率 (Precision)
TPTP+FP
可以这样理解准确率:
分母是我们这边所有预测为真的数量,包括正确预测为真的和错误预测为真的。
召回率 (recall)
TPTP+FN
分母为
true_data
那边所有为真的样本数量,包括我们预测为真的和我们错误的预测为负的。
故:精确率和召回率的区别在于分母,是我们所有预测为真的数量,还是真实为真的样本数量。
PRC
就是精确率,召回率图像
在机器学习中,通常我们可以设置阈值(threshhold)来提高精确率或召回率。通过PRC能更好的调节阈值。
准确率(accuarcy)
TP+TNALL
注:在
样本类别不平衡时,一般不用准确率作为评价标准。
混淆矩阵
F1值
当精确率和召回率都很高时,F1值就会变的很高,但是在通常情况下,两者不会同时变得很高,当精确率变高了,则召回率就会降低,反之亦然,这就涉及到一个
precision/recall tradeoff
。
ROC-AUC
首先了解两个概念
其
ROC
曲线下方的面积构成的
AUC
。通常越好的模型,其
AUC
越大。
from sklearn import metrics
def aucfun(act,pred):
fpr, tpr, thresholds = metrics.roc_curve(act, pred, pos_label=1)
return metrics.auc(fpr, tpr)
回归
RMSE(平方根误差)
MSE就是除去上面的更号。
MAE(平均绝对误差)
由上面的公式可知:
- RMSE类似于欧式距离和
l2
范数。
- MAE类似于曼哈顿距离和
l1
范数。
- 由此,我们可推得
显然,k越大,其越侧重于
max(v0,v1,...,)
,越忽略较小值,故相对于MAE,RMSE 对离群点更加敏感。对于有许多离群点的样本,一般采用MAE 的评价标准。
以上部分内容参考自
hands on machine learning sklearn and tensorflow
。
自然语言处理
BLEU指标
在机器翻译领域,神经网络翻译出的句子,我们需要对他进行一个定量的评价,也就是给其打分,以判断模型生成的句子好坏,下面举个例子来说明。
NMT output:the the the the the the the
人类翻译的结果:
-
reference1:The cat is on the mat
-
reference2:There is a cat on the mat
如果以
unigram
来计算
NMT output
的精确度
p1
,则
NMT output
中的7个词全出现在
reference
中,那
p1=7/7=1
。很完美?等等,貌似哪里不对。
很明显,这个
NMT output
很不好,我们如果按照上面简单的计算精确度,就会导致生成的句子中会出现大量重复的
token
。由此产生了改良的版本,我们计算
NMT output
中每个不同的
token
在
reference
中出现的次数,例如
the
在
reference1
中出现2次,在
reference2
中出现1次,那么我们认为
the
这个
token
在
reference
中出现次数为2(选取最高的那个),称作为截断次数。那么
NMT output
中
p1=2/7
。
假设这次的
NMT output
为
The cat the cat on the mat
,我们来计算下
bigram
的次数和截断次数。
bigram_token |
count |
clip_count |
the cat |
2 |
1 |
cat the |
1 |
0 |
cat on |
1 |
1 |
on the |
1 |
1 |
the mat |
1 |
1 |
上面表格中的
count
表示该
bigram token
在
NMT output
中出现的次数,
clip count
表示该
bigram token
在
reference
中的截断次数。
故其
p1=clip_count/count
公式化的结果:
pn=∑ngram∈ŷ countclip(ngram)∑ngram∈ŷ count(ngram)
其中
ŷ
即为上面的
NMT output
。
但是上面的评价还是有一个缺点,当我们的
NMT output
很简短时,
pn
可能变得很大,显然这是不合理的,于是我们加上一个
BP
:
BP={1exp(1−NMT_output_len/reference_len)if NMT_output_len>referen_lenotherwise
综上所述:
Bleu=BP∗exp(∑n=1N∗(1/n)∗log(pn))
这样我们就能计算
Bleu1、Bleu2、Bleu3....
Rouge指标
Rouge-N
分母表示所有
reference
中所有出现的
ngram
个数。分子表示所有
reference
与
NMT ouput
共现
ngram
个数。嗯这是基于召回率的方式计算。就这么简单。
Rouge-L
X
是参考译文,
Y
是待评测译文,
m,n
表示
X,Y
序列长度。
LCS(X,Y)
表示最长公共子序列长度。