跨模态检索评价指标
精确率,准确率,召回率,混淆矩阵
以二分类算法为基础
TN:算法预测为负例(N),实际上也是负例(N)的个数,即算法预测对了(True);
FP:算法预测为正例(P),实际上是负例(N)的个数,即算法预测错了(False);
FN:算法预测为负例(N),实际上是正例(P)的个数,即算法预测错了(False);
TP:算法预测为正例(P),实际上也是正例(P)的个数,即算法预测对了(True)
混淆矩阵
预测值 0 | 预测值 1 | |
---|---|---|
真实值 0 | TN | FP |
真实值 1 | FN | TP |
- 准确率: a c c u r a c y = ( T P + T N ) ( T P + T N + T P + F N ) accuracy = \frac{(TP + TN)} { (TP + TN + TP + FN)} accuracy=(TP+TN+TP+FN)(TP+TN) 预测正确的总数/总样本数
- 精确率: p e r c i s i o n = T P ( T P + F P ) percision = \frac{TP} {(TP + FP)} percision=(TP+FP)TP 预测值为1且正确的数目/预测为1的总数
- 召回率: r e c a l l = T P ( T P + F N ) recall = \frac{TP} { (TP + FN)} recall=(TP+FN)TP 预测值为1且正确的数目/真实值为1的总数
代码,使用sklearn.metrics中的confusion_matrix
from sklearn.metrics import confusion_matrix
label = np.random.randint(0, 3, (1,5)).squeeze(0)
predict = np.random.randint(0, 3, (1,5)).squeeze(0)
label = array([1, 1, 0, 1, 2])
predict = array([0, 2, 0, 0, 2])
cf = confusion_matrix(label, predict).astype(float)
预测: 0 1 2 标签
array([[1., 0., 0.], 0
[2., 0., 1.], 1
[0., 0., 1.]]) 2
# 准确率
acc = np.diag(cf).sum()/cf.sum()
# 精确率
per = np.diag(cf)/cf.sum(axis=0) # 按列求和
# 召回率
rec = np.diag(cf)/cf.sum(axis=1) # 按行求和
评价指标的论文:paper
map
mean average precision,平均精度
检索任务的percision、recall和分类任务的略有不同。分类任务中使用预测分数排序,检索任务中使用特征的近似度排序。
p e r c i s i o n = ∑ i = 1 k Re i k percision = \frac{\sum_{i=1}^{k} \operatorname{Re}_{i}}{k}