多类分类与多标签分类
- 多类分类(multi-class classification):有多个类别需要分类,但一个样本只属于一个类别
- 多标签分类(multi-label classificaton):每个样本有多个标签
区别:
对于多类分类,最后一层使用softmax函数进行预测,训练阶段使用categorical_crossentropy作为损失函数
对于多标签分类,最后一层使用sigmoid函数进行预测,训练阶段使用binary_crossentropy作为损失函数
性能度量方法
主要分为基于样例(Example-based)的方法和基于标签(Label-based)的方法
假设多标签分类器为 h ( ⋅ ) h(\cdot) h(⋅); Y i Y_i Yi为样例的真实标签; p p p为样例个数; f ( x , y ) f(x,y) f(x,y)为实值函数,返回x的标签y的置信度; r a n k f ( x , y ) rank_f(x,y) rankf(x,y)返回由 f ( x , ⋅ ) f(x,\cdot) f(x,⋅)推导的按降序排列的标签y的秩
###基于样例的度量方法
subset Accuracy:
s
u
b
s
e
t
a
c
c
=
1
p
Σ
i
=
1
p
[
h
(
x
i
)
=
Y
i
]
subsetacc = \frac{1}{p}\Sigma_{i=1}^p[h(x_i)=Y_i]
subsetacc=p1Σi=1p[h(xi)=Yi]
它测量的是完全正确的标签的比例
Accuracy:
A
c
c
(
h
)
=
1
p
Σ
i
=
1
p
∣
Y
i
⋂
h
(
x
i
)
∣
∣
Y
i
⋃
h
(
x
i
)
∣
Acc(h)=\frac{1}{p}\Sigma_{i=1}^p\frac{|Y_i\bigcap h(x_i)|}{|Y_i\bigcup h(x_i)|}
Acc(h)=p1Σi=1p∣Yi⋃h(xi)∣∣Yi⋂h(xi)∣
它衡量的是每个样例中正确标签占总标记的比例
Precision:
P
r
e
c
(
h
)
=
1
p
Σ
i
=
1
p
∣
Y
i
⋂
h
(
x
i
)
∣
∣
h
(
x
i
)
∣
Prec(h)=\frac{1}{p}\Sigma_{i=1}^p\frac{|Y_i\bigcap h(x_i)|}{|h(x_i)|}
Prec(h)=p1Σi=1p∣h(xi)∣∣Yi⋂h(xi)∣
它衡量的是每个样例中正确标签占预测的标记的比例
Recall:
R
e
c
a
l
l
(
h
)
=
1
p
Σ
i
=
1
p
∣
Y
i
⋂
h
(
x
i
)
∣
∣
Y
i
∣
Recall(h)=\frac{1}{p}\Sigma_{i=1}^p\frac{|Y_i\bigcap h(x_i)|}{|Y_i|}
Recall(h)=p1Σi=1p∣Yi∣∣Yi⋂h(xi)∣
它衡量的是每个样例中正确标签占真正标签的比例
F
β
F^\beta
Fβ度量:
F
β
(
h
)
=
(
1
+
β
2
)
⋅
P
r
e
c
i
s
i
o
n
(
h
)
⋅
R
e
c
a
l
l
(
h
)
β
2
⋅
P
r
e
c
i
s
i
o
n
(
h
)
+
R
e
c
a
l
l
(
h
)
F^\beta(h)=\frac{(1+\beta^2)\cdot Precision(h)\cdot Recall(h)}{\beta^2\cdot Precision(h)+Recall(h)}
Fβ(h)=β2⋅Precision(h)+Recall(h)(1+β2)⋅Precision(h)⋅Recall(h)
F
β
F^\beta
Fβ是Precision和Accuracy的综合度量,一般选择
β
=
1
\beta=1
β=1
One-error:
o
n
e
−
e
r
r
o
r
(
f
)
=
1
p
Σ
i
=
1
p
(
[
a
r
g
m
a
x
y
∈
Y
f
(
x
i
,
y
)
]
∉
Y
i
)
one-error(f) = \frac{1}{p}\Sigma_{i=1}^p([arg max_{y\in Y}f(x_i,y)] \notin Y_i)
one−error(f)=p1Σi=1p([argmaxy∈Yf(xi,y)]∈/Yi)
它衡量的是置信度最大的标签不在该样例的标签中比率
Coverage:
c
o
v
e
r
a
g
e
(
f
)
=
1
p
Σ
i
=
1
p
m
a
x
y
∈
Y
i
r
a
n
k
f
(
x
i
,
y
)
−
1
coverage(f)=\frac{1}{p}\Sigma_{i=1}^pmax_{y\in Y_i}rank_f(x_i,y)-1
coverage(f)=p1Σi=1pmaxy∈Yirankf(xi,y)−1
Ranking loss:
r
l
o
s
s
=
1
p
Σ
i
=
1
p
1
∣
Y
i
∣
∣
Y
ˉ
i
∣
∣
{
(
y
′
,
y
′
′
)
∣
f
(
x
i
,
y
′
)
≤
f
(
x
i
,
y
′
′
)
,
(
y
′
,
y
′
′
)
∈
Y
i
×
Y
ˉ
i
}
∣
rloss=\frac{1}{p}\Sigma_{i=1}^p\frac{1}{|Y_i||\bar{Y}_i|}|\{(y',y'')|f(x_i,y')\le f(x_i,y''), (y',y'')\in Y_i \times \bar{Y}_i\}|
rloss=p1Σi=1p∣Yi∣∣Yˉi∣1∣{(y′,y′′)∣f(xi,y′)≤f(xi,y′′),(y′,y′′)∈Yi×Yˉi}∣
average Precision:
a
v
g
p
r
e
c
(
f
)
=
1
p
Σ
i
=
1
p
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}{p}\Sigma_{i=1}^p\frac{1}{Y_i}\Sigma_{y\in Y_i}\frac{|\{y'|rank_f(x_i,y')\le rank_f(x_i,y), y'\in Y_i\}|}{rank_f(x_i,y)}
avgprec(f)=p1Σi=1pYi1Σy∈Yirankf(xi,y)∣{y′∣rankf(xi,y′)≤rankf(xi,y),y′∈Yi}∣
对于one-error, coverage, ranking loss,度量指标越小越好,对coverage来说,最优值为 1 p Σ i = 1 p ∣ Y i ∣ − 1 \frac{1}{p}\Sigma_{i=1}^p|Y_i|-1 p1Σi=1p∣Yi∣−1,对于one-error和ranking来说,最优值为0。对于基于样例的其他度量方法,值越大越好,最大值为1。
###基于标签的度量方法
基于标签的度量方法类似两类分类度量问题
T
P
j
=
∣
{
x
i
∣
y
j
∈
Y
i
∧
y
j
∈
h
(
x
i
)
,
1
≤
i
≤
p
}
∣
;
F
P
j
=
∣
{
x
i
∣
y
j
∉
Y
i
∧
y
j
∈
h
(
x
i
)
,
1
≤
i
≤
p
}
∣
;
T
N
j
=
∣
{
x
i
∣
y
j
∉
Y
i
∧
y
j
∉
h
(
x
i
)
,
1
≤
i
≤
p
}
∣
;
F
N
j
=
∣
{
x
i
∣
y
j
∈
Y
i
∧
y
j
∉
h
(
x
i
)
,
1
≤
i
≤
p
}
∣
.
TP_j=|\{x_i | y_j\in Y_i \wedge y_j\in h(x_i), 1\le i \le p\}|;\\ FP_j=|\{x_i | y_j\notin Y_i \wedge y_j\in h(x_i), 1\le i \le p\}|;\\ TN_j=|\{x_i | y_j\notin Y_i \wedge y_j\notin h(x_i), 1\le i \le p\}|;\\ FN_j=|\{x_i | y_j\in Y_i \wedge y_j\notin h(x_i), 1\le i \le p\}|.
TPj=∣{xi∣yj∈Yi∧yj∈h(xi),1≤i≤p}∣;FPj=∣{xi∣yj∈/Yi∧yj∈h(xi),1≤i≤p}∣;TNj=∣{xi∣yj∈/Yi∧yj∈/h(xi),1≤i≤p}∣;FNj=∣{xi∣yj∈Yi∧yj∈/h(xi),1≤i≤p}∣.
T
P
j
,
F
P
j
,
T
N
j
,
F
N
j
TP_j, FP_j, TN_j, FN_j
TPj,FPj,TNj,FNj分别表示true positive, false positive, true nagtive, false nagtive。
T
P
j
+
F
P
j
+
T
N
j
+
F
N
j
=
p
TP_j+FP_j+ TN_j+FN_j=p
TPj+FPj+TNj+FNj=p。
B
(
T
P
j
,
F
P
j
,
T
N
j
,
F
N
j
)
B(TP_j, FP_j, TN_j, FN_j)
B(TPj,FPj,TNj,FNj)表示具体的二分类度量如
B
∈
{
A
c
c
u
r
a
c
y
,
P
r
e
c
i
s
i
o
n
,
R
e
c
a
l
l
,
F
β
}
B\in \{Accuracy, Precision, Recall, F^\beta\}
B∈{Accuracy,Precision,Recall,Fβ}.
Macro-average:
B
m
a
c
r
o
(
h
)
=
1
q
Σ
i
=
1
q
B
(
T
P
j
,
F
P
j
,
T
N
j
,
F
N
j
)
B_{macro}(h)=\frac{1}{q}\Sigma_{i=1}^qB(TP_j, FP_j, TN_j, FN_j)
Bmacro(h)=q1Σi=1qB(TPj,FPj,TNj,FNj)
其中,
q
q
q为标签空间
Micro-average:
B
m
i
c
r
o
(
h
)
=
B
(
Σ
j
=
1
q
T
P
j
,
Σ
j
=
1
q
F
P
j
,
Σ
j
=
1
q
T
N
j
,
Σ
j
=
1
q
F
N
j
)
B_{micro}(h)=B(\Sigma_{j=1}^qTP_j,\Sigma_{j=1}^qFP_j,\Sigma_{j=1}^qTN_j,\Sigma_{j=1}^qFN_j)
Bmicro(h)=B(Σj=1qTPj,Σj=1qFPj,Σj=1qTNj,Σj=1qFNj)
对基于标签的多标签度量,度量指标越大越好,最大值为1.
深度学习的应用
在使用深度学习之前,一般使用传统的机器学习方法来进行多标签分类,其中,Zhang总结了多种分析方法。
一般深度学习应用在多标签分类中,整体的深度学习结构没有太大的差异,也就是我们常用的CNN, RNN等一些结构,多标签分类与多类分类的主要差异就是在最后输出时多类分类只要找出概率最大的那一个标签值就行了,而多标签分类是找到前几个概率最大的标签值,也就是说要设定一个阈值(threshold),这个阈值可以人为设定或根据性能度量值设定。
Berger使用了两个模型,一个是CNN,另一个是GRU模型,使用的模型结构还是普通的深度学习结构,他就是在最后模型输出时根据阈值t来确定是否给这个样本打标签i,阈值的是定是由micro-F1得分度量的。
Kurata在研究多标签分类时仍然使用了经典的CNN结构,如下图:
不过在最后的全连接层的参数系数有些特别,也就是上图中Hidden layer到output layer的系数是经过特别设置的。
假设你总共有标签的个数为5个,其分别是
Λ
=
[
λ
1
,
λ
2
,
λ
3
,
λ
4
,
,
λ
5
,
]
\Lambda=[\lambda_1,\lambda_2,\lambda_3,\lambda_4,,\lambda_5,]
Λ=[λ1,λ2,λ3,λ4,,λ5,],假设共有两个样本一个样本可能有标签为[
λ
1
,
λ
4
\lambda_1,\lambda_4
λ1,λ4],另一个样本标签为[
λ
2
,
λ
4
,
λ
5
\lambda_2,\lambda_4,\lambda_5
λ2,λ4,λ5],Hidden layer的单元个数假设为10个,
Kurata把每个样本的标签作为一个标签共现模式(label co-occurrence pattern)有多少种不同的样本标签就有多少种不同的标签共现模式,然后对Hidden layer到output layer的权重参数进行设置,如下图:
把共现的标签在系数中用一个常数C表示,其他的为0,对于这个例子,这样有2中不同的模式,因此只设定两行,系数中其他的行使用随机初始化,因此,前两行也被称为“专用神经单元”,这样经过后向传播进行训练。。
在设置那个系数时,其取常数值C可以改为正则初始化的上界
U
B
=
6
n
h
+
n
o
UB=\frac{\sqrt{6}}{\sqrt{n_h+n_o}}
UB=nh+no6,
n
h
n_h
nh和
n
o
n_o
no分别代表隐藏层和输出层单元的个数。
作者没说,但是这里需要注意一点,那就是隐藏层单元的个数至少为不同标签共现模式的个数。
Chen在多标签分类中使用的是CNN与RNN的结合体,在而RNN层使用的类似机器翻译的结构,如下图:
不过他最后使用的RNN这层结构我不敢认同,不同类别的标签可能完全不相关,例如上图中的多标签animal, US和midnight,而机器翻译的RNN结构前后标签是有一定的联系的,所以他直接使用机器翻译的RNN结构不太恰当。总体上结构上的改进不大。
Zhang使用CNN结合deepwalk方法进行多标签的分类,并产生了很好的分类效果,结构如下图。deepwalk方法是借鉴了word2vec的原理进行空间的降维及相似性比较,得到嵌入表达,它本意是把嵌入表达学习引入到社交表达图中,而在此处使用其结构进行多标签分类,这里结合的CNN与deepwalk得到嵌入表达后运用KNN算法得到最终的多标签分类。
参考文献
【Min-Ling Zhang, Zhi-Hua Zhou】A Review on Multi-Label Learning Algorithms
【Berger】Large Scale Multi-label Text Classification with SemanticWord Vectors
【Gakuto Kurata, Bing Xiang, Bowen Zhou】Improved Neural Network-based Multi-label Classification with Better Initialization Leveraging Label Co-occurrence
【Guibin Chen, Deheng Ye, Zhenchang Xing, Jieshan Chen, Erik Cambria】Ensemble Application of Convolutional and Recurrent Neural Networks for Multi-label Text Categorization
【Wenjie Zhang, Junchi Yan, Xiangfeng Wang and Hongyuan Zha】Deep Extreme Multi-label Learning
【Bryan Perozzi,Rami Al-Rfou,Steven Skiena】DeepWalk: Online Learning of Social Representations