可以分成两类:
- example-based metrics:对每个 sample 分别测试性能,然后取平均
- label-based metrics:对每个 class label 测试性能,然后取 macro/micro 平均
这里只列举几个,其余见 [1]。
Notations
h
(
⋅
)
h(\cdot)
h(⋅):一个 multi-label 分类器(hypothesis)
f
(
x
,
y
)
f(x,y)
f(x,y):返回样本 x 属于类比 y 的预测概率(confidence)
r
a
n
k
f
(
x
,
y
)
rank_f(x,y)
rankf(x,y):类别 y 是第几位最有可能是 x 所属类别(根据
f
(
x
,
y
)
f(x,y)
f(x,y) 降序定的排位)
m
m
m:test set 大小
c
c
c:class 个数,即 label 空间大小
Y
Y
Y:样本
x
x
x 对应的 label 集,可以理解成它的 label 向量
[
⋅
]
[\cdot]
[⋅]:真 1 假 0
Example-based
Subset Accuracy
s
u
b
s
e
t
a
c
c
(
h
)
=
1
m
∑
i
=
1
m
[
h
(
x
i
)
=
Y
i
]
subsetacc(h)=\frac{1}{m}\sum^m_{i=1}\left[h(x_i)=Y_i\right]
subsetacc(h)=m1i=1∑m[h(xi)=Yi]
直接从 single label 的 accuracy 推广得到,要所有 labels 都预测对才算对,粒度略粗?。
度量分类完全正确的 sample 比例,值越大越好。
- 调包:sklearn.metrics.accuracy_score
(y_true, y_pred)
,可以是 multi-hot 式的 indicator 向量表示,也可以是整数序列(对于 single label,一个整数表示一个 sample 的 class id)。
Hamming Loss
h
l
o
s
s
(
h
)
=
1
m
∑
i
=
1
m
1
c
∣
h
(
x
i
)
Δ
Y
i
∣
hloss(h)=\frac{1}{m} \sum_{i=1}^{m} \frac{1}{c}\left|h\left(x_{i}\right) \Delta Y_{i}\right|
hloss(h)=m1i=1∑mc1∣h(xi)ΔYi∣
此处
Δ
\Delta
Δ 表示一种对称的差异度量,例如作差。粒度细了一点。值越小越好。
- 调包:sklearn.metrics.hamming_loss
(y_true, y_pred)
。
One Error
o
n
e
−
e
r
r
o
r
(
f
)
=
1
m
∑
i
=
1
m
(
(
arg
max
y
∈
Y
f
(
x
i
,
y
)
)
∉
Y
i
)
one-error(f)=\frac{1}{m} \sum_{i=1}^{m}\left(\left(\arg \max _{y \in \mathcal{Y}} f\left(x_{i}, y\right)\right) \notin Y_{i}\right)
one−error(f)=m1i=1∑m((argy∈Ymaxf(xi,y))∈/Yi)
统计那些排名最高(预测概率最大)的 label 却不在 ground-truth label 集里的 sample 比例。
Precision, Recall, F
P
(
h
)
=
1
m
∑
i
=
1
m
∣
Y
i
∩
h
(
x
i
)
∣
∣
h
(
x
i
)
∣
P(h)=\frac{1}{m} \sum_{i=1}^{m} \frac{\left|Y_{i} \cap h\left(x_{i}\right)\right|}{\left|h\left(x_{i}\right)\right|}
P(h)=m1i=1∑m∣h(xi)∣∣Yi∩h(xi)∣
度量预测的 label 中有几个是对的,查准率。
R
(
h
)
=
1
m
∑
i
=
1
m
∣
Y
i
∩
h
(
x
i
)
∣
∣
Y
i
∣
R(h)=\frac{1}{m} \sum_{i=1}^{m} \frac{\left|Y_{i} \cap h\left(\boldsymbol{x}_{i}\right)\right|}{\left|Y_{i}\right|}
R(h)=m1i=1∑m∣Yi∣∣Yi∩h(xi)∣
预测对的 label 占总 ground-truth label 的几成,查全率。
F
β
(
h
)
=
(
1
+
β
2
)
⋅
P
(
h
)
⋅
R
(
h
)
β
2
⋅
P
(
h
)
+
R
(
h
)
F^{\beta}(h)=\frac{(1+\beta^2)\cdot P(h)\cdot R(h)}{\beta^2\cdot P(h)+R(h)}
Fβ(h)=β2⋅P(h)+R(h)(1+β2)⋅P(h)⋅R(h)
precision 和 recall 的综合,常用
β
=
1
\beta=1
β=1,即 F1。
Coverage
c
o
v
e
r
a
g
e
(
f
)
=
1
m
∑
i
=
1
m
max
y
∈
Y
i
rank
f
(
x
i
,
y
)
−
1
coverage(f)=\frac{1}{m} \sum_{i=1}^{m} \max _{y \in Y_{i}} \operatorname{rank}_{f}\left(x_{i}, y\right)-1
coverage(f)=m1i=1∑my∈Yimaxrankf(xi,y)−1
按照 rank,想覆盖所有 relevant labels 至少需要多少长度。原文说从第一位开始至少要多少 steps,所要有 -1
,差不多意思。
- 调包:sklearn.metrics.coverage_error
(y_true, y_score)
,其中 y_score 是对每个 label 预测的 confidence,一般就是分类函数的输出。
Ranking Loss
r
l
o
s
s
(
f
)
=
1
m
∑
i
=
1
m
1
∣
Y
i
∣
∣
Y
ˉ
i
∣
∣
{
(
y
′
,
y
′
′
)
∣
f
(
x
i
,
y
′
)
≤
f
(
x
i
,
y
′
′
)
,
(
y
′
,
y
′
′
)
∈
Y
i
×
Y
ˉ
i
)
}
∣
rloss(f)= \frac{1}{m} \sum_{i=1}^m \frac{1}{\left|Y_{i}\right|\left|\bar{Y}_{i}\right|} \left| \left\{\left(y^{\prime}, y^{\prime \prime}\right) | f\left(x_{i}, y^{\prime}\right)\right.\right. \left.\left.\leq f\left(x_{i}, y^{\prime \prime}\right),\left(y^{\prime}, y^{\prime \prime}\right) \in Y_{i} \times \bar{Y}_{i}\right)\right\}|
rloss(f)=m1i=1∑m∣Yi∣∣∣Yˉi∣∣1∣{(y′,y′′)∣f(xi,y′)≤f(xi,y′′),(y′,y′′)∈Yi×Yˉi)}∣
统计逆序对:错的
y
′
′
y^{\prime\prime}
y′′ 的 rank 排在对的
y
′
y^{\prime}
y′ 前面。
- 调包:sklearn.metrics.label_ranking_loss
(y_true, y_score)
。
Average Precision
a
v
g
p
r
e
c
(
f
)
=
1
m
∑
i
=
1
m
1
∣
Y
i
∣
∑
y
∈
Y
i
∣
{
y
′
∣
r
a
n
k
f
(
x
i
,
y
′
)
≤
r
a
n
k
f
(
x
i
,
y
)
,
y
′
∈
Y
i
}
∣
r
a
n
k
f
(
x
i
,
y
)
avgprec(f)=\frac{1}{m}\sum^m_{i=1}\frac{1}{|Y_i|}\sum_{y\in Y_i}\frac{|\{y^{\prime}|rank_f(x_i,y^{\prime})\leq rank_f(x_i,y),y^{\prime}\in Y_i\}|}{rank_f(x_i,y)}
avgprec(f)=m1i=1∑m∣Yi∣1y∈Yi∑rankf(xi,y)∣{y′∣rankf(xi,y′)≤rankf(xi,y),y′∈Yi}∣
mAP 里的 AP 部分(检索的 mAP 和这个基于排序的分类 mAP 思路一致,只是前者基于距离排,后者基于 confidence 排)。
- 调包:sklearn.metrics.label_ranking_average_precision_score
(y_true, y_score)
。
(sklearn 里有另一个 AP 算法:sklearn.metrics.average_precision_score,计算方法有点不同:各位置 precision 的权重不同。上面那个相当于各个位置的 precision 同权重平均,而这个的权重是对应位置的 recall 值)
Label-based
TP, FP, TN, FN
对于第 j 个 label:
T
P
j
=
∣
{
x
i
∣
y
j
∈
Y
i
∧
y
j
∈
h
(
x
i
)
,
1
≤
i
≤
m
}
∣
T P_{j}=\left|\left\{x_{i} | y_{j} \in Y_{i} \wedge y_{j} \in h\left(x_{i}\right), 1 \leq i \leq m\right\}\right|
TPj=∣{xi∣yj∈Yi∧yj∈h(xi),1≤i≤m}∣
true positive,真 label 且被预测为真的数量。
F
P
j
=
∣
{
x
i
∣
y
j
∉
Y
i
∧
y
j
∈
h
(
x
i
)
,
1
≤
i
≤
m
}
∣
F P_{j}=\left|\left\{x_{i} | y_{j} \notin Y_{i} \wedge y_{j} \in h\left(x_{i}\right), 1 \leq i \leq m\right\}\right|
FPj=∣{xi∣yj∈/Yi∧yj∈h(xi),1≤i≤m}∣
false positive,假 label 被预测为真。
T
N
j
=
∣
{
x
i
∣
y
j
∉
Y
i
∧
y
j
∉
h
(
x
i
)
,
1
≤
i
≤
m
}
∣
T N_{j}=\left|\left\{x_{i} | y_{j} \notin Y_{i} \wedge y_{j} \notin h\left(x_{i}\right), 1 \leq i \leq m\right\}\right|
TNj=∣{xi∣yj∈/Yi∧yj∈/h(xi),1≤i≤m}∣
true negative,假 label 被预测为假。
F
N
j
=
∣
{
x
i
∣
y
j
∈
Y
i
∧
y
j
∉
h
(
x
i
)
,
1
≤
i
≤
m
}
∣
F N_{j}=\left|\left\{x_{i} | y_{j} \in Y_{i} \wedge y_{j} \notin h\left(x_{i}\right), 1 \leq i \leq m\right\}\right|
FNj=∣{xi∣yj∈Yi∧yj∈/h(xi),1≤i≤m}∣
false negative,真 label 被预测为假。
macro/micro averaging
对某种 metric B
(acc、precision、recall、F):
B
m
a
c
r
o
(
h
)
=
1
c
∑
j
=
1
c
B
(
T
P
j
,
F
P
j
,
T
N
j
,
F
N
j
)
B_{macro}(h)=\frac{1}{c} \sum_{j=1}^{c} B\left(T P_{j}, F P_{j}, T N_{j}, F N_{j}\right)
Bmacro(h)=c1j=1∑cB(TPj,FPj,TNj,FNj)
B
m
i
c
r
o
(
h
)
=
B
(
∑
j
=
1
c
T
P
j
,
∑
j
=
1
c
F
P
j
,
∑
j
=
1
c
T
N
j
,
∑
j
=
1
c
F
N
j
)
B_{micro}(h)=B\left(\sum_{j=1}^{c} TP_{j}, \sum_{j=1}^{c} FP_{j}, \sum_{j=1}^{c} TN_{j}, \sum_{j=1}^{c} FN_{j}\right)
Bmicro(h)=B(j=1∑cTPj,j=1∑cFPj,j=1∑cTNj,j=1∑cFNj)
Accuracy
Accuracy ( T P j , F P j , T N j , F N j ) = T P j + T N j T P j + F P j + T N j + F N j \text { Accuracy }\left(T P_{j}, F P_{j}, T N_{j}, F N_{j}\right)=\frac{T P_{j}+T N_{j}}{T P_{j}+F P_{j}+T N_{j}+F N_{j}} Accuracy (TPj,FPj,TNj,FNj)=TPj+FPj+TNj+FNjTPj+TNj
Precision
Precision ( T P j , F P j , T N j , F N j ) = T P j T P j + F P j \text {Precision}\left(T P_{j}, F P_{j}, T N_{j}, F N_{j}\right)=\frac{T P_{j}}{T P_{j}+F P_{j}} Precision(TPj,FPj,TNj,FNj)=TPj+FPjTPj
Recall
Recall ( T P j , F P j , T N j , F N j ) = T P j T P j + F N j \operatorname{Recall}\left(T P_{j}, F P_{j}, T N_{j}, F N_{j}\right)=\frac{T P_{j}}{T P_{j}+F N_{j}} Recall(TPj,FPj,TNj,FNj)=TPj+FNjTPj
F
label-based 的 F:
F
β
(
T
P
j
,
F
P
j
,
T
N
j
,
F
N
j
)
=
(
1
+
β
2
)
⋅
T
P
j
(
1
+
β
2
)
⋅
T
P
j
+
β
2
⋅
F
N
j
+
F
P
j
F^{\beta}\left(T P_{j}, F P_{j}, T N_{j}, F N_{j}\right)=\frac{\left(1+\beta^{2}\right) \cdot T P_{j}}{\left(1+\beta^{2}\right) \cdot T P_{j}+\beta^{2} \cdot F N_{j}+F P_{j}}
Fβ(TPj,FPj,TNj,FNj)=(1+β2)⋅TPj+β2⋅FNj+FPj(1+β2)⋅TPj
- 调包:sklearn.metrics.fbeta_score
(y_true, y_pred, beta, average=’binary’)
,或者 F1 就直接sklearn.metrics.f1_score(y_true, y_pred, average=’binary’)
,其中average
参数可选'micro'
、'macro'