可以分成兩類:
- example-based metrics:對每個 sample 分別測試性能,然後取平均
- label-based metrics:對每個 class label 測試性能,然後取 macro/micro 平均
這裏只列舉幾個,其餘見 [1]。
Notations
h(⋅):一個 multi-label 分類器(hypothesis)
f(x,y):返回樣本 x 屬於類比 y 的預測概率(confidence)
rankf(x,y):類別 y 是第幾位最有可能是 x 所屬類別(根據 f(x,y) 降序定的排位)
m:test set 大小
c:class 個數,即 label 空間大小
Y:樣本 x 對應的 label 集,可以理解成它的 label 向量
[⋅]:真 1 假 0
Example-based
Subset Accuracy
subsetacc(h)=m1i=1∑m[h(xi)=Yi]
直接從 single label 的 accuracy 推廣得到,要所有 labels 都預測對纔算對,粒度略粗?。
度量分類完全正確的 sample 比例,值越大越好。
Hamming Loss
hloss(h)=m1i=1∑mc1∣h(xi)ΔYi∣
此處 Δ 表示一種對稱的差異度量,例如作差。粒度細了一點。值越小越好。
One Error
one−error(f)=m1i=1∑m((argy∈Ymaxf(xi,y))∈/Yi)
統計那些排名最高(預測概率最大)的 label 卻不在 ground-truth label 集裏的 sample 比例。
Precision, Recall, F
P(h)=m1i=1∑m∣h(xi)∣∣Yi∩h(xi)∣
度量預測的 label 中有幾個是對的,查準率。
R(h)=m1i=1∑m∣Yi∣∣Yi∩h(xi)∣
預測對的 label 佔總 ground-truth label 的幾成,查全率。
Fβ(h)=β2⋅P(h)+R(h)(1+β2)⋅P(h)⋅R(h)
precision 和 recall 的綜合,常用 β=1,即 F1。
Coverage
coverage(f)=m1i=1∑my∈Yimaxrankf(xi,y)−1
按照 rank,想覆蓋所有 relevant labels 至少需要多少長度。原文說從第一位開始至少要多少 steps,所要有 -1
,差不多意思。
Ranking Loss
rloss(f)=m1i=1∑m∣Yi∣∣∣Yˉi∣∣1∣{(y′,y′′)∣f(xi,y′)≤f(xi,y′′),(y′,y′′)∈Yi×Yˉi)}∣
統計逆序對:錯的 y′′ 的 rank 排在對的 y′ 前面。
Average Precision
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 裏有另一個 AP 算法:sklearn.metrics.average_precision_score,計算方法有點不同:各位置 precision 的權重不同。上面那個相當於各個位置的 precision 同權重平均,而這個的權重是對應位置的 recall 值)
Label-based
TP, FP, TN, FN
對於第 j 個 label:
TPj=∣{xi∣yj∈Yi∧yj∈h(xi),1≤i≤m}∣
true positive,真 label 且被預測爲真的數量。
FPj=∣{xi∣yj∈/Yi∧yj∈h(xi),1≤i≤m}∣
false positive,假 label 被預測爲真。
TNj=∣{xi∣yj∈/Yi∧yj∈/h(xi),1≤i≤m}∣
true negative,假 label 被預測爲假。
FNj=∣{xi∣yj∈Yi∧yj∈/h(xi),1≤i≤m}∣
false negative,真 label 被預測爲假。
macro/micro averaging
對某種 metric B
(acc、precision、recall、F):
Bmacro(h)=c1j=1∑cB(TPj,FPj,TNj,FNj)
Bmicro(h)=B(j=1∑cTPj,j=1∑cFPj,j=1∑cTNj,j=1∑cFNj)
Accuracy
Accuracy (TPj,FPj,TNj,FNj)=TPj+FPj+TNj+FNjTPj+TNj
Precision
Precision(TPj,FPj,TNj,FNj)=TPj+FPjTPj
Recall
Recall(TPj,FPj,TNj,FNj)=TPj+FNjTPj
F
label-based 的 F:
Fβ(TPj,FPj,TNj,FNj)=(1+β2)⋅TPj+β2⋅FNj+FPj(1+β2)⋅TPj
References
- A Review on Multi-Label Learning Algorithms
- Collaboration based Multi-Label Learning
- Cmd Markdown 公式指導手冊
- AveragePrecisionMeter | ML-GCN/util.py