multi-label learning/classification評價指標

可以分成兩類:

  • example-based metrics:對每個 sample 分別測試性能,然後取平均
  • label-based metrics:對每個 class label 測試性能,然後取 macro/micro 平均

這裏只列舉幾個,其餘見 [1]。

Notations

h()h(\cdot):一個 multi-label 分類器(hypothesis)
f(x,y)f(x,y):返回樣本 x 屬於類比 y 的預測概率(confidence)
rankf(x,y)rank_f(x,y):類別 y 是第幾位最有可能是 x 所屬類別(根據 f(x,y)f(x,y) 降序定的排位)
mm:test set 大小
cc:class 個數,即 label 空間大小
YY:樣本 xx 對應的 label 集,可以理解成它的 label 向量
[][\cdot]:真 1 假 0

Example-based

Subset Accuracy

subsetacc(h)=1mi=1m[h(xi)=Yi]subsetacc(h)=\frac{1}{m}\sum^m_{i=1}\left[h(x_i)=Y_i\right]
直接從 single label 的 accuracy 推廣得到,要所有 labels 都預測對纔算對,粒度略粗?。
度量分類完全正確的 sample 比例,值越大越好。

  • 調包:sklearn.metrics.accuracy_score(y_true, y_pred),可以是 multi-hot 式的 indicator 向量表示,也可以是整數序列(對於 single label,一個整數表示一個 sample 的 class id)。

Hamming Loss

hloss(h)=1mi=1m1ch(xi)ΔYihloss(h)=\frac{1}{m} \sum_{i=1}^{m} \frac{1}{c}\left|h\left(x_{i}\right) \Delta Y_{i}\right|
此處 Δ\Delta 表示一種對稱的差異度量,例如作差。粒度細了一點。值越小越好。

One Error

oneerror(f)=1mi=1m((argmaxyYf(xi,y))Yi)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)
統計那些排名最高(預測概率最大)的 label 卻不在 ground-truth label 集裏的 sample 比例。

Precision, Recall, F

P(h)=1mi=1mYih(xi)h(xi)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|}
度量預測的 label 中有幾個是對的,查準率。
R(h)=1mi=1mYih(xi)YiR(h)=\frac{1}{m} \sum_{i=1}^{m} \frac{\left|Y_{i} \cap h\left(\boldsymbol{x}_{i}\right)\right|}{\left|Y_{i}\right|}
預測對的 label 佔總 ground-truth label 的幾成,查全率。
Fβ(h)=(1+β2)P(h)R(h)β2P(h)+R(h)F^{\beta}(h)=\frac{(1+\beta^2)\cdot P(h)\cdot R(h)}{\beta^2\cdot P(h)+R(h)}
precision 和 recall 的綜合,常用 β=1\beta=1,即 F1。

Coverage

coverage(f)=1mi=1mmaxyYirankf(xi,y)1coverage(f)=\frac{1}{m} \sum_{i=1}^{m} \max _{y \in Y_{i}} \operatorname{rank}_{f}\left(x_{i}, y\right)-1
按照 rank,想覆蓋所有 relevant labels 至少需要多少長度。原文說從第一位開始至少要多少 steps,所要有 -1,差不多意思。

  • 調包:sklearn.metrics.coverage_error(y_true, y_score),其中 y_score 是對每個 label 預測的 confidence,一般就是分類函數的輸出。

Ranking Loss

rloss(f)=1mi=1m1YiYˉi{(y,y)f(xi,y)f(xi,y),(y,y)Yi×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\}|
統計逆序對:錯的 yy^{\prime\prime} 的 rank 排在對的 yy^{\prime} 前面。

Average Precision

avgprec(f)=1mi=1m1YiyYi{yrankf(xi,y)rankf(xi,y),yYi}rankf(xi,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)}
mAP 裏的 AP 部分(檢索的 mAP 和這個基於排序的分類 mAP 思路一致,只是前者基於距離排,後者基於 confidence 排)。

(sklearn 裏有另一個 AP 算法:sklearn.metrics.average_precision_score,計算方法有點不同:各位置 precision 的權重不同。上面那個相當於各個位置的 precision 同權重平均,而這個的權重是對應位置的 recall 值)

Label-based

TP, FP, TN, FN

對於第 j 個 label:
TPj={xiyjYiyjh(xi),1im}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|
true positive,真 label 且被預測爲真的數量。
FPj={xiyjYiyjh(xi),1im}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|
false positive,假 label 被預測爲真。
TNj={xiyjYiyjh(xi),1im}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|
true negative,假 label 被預測爲假。
FNj={xiyjYiyjh(xi),1im}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|
false negative,真 label 被預測爲假。

macro/micro averaging

對某種 metric B(acc、precision、recall、F):
Bmacro(h)=1cj=1cB(TPj,FPj,TNj,FNj)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)
Bmicro(h)=B(j=1cTPj,j=1cFPj,j=1cTNj,j=1cFNj)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)

Accuracy

 Accuracy (TPj,FPj,TNj,FNj)=TPj+TNjTPj+FPj+TNj+FNj\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}}

Precision

Precision(TPj,FPj,TNj,FNj)=TPjTPj+FPj\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}}

Recall

Recall(TPj,FPj,TNj,FNj)=TPjTPj+FNj\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}}

F

label-based 的 F:
Fβ(TPj,FPj,TNj,FNj)=(1+β2)TPj(1+β2)TPj+β2FNj+FPjF^{\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}}

References

  1. A Review on Multi-Label Learning Algorithms
  2. Collaboration based Multi-Label Learning
  3. Cmd Markdown 公式指導手冊
  4. AveragePrecisionMeter | ML-GCN/util.py
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章