SAMME算法

SAMME(Stagewise Additive Modeling using a Multiclass Exponential loss function)是对Adaboost的一种扩展,用于处理多分类问题。Adaboost本身主要用于二分类问题,而SAMME通过调整弱分类器的权重计算和最终的分类组合方式,使得它可以应用于多类别任务。

SAMME算法由 Zhu 等人在 2009 年提出,它将 Adaboost 的二分类框架扩展到多分类的情境,目标是最小化多分类指数损失函数。


SAMME算法的核心思想

与 Adaboost 类似,SAMME也通过集成多个弱学习器(弱分类器)构建强学习器。SAMME 的主要特点在于:

  1. 扩展到多分类问题
    • 通过修改弱分类器的权重计算公式,使其适应多分类的场景。
  2. 多分类的加权投票机制
    • 每个弱分类器的输出被赋予一个权重,最终的强分类器通过这些弱分类器的加权投票决定最终类别。

SAMME使用的弱学习器可以是任何能够处理多分类问题的模型(如决策树)。


SAMME算法的步骤

假设我们有一个多分类数据集:
D={(x1,y1),(x2,y2),…,(xn,yn)},yi∈{1,2,…,K} \mathcal{D} = \{(x_1, y_1), (x_2, y_2), \dots, (x_n, y_n)\}, \quad y_i \in \{1, 2, \dots, K\} D={(x1,y1),(x2,y2),,(xn,yn)},yi{1,2,,K}
其中 KKK 是类别的数量。

SAMME的训练过程如下:

1. 初始化样本权重

与Adaboost相同,初始时每个样本的权重是相等的:
D1(i)=1n,i=1,2,…,n D_1(i) = \frac{1}{n}, \quad i = 1, 2, \dots, n D1(i)=n1,i=1,2,,n

2. 迭代训练弱分类器

对于 t=1,2,…,Tt = 1, 2, \dots, Tt=1,2,,T(总共 TTT 轮迭代):

  1. 训练弱分类器

    • 在样本权重分布 DtD_tDt 下,训练弱分类器 ht(x)h_t(x)ht(x),输出类别预测 ht(x)∈{1,2,…,K}h_t(x) \in \{1, 2, \dots, K\}ht(x){1,2,,K}
  2. 计算加权错误率

    • 计算弱分类器的加权错误率 ϵt\epsilon_tϵt
      ϵt=∑i=1nDt(i)⋅I(ht(xi)≠yi) \epsilon_t = \sum_{i=1}^n D_t(i) \cdot \mathbb{I}(h_t(x_i) \neq y_i) ϵt=i=1nDt(i)I(ht(xi)=yi)
      其中 I(⋅)\mathbb{I}(\cdot)I() 是指示函数,若分类错误则为 1,否则为 0。
  3. 计算弱分类器权重

    • SAMME 中弱分类器的权重 αt\alpha_tαt 的计算公式为:
      αt=ln⁡(1−ϵtϵt)+ln⁡(K−1) \alpha_t = \ln\left(\frac{1 - \epsilon_t}{\epsilon_t}\right) + \ln(K - 1) αt=ln(ϵt1ϵt)+ln(K1)
      这一公式相比 Adaboost,多了 ln⁡(K−1)\ln(K - 1)ln(K1) 的修正项,它反映了多分类任务中类别数量 KKK 对权重的影响。
  4. 更新样本权重分布

    • 样本权重更新公式为:
      Dt+1(i)=Dt(i)⋅exp⁡(−αt⋅I(ht(xi)=yi))Zt D_{t+1}(i) = \frac{D_t(i) \cdot \exp\left(-\alpha_t \cdot \mathbb{I}(h_t(x_i) = y_i)\right)}{Z_t} Dt+1(i)=ZtDt(i)exp(αtI(ht(xi)=yi))
      其中 ZtZ_tZt 是归一化因子:
      Zt=∑i=1nDt(i)⋅exp⁡(−αt⋅I(ht(xi)=yi)) Z_t = \sum_{i=1}^n D_t(i) \cdot \exp\left(-\alpha_t \cdot \mathbb{I}(h_t(x_i) = y_i)\right) Zt=i=1nDt(i)exp(αtI(ht(xi)=yi))
      • ht(xi)=yih_t(x_i) = y_iht(xi)=yi(分类正确),则样本权重减少。
      • ht(xi)≠yih_t(x_i) \neq y_iht(xi)=yi(分类错误),则样本权重增加。
3. 构建强分类器

最终的强分类器 H(x)H(x)H(x) 是所有弱分类器的加权组合,定义为:
H(x)=arg⁡max⁡k∈{1,2,…,K}∑t=1Tαt⋅I(ht(x)=k) H(x) = \arg\max_{k \in \{1, 2, \dots, K\}} \sum_{t=1}^T \alpha_t \cdot \mathbb{I}(h_t(x) = k) H(x)=argk{1,2,,K}maxt=1TαtI(ht(x)=k)
即,对于每个类别 kkk,计算所有弱分类器中支持 kkk 类别的权重总和,选择权重总和最大的类别作为最终预测结果。


SAMME算法的关键点

  1. 权重修正项 ln⁡(K−1)\ln(K-1)ln(K1)

    • Adaboost假设二分类问题,因此无需考虑类别数量的影响。
    • SAMME引入了 ln⁡(K−1)\ln(K-1)ln(K1) 的修正项,使得权重计算能够更好地适应多分类任务。
  2. 加权投票

    • SAMME将所有弱分类器的预测结果进行加权投票,结合每个弱分类器的权重 αt\alpha_tαt 来决定最终分类结果。
  3. 指数损失函数

    • SAMME的优化目标是最小化多分类指数损失函数:
      L=∑i=1nexp⁡(−∑t=1Tαt⋅I(ht(xi)=yi)) \mathcal{L} = \sum_{i=1}^n \exp\left(- \sum_{t=1}^T \alpha_t \cdot \mathbb{I}(h_t(x_i) = y_i)\right) L=i=1nexp(t=1TαtI(ht(xi)=yi))

SAMME和Adaboost的对比

特性 Adaboost SAMME
任务类型 二分类 多分类
弱分类器权重公式 αt=12ln⁡(1−ϵtϵt)\alpha_t = \frac{1}{2} \ln\left(\frac{1 - \epsilon_t}{\epsilon_t}\right)αt=21ln(ϵt1ϵt) αt=ln⁡(1−ϵtϵt)+ln⁡(K−1)\alpha_t = \ln\left(\frac{1 - \epsilon_t}{\epsilon_t}\right) + \ln(K - 1)αt=ln(ϵt1ϵt)+ln(K1)
强分类器组合方式 加权投票 加权投票
权重修正项 ln⁡(K−1)\ln(K - 1)ln(K1)

SAMME的优缺点

优点
  1. 扩展性强
    • SAMME能够适应多分类任务,而不需要将其转化为多个二分类任务(如One-vs-One或One-vs-Rest)。
  2. 自适应性强
    • 与Adaboost类似,SAMME会自适应地调整样本权重,关注难分类的样本。
  3. 弱分类器灵活
    • SAMME对弱分类器没有特殊要求,可以结合各种能够处理多分类问题的模型。
缺点
  1. 计算复杂度高
    • 多分类任务下,训练多个弱分类器和调整样本权重的计算开销较大。
  2. 对噪声敏感
    • 与Adaboost类似,SAMME对噪声样本较为敏感,容易过度关注异常值。
  3. 依赖弱分类器性能
    • 弱分类器的性能需要优于随机猜测,否则算法无法正常工作。

SAMME的变体:SAMME.R

SAMME.R 是对 SAMME 的改进,能够进一步提升多分类性能:

  1. 连续概率输出
    • SAMME.R 要求弱分类器输出类别的预测概率 P(y=k∣x)P(y = k | x)P(y=kx),而不仅是一个单一的类别预测结果。
  2. 权重计算公式
    • 弱分类器的权重由类别的预测概率直接计算,目标是进一步逼近真实概率分布。

SAMME.R 的表现通常优于 SAMME,尤其在弱分类器能够输出概率的情况下。

示例

假设我们有一个三分类问题,数据集如下:

样本 特征 xxx 标签 yyy
1 1 A
2 2 A
3 3 B
4 4 B
5 5 C
6 6 C

我们将使用 SAMME 算法,通过迭代地训练弱分类器(在本例中,我们选择简单的决策桩作为弱分类器)来构建一个强分类器。假设我们进行 2 轮迭代。

SAMME算法步骤

  1. 初始化样本权重

    初始时,每个样本的权重相等:
    wi(1)=16≈0.1667for i=1,2,…,6 w_i^{(1)} = \frac{1}{6} \approx 0.1667 \quad \text{for } i = 1, 2, \dots, 6 wi(1)=610.1667for i=1,2,,6

  2. 迭代训练弱分类器(假设迭代次数为2)

第1轮迭代

a. 选择最佳弱分类器

我们选择一个简单的决策桩,根据特征 xxx 的阈值进行分类。假设我们选择阈值 θ=3.5\theta = 3.5θ=3.5,分类规则如下:

h1(x)={A如果 x≤3.5B如果 3.5<x≤5.5C如果 x>5.5 h_1(x) = \begin{cases} A & \text{如果 } x \leq 3.5 \\ B & \text{如果 } 3.5 < x \leq 5.5 \\ C & \text{如果 } x > 5.5 \end{cases} h1(x)= ABC如果 x3.5如果 3.5<x5.5如果 x>5.5

b. 计算加权误差

SAMME 的加权误差定义为:

ϵt=∑i=1Nwi(t)⋅I(ht(xi)≠yi)∑i=1Nwi(t) \epsilon_t = \frac{\sum_{i=1}^N w_i^{(t)} \cdot \mathbb{I}(h_t(x_i) \neq y_i)}{\sum_{i=1}^N w_i^{(t)}} ϵt=i=1Nwi(t)i=1Nwi(t)I(ht(xi)=yi)

对于第1轮,计算每个样本的分类结果与真实标签的对比:

样本 xxx yyy h1(x)h_1(x)h1(x) 错误? wi(1)⋅Iw_i^{(1)} \cdot \mathbb{I}wi(1)I
1 1 A A 0
2 2 A A 0
3 3 B A 0.1667
4 4 B B 0
5 5 C B 0.1667
6 6 C C 0

加权误差:
ϵ1=0.1667+0.1667=0.3334 \epsilon_1 = 0.1667 + 0.1667 = 0.3334 ϵ1=0.1667+0.1667=0.3334

c. 计算分类器权重 α1\alpha_1α1

SAMME 中分类器权重的计算公式为:

αt=ln⁡(1−ϵtϵt)+ln⁡(K−1) \alpha_t = \ln\left(\frac{1 - \epsilon_t}{\epsilon_t}\right) + \ln(K - 1) αt=ln(ϵt1ϵt)+ln(K1)

其中 KKK 是类别数,这里 K=3K = 3K=3

计算:
α1=ln⁡(1−0.33340.3334)+ln⁡(2)=ln⁡(2)+ln⁡(2)=2ln⁡(2)≈1.3863 \alpha_1 = \ln\left(\frac{1 - 0.3334}{0.3334}\right) + \ln(2) = \ln(2) + \ln(2) = 2 \ln(2) \approx 1.3863 α1=ln(0.333410.3334)+ln(2)=ln(2)+ln(2)=2ln(2)1.3863

d. 更新样本权重

样本权重更新公式为:

wi(t+1)=wi(t)⋅exp⁡(αt⋅I(ht(xi)≠yi)) w_i^{(t+1)} = w_i^{(t)} \cdot \exp\left(\alpha_t \cdot \mathbb{I}(h_t(x_i) \neq y_i)\right) wi(t+1)=wi(t)exp(αtI(ht(xi)=yi))

具体计算:

样本 yiy_iyi h1(xi)h_1(x_i)h1(xi) 错误? I\mathbb{I}I wi(1)⋅exp⁡(α1⋅I)w_i^{(1)} \cdot \exp(\alpha_1 \cdot \mathbb{I})wi(1)exp(α1I)
1 A A 0 0.1667×e0=0.16670.1667 \times e^{0} = 0.16670.1667×e0=0.1667
2 A A 0 0.1667×e0=0.16670.1667 \times e^{0} = 0.16670.1667×e0=0.1667
3 B A 1 0.1667×e1.3863≈0.1667×4=0.66680.1667 \times e^{1.3863} \approx 0.1667 \times 4 = 0.66680.1667×e1.38630.1667×4=0.6668
4 B B 0 0.1667×e0=0.16670.1667 \times e^{0} = 0.16670.1667×e0=0.1667
5 C B 1 0.1667×e1.3863≈0.66680.1667 \times e^{1.3863} \approx 0.66680.1667×e1.38630.6668
6 C C 0 0.1667×e0=0.16670.1667 \times e^{0} = 0.16670.1667×e0=0.1667

归一化权重

计算总和 Z1Z_1Z1
Z1=0.1667+0.1667+0.6668+0.1667+0.6668+0.1667=2.3336 Z_1 = 0.1667 + 0.1667 + 0.6668 + 0.1667 + 0.6668 + 0.1667 = 2.3336 Z1=0.1667+0.1667+0.6668+0.1667+0.6668+0.1667=2.3336

归一化后的权重 wi(2)w_i^{(2)}wi(2)

wi(2)=wi(2)Z1 w_i^{(2)} = \frac{w_i^{(2)}}{Z_1} wi(2)=Z1wi(2)

样本 wi(2)w_i^{(2)}wi(2)
1 0.16672.3336≈0.0714\frac{0.1667}{2.3336} \approx 0.07142.33360.16670.0714
2 0.16672.3336≈0.0714\frac{0.1667}{2.3336} \approx 0.07142.33360.16670.0714
3 0.66682.3336≈0.2857\frac{0.6668}{2.3336} \approx 0.28572.33360.66680.2857
4 0.16672.3336≈0.0714\frac{0.1667}{2.3336} \approx 0.07142.33360.16670.0714
5 0.66682.3336≈0.2857\frac{0.6668}{2.3336} \approx 0.28572.33360.66680.2857
6 0.16672.3336≈0.0714\frac{0.1667}{2.3336} \approx 0.07142.33360.16670.0714
第2轮迭代

a. 选择最佳弱分类器

基于更新后的权重,我们选择另一个决策桩。假设这次我们选择阈值 θ=4.5\theta = 4.5θ=4.5,分类规则如下:

h2(x)={A如果 x≤2.5B如果 2.5<x≤4.5C如果 x>4.5 h_2(x) = \begin{cases} A & \text{如果 } x \leq 2.5 \\ B & \text{如果 } 2.5 < x \leq 4.5 \\ C & \text{如果 } x > 4.5 \end{cases} h2(x)= ABC如果 x2.5如果 2.5<x4.5如果 x>4.5

b. 计算加权误差

计算每个样本的分类结果与真实标签的对比:

样本 xxx yyy h2(x)h_2(x)h2(x) 错误? wi(2)⋅Iw_i^{(2)} \cdot \mathbb{I}wi(2)I
1 1 A A 0
2 2 A A 0
3 3 B B 0
4 4 B B 0
5 5 C C 0
6 6 C C 0

加权误差:
ϵ2=0 \epsilon_2 = 0 ϵ2=0

注意:在实际应用中,若 (\epsilon_t = 0),意味着当前分类器已经完美分类所有样本,此时 SAMME 会提前终止迭代,并将当前分类器作为最终强分类器。但为了完整演示,我们假设 ϵ2≠0\epsilon_2 \neq 0ϵ2=0 并重新选择一个弱分类器。

调整弱分类器选择

假设我们选择阈值 θ=3.5\theta = 3.5θ=3.5 ,即与第1轮相同的分类器,这样:

h2(x)={A如果 x≤3.5B如果 3.5<x≤5.5C如果 x>5.5 h_2(x) = \begin{cases} A & \text{如果 } x \leq 3.5 \\ B & \text{如果 } 3.5 < x \leq 5.5 \\ C & \text{如果 } x > 5.5 \end{cases} h2(x)= ABC如果 x3.5如果 3.5<x5.5如果 x>5.5

重新计算误差:

样本 xxx yyy h2(x)h_2(x)h2(x) 错误? wi(2)⋅Iw_i^{(2)} \cdot \mathbb{I}wi(2)I
1 1 A A 0
2 2 A A 0
3 3 B A 0.2857
4 4 B B 0
5 5 C B 0.2857
6 6 C C 0

加权误差:
ϵ2=0.2857+0.2857=0.5714 \epsilon_2 = 0.2857 + 0.2857 = 0.5714 ϵ2=0.2857+0.2857=0.5714

由于 (\epsilon_2 > \frac{K - 1}{K} = \frac{2}{3} \approx 0.6667),分类器的错误率在允许范围内(即 (\epsilon_t < 1 - \frac{1}{K})),所以继续计算。

c. 计算分类器权重 α2\alpha_2α2

αt=ln⁡(1−ϵtϵt)+ln⁡(K−1) \alpha_t = \ln\left(\frac{1 - \epsilon_t}{\epsilon_t}\right) + \ln(K - 1) αt=ln(ϵt1ϵt)+ln(K1)

代入:
α2=ln⁡(1−0.57140.5714)+ln⁡(2)=ln⁡(0.42860.5714)+ln⁡(2)≈ln⁡(0.75)+0.6931≈−0.2877+0.6931=0.4054 \alpha_2 = \ln\left(\frac{1 - 0.5714}{0.5714}\right) + \ln(2) = \ln\left(\frac{0.4286}{0.5714}\right) + \ln(2) \approx \ln(0.75) + 0.6931 \approx -0.2877 + 0.6931 = 0.4054 α2=ln(0.571410.5714)+ln(2)=ln(0.57140.4286)+ln(2)ln(0.75)+0.69310.2877+0.6931=0.4054

d. 更新样本权重

样本权重更新公式为:

wi(t+1)=wi(t)⋅exp⁡(αt⋅I(ht(xi)≠yi)) w_i^{(t+1)} = w_i^{(t)} \cdot \exp\left(\alpha_t \cdot \mathbb{I}(h_t(x_i) \neq y_i)\right) wi(t+1)=wi(t)exp(αtI(ht(xi)=yi))

具体计算:

样本 yiy_iyi h2(xi)h_2(x_i)h2(xi) 错误? I\mathbb{I}I wi(2)×exp⁡(α2⋅I)w_i^{(2)} \times \exp(\alpha_2 \cdot \mathbb{I})wi(2)×exp(α2I)
1 A A 0 0.0714×e0=0.07140.0714 \times e^{0} = 0.07140.0714×e0=0.0714
2 A A 0 0.0714×e0=0.07140.0714 \times e^{0} = 0.07140.0714×e0=0.0714
3 B A 1 0.2857×e0.4054≈0.2857×1.5=0.42860.2857 \times e^{0.4054} \approx 0.2857 \times 1.5 = 0.42860.2857×e0.40540.2857×1.5=0.4286
4 B B 0 0.0714×e0=0.07140.0714 \times e^{0} = 0.07140.0714×e0=0.0714
5 C B 1 0.2857×e0.4054≈0.42860.2857 \times e^{0.4054} \approx 0.42860.2857×e0.40540.4286
6 C C 0 0.0714×e0=0.07140.0714 \times e^{0} = 0.07140.0714×e0=0.0714

归一化权重

计算总和 Z2Z_2Z2
Z2=0.0714+0.0714+0.4286+0.0714+0.4286+0.0714=1.1428 Z_2 = 0.0714 + 0.0714 + 0.4286 + 0.0714 + 0.4286 + 0.0714 = 1.1428 Z2=0.0714+0.0714+0.4286+0.0714+0.4286+0.0714=1.1428

归一化后的权重 wi(3)w_i^{(3)}wi(3)

wi(3)=wi(3)Z2 w_i^{(3)} = \frac{w_i^{(3)}}{Z_2} wi(3)=Z2wi(3)

样本 wi(3)w_i^{(3)}wi(3)
1 0.07141.1428≈0.0625\frac{0.0714}{1.1428} \approx 0.06251.14280.07140.0625
2 0.07141.1428≈0.0625\frac{0.0714}{1.1428} \approx 0.06251.14280.07140.0625
3 0.42861.1428≈0.3750\frac{0.4286}{1.1428} \approx 0.37501.14280.42860.3750
4 0.07141.1428≈0.0625\frac{0.0714}{1.1428} \approx 0.06251.14280.07140.0625
5 0.42861.1428≈0.3750\frac{0.4286}{1.1428} \approx 0.37501.14280.42860.3750
6 0.07141.1428≈0.0625\frac{0.0714}{1.1428} \approx 0.06251.14280.07140.0625
强分类器构建

经过2轮迭代,我们得到了两个弱分类器 h1h_1h1h2h_2h2 及其权重 α1\alpha_1α1α2\alpha_2α2

最终强分类器公式:

H(x)=arg⁡max⁡c∈{A,B,C}(∑t=1Tαt⋅I(ht(x)=c)) H(x) = \arg\max_{c \in \{A, B, C\}} \left( \sum_{t=1}^T \alpha_t \cdot \mathbb{I}(h_t(x) = c) \right) H(x)=argc{A,B,C}max(t=1TαtI(ht(x)=c))

具体来说,对于每个类别 ccc,计算所有弱分类器预测为 ccc 时的 αt\alpha_tαt 之和,选择总和最大的类别作为最终预测。

例如,对于一个新样本 xxx

假设 x=3x = 3x=3

  • h1(3)=Ah_1(3) = Ah1(3)=A
  • h2(3)=Ah_2(3) = Ah2(3)=A

计算:

  • 类别 A 的得分:α1+α2=1.3863+0.4054=1.7917\alpha_1 + \alpha_2 = 1.3863 + 0.4054 = 1.7917α1+α2=1.3863+0.4054=1.7917
  • 类别 B 的得分:0
  • 类别 C 的得分:0

最终预测:A

总结

通过上述步骤,我们手动推导了 SAMME 算法的过程,包括:

  1. 初始化样本权重:所有样本初始权重相等。
  2. 迭代训练弱分类器
    • 选择最佳弱分类器(决策桩)。
    • 计算加权误差。
    • 计算分类器权重 αt\alpha_tαt
    • 更新并归一化样本权重。
  3. 构建最终强分类器:基于所有弱分类器的加权投票。

在实际应用中,SAMME 通常会进行更多轮迭代,并使用更复杂的弱分类器(如决策树)以提升分类性能。此外,SAMME.R 是 SAMME 的一个变种,使用了概率估计,能够进一步提升性能和稳定性。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐