集成学习:通过简单例子演示推导SAMME算法
SAMME(Stagewise Additive Modeling using a Multiclass Exponential loss function)是对Adaboost的一种扩展,用于处理多分类问题。Adaboost本身主要用于二分类问题,而SAMME通过调整弱分类器的权重计算和最终的分类组合方式,使得它可以应用于多类别任务。SAMME算法由 Zhu 等人在 2009 年提出,它将 Ad
SAMME算法
SAMME(Stagewise Additive Modeling using a Multiclass Exponential loss function)是对Adaboost的一种扩展,用于处理多分类问题。Adaboost本身主要用于二分类问题,而SAMME通过调整弱分类器的权重计算和最终的分类组合方式,使得它可以应用于多类别任务。
SAMME算法由 Zhu 等人在 2009 年提出,它将 Adaboost 的二分类框架扩展到多分类的情境,目标是最小化多分类指数损失函数。
SAMME算法的核心思想
与 Adaboost 类似,SAMME也通过集成多个弱学习器(弱分类器)构建强学习器。SAMME 的主要特点在于:
- 扩展到多分类问题:
- 通过修改弱分类器的权重计算公式,使其适应多分类的场景。
- 多分类的加权投票机制:
- 每个弱分类器的输出被赋予一个权重,最终的强分类器通过这些弱分类器的加权投票决定最终类别。
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 轮迭代):
-
训练弱分类器:
- 在样本权重分布 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}。
-
计算加权错误率:
- 计算弱分类器的加权错误率 ϵ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=1∑nDt(i)⋅I(ht(xi)=yi)
其中 I(⋅)\mathbb{I}(\cdot)I(⋅) 是指示函数,若分类错误则为 1,否则为 0。
- 计算弱分类器的加权错误率 ϵt\epsilon_tϵt:
-
计算弱分类器权重:
- 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(K−1)
这一公式相比 Adaboost,多了 ln(K−1)\ln(K - 1)ln(K−1) 的修正项,它反映了多分类任务中类别数量 KKK 对权重的影响。
- SAMME 中弱分类器的权重 αt\alpha_tαt 的计算公式为:
-
更新样本权重分布:
- 样本权重更新公式为:
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(−αt⋅I(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=1∑nDt(i)⋅exp(−αt⋅I(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)=argmaxk∈{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=1∑Tαt⋅I(ht(x)=k)
即,对于每个类别 kkk,计算所有弱分类器中支持 kkk 类别的权重总和,选择权重总和最大的类别作为最终预测结果。
SAMME算法的关键点
-
权重修正项 ln(K−1)\ln(K-1)ln(K−1):
- Adaboost假设二分类问题,因此无需考虑类别数量的影响。
- SAMME引入了 ln(K−1)\ln(K-1)ln(K−1) 的修正项,使得权重计算能够更好地适应多分类任务。
-
加权投票:
- SAMME将所有弱分类器的预测结果进行加权投票,结合每个弱分类器的权重 αt\alpha_tαt 来决定最终分类结果。
-
指数损失函数:
- 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=1∑nexp(−t=1∑Tαt⋅I(ht(xi)=yi))
- SAMME的优化目标是最小化多分类指数损失函数:
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(K−1) |
强分类器组合方式 | 加权投票 | 加权投票 |
权重修正项 | 无 | ln(K−1)\ln(K - 1)ln(K−1) |
SAMME的优缺点
优点:
- 扩展性强:
- SAMME能够适应多分类任务,而不需要将其转化为多个二分类任务(如One-vs-One或One-vs-Rest)。
- 自适应性强:
- 与Adaboost类似,SAMME会自适应地调整样本权重,关注难分类的样本。
- 弱分类器灵活:
- SAMME对弱分类器没有特殊要求,可以结合各种能够处理多分类问题的模型。
缺点:
- 计算复杂度高:
- 多分类任务下,训练多个弱分类器和调整样本权重的计算开销较大。
- 对噪声敏感:
- 与Adaboost类似,SAMME对噪声样本较为敏感,容易过度关注异常值。
- 依赖弱分类器性能:
- 弱分类器的性能需要优于随机猜测,否则算法无法正常工作。
SAMME的变体:SAMME.R
SAMME.R 是对 SAMME 的改进,能够进一步提升多分类性能:
- 连续概率输出:
- SAMME.R 要求弱分类器输出类别的预测概率 P(y=k∣x)P(y = k | x)P(y=k∣x),而不仅是一个单一的类别预测结果。
- 权重计算公式:
- 弱分类器的权重由类别的预测概率直接计算,目标是进一步逼近真实概率分布。
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算法步骤
-
初始化样本权重
初始时,每个样本的权重相等:
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)=61≈0.1667for i=1,2,…,6 -
迭代训练弱分类器(假设迭代次数为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如果 x≤3.5如果 3.5<x≤5.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(K−1)
其中 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.33341−0.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(αt⋅I(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(α1⋅I) |
---|---|---|---|---|---|
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.3863≈0.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.3863≈0.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.1667≈0.0714 |
2 | 0.16672.3336≈0.0714\frac{0.1667}{2.3336} \approx 0.07142.33360.1667≈0.0714 |
3 | 0.66682.3336≈0.2857\frac{0.6668}{2.3336} \approx 0.28572.33360.6668≈0.2857 |
4 | 0.16672.3336≈0.0714\frac{0.1667}{2.3336} \approx 0.07142.33360.1667≈0.0714 |
5 | 0.66682.3336≈0.2857\frac{0.6668}{2.3336} \approx 0.28572.33360.6668≈0.2857 |
6 | 0.16672.3336≈0.0714\frac{0.1667}{2.3336} \approx 0.07142.33360.1667≈0.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如果 x≤2.5如果 2.5<x≤4.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如果 x≤3.5如果 3.5<x≤5.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(K−1)
代入:
α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.57141−0.5714)+ln(2)=ln(0.57140.4286)+ln(2)≈ln(0.75)+0.6931≈−0.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(αt⋅I(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(α2⋅I) |
---|---|---|---|---|---|
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.4054≈0.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.4054≈0.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.0714≈0.0625 |
2 | 0.07141.1428≈0.0625\frac{0.0714}{1.1428} \approx 0.06251.14280.0714≈0.0625 |
3 | 0.42861.1428≈0.3750\frac{0.4286}{1.1428} \approx 0.37501.14280.4286≈0.3750 |
4 | 0.07141.1428≈0.0625\frac{0.0714}{1.1428} \approx 0.06251.14280.0714≈0.0625 |
5 | 0.42861.1428≈0.3750\frac{0.4286}{1.1428} \approx 0.37501.14280.4286≈0.3750 |
6 | 0.07141.1428≈0.0625\frac{0.0714}{1.1428} \approx 0.06251.14280.0714≈0.0625 |
强分类器构建
经过2轮迭代,我们得到了两个弱分类器 h1h_1h1 和 h2h_2h2 及其权重 α1\alpha_1α1 和 α2\alpha_2α2。
最终强分类器公式:
H(x)=argmaxc∈{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=1∑Tαt⋅I(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 算法的过程,包括:
- 初始化样本权重:所有样本初始权重相等。
- 迭代训练弱分类器:
- 选择最佳弱分类器(决策桩)。
- 计算加权误差。
- 计算分类器权重 αt\alpha_tαt。
- 更新并归一化样本权重。
- 构建最终强分类器:基于所有弱分类器的加权投票。
在实际应用中,SAMME 通常会进行更多轮迭代,并使用更复杂的弱分类器(如决策树)以提升分类性能。此外,SAMME.R 是 SAMME 的一个变种,使用了概率估计,能够进一步提升性能和稳定性。
更多推荐
所有评论(0)