Chapter 9 Multi-Class Classification

引言

我们在前几章研究的分类问题都是二进制的。然而,在大多数现实世界的分类问题中,类的数量大于两个。这个问题可能包括将一个主题分配到一个文本文档中,将一个类别分配到一个说话的话语中,或者将一个功能分配到一个生物序列中。在所有这些任务中,类的数量可能是几百个或更多。
在本章中,我们分析了多类分类的问题。 我们首先介绍多类分类学习问题并讨论它的多个设置,然后使用 R a d e m a c h e r Rademacher 复杂度的概念推导出它的泛化界限。 接下来,我们描述和分析了一系列用于解决多类分类问题的算法。 我们将区分两大类算法:专为多类设置设计的非组合算法,如多类 SVM、决策树或多类提升,以及基于减少到二元分类和重新计算的聚合算法。 需要训练多个二元分类器。 我们还将简要讨论结构化预测问题,这是在各种应用中出现的相关问题。

9.1 多类分类问题

X \mathcal X 表示输入空间, Y \mathcal{Y} 表示输出空间, D \mathcal D X \mathcal X 上未知的分布,根据这个分布画出输入点。我们将区分两种情况: 单标签情况,其中 y \mathcal y 是一个有限的类集合,为了方便我们用数字标记 y = { 1 k } \mathcal y = \{1,\dots ,k \} ,和多标签情况,其中 Y = 1 1 k \mathcal Y = {-1, 1}^k 在单标签情况下,每个例子都用一个类标记,而在多标签情况下,它可以用几个标记。后者可以用文本文件的例子来说明,文本文件可以用几个不同的相关主题来标记,如体育、商业和社会。 1 1 k {-1, 1} ^k 中向量的正分量表示与示例关联的类。
在任何一种情况下,学习器都会收到一个标记样本 S = ( ( x 1 , y 1 ) S=((x_1, y_1) , , ( x m , y m ) ) ( X Y ) m \dots ,(x_m, y_m))\in (X\dots Y)^m x 1 , , x m x_1, \dots, x_m 绘制的 i . i . d i.i.d . 根据 D \mathcal D ,并且 y i = f ( x i ) y_i=f(x_i) 对于所有 i [ m ] i\in [m] ,其中 f : X Y f:\mathcal X\to \mathcal Y 是目标标记函数。 因此,我们考虑一个确定性场景,如第 2.4.1 节所述,它可以直接扩展到一个允许分布在 X × Y \mathcal X\times \mathcal Y 上的随机场景。
给定一个映射 x \mathcal x y \mathcal y 的函数的假设集 H \mathcal H ,多类分类问题包括利用标记样本 S S 找到一个假设 h H h \in H ,该假设 R ( h ) R (h) 对目标 f f 有小的泛化误差:

R ( h ) = E x D [ 1 h ( x ) f ( x ) ] m o n o l a b e l c a s e ( 9.1 ) R ( h ) = E x D [ l = 1 k 1 [ h ( x ) ] l [ f ( x ) ] l ] m u l t i l a b e l c a s e . ( 9.2 ) \begin{aligned} R(h)&=\mathbb E_{x\sim D}[1_{h(x)\not = f(x)}]\qquad\qquad mono-label case\quad(9.1)\\ R(h)&=\mathbb E_{x\sim D}[\sum_{l=1}^k1_{[h(x)]_{l\not =[f(x)]_l}}]\qquad\qquad multi-label case.\quad(9.2) \end{aligned}

汉明距离 d H d_H 的概念,即不同的两个向量中对应分量的数量,可用于给出两个误差的通用公式:

R ( h ) = E x D [ d H ( h ( x ) ) , f ( s ) ) ] . ( 9.3 ) R(h)=\mathop{\mathbb E}\limits_{x\sim D}\left[d_H(h(x)),f(s))\right].\qquad\qquad(9.3)

h H h\in \mathcal H 的经验误差用 R ^ S h \widehat R_S(h) 表示,定义为

R ^ S h = 1 m i = 1 m d H ( h ( x i ) , y i ) . ( 9.4 ) \widehat R_S(h)=\frac{1}{m}\sum^m_{i=1}d_H(h(x_i),y_i).\qquad\qquad(9.4)

在多类设置中,经常会出现一些问题,包括计算和学习相关的问题。在计算上,处理大量的类是有问题的。类的数目 k k 直接进入时间复杂性的算法,我们将提出。即使对于数量相对较少的类,如 k = 100 k = 100 k = 1 , 000 k = 1,000 ,一些技术可能变得禁止在实践中使用。这种依赖关系在 k k 很大甚至是无穷大的情况下,比如在一些结构化预测问题中更为关键.
在多班教学中经常出现的一个与学习有关的问题就是班级不平衡的存在。一些类可能由少于5% 的标记样本表示,而其他类可能占据了数据的很大一部分。当使用单独的二进制分类器来定义多类解时,我们可能需要训练一个分类器来区分两个类,而训练样本中只有很小的表示。这意味着在一个小样本上进行培训,而且绩效保证很差。或者,当一大部分训练实例属于一个类时,可能会诱使人们提出一个总是返回该类的假设,因为前面定义的泛化误差可能相对较低。然而,这个琐碎的解决方案通常不是预期的。相反,损失函数可能需要通过给每对类分配不同的错误分类权重来重新表达.

猜你喜欢

转载自juejin.im/post/7018894500672045092