目录
1. AdaBoost 的核心思想
2. AdaBoost 的关键步骤
步骤 1:初始化样本权重
步骤 2:迭代训练弱分类器
步骤 3:组合弱分类器
3. 用例子详解 AdaBoost
数据集:
迭代过程:
第1轮(t=1):
第2轮(t=2):
第3轮(t=3):
最终强分类器:
4. AdaBoost 的优缺点
优点:
缺点:
5. Python 实现(基于 Scikit-learn)
6. 总结
1. AdaBoost 的核心思想
一句话总结:
“知错能改,逐步提升”
AdaBoost 是一种串行集成学习算法,通过迭代训练多个弱分类器(如决策树桩),每次重点关注前一个分类器分错的样本,最终将所有弱分类器组合成一个强分类器。
2. AdaBoost 的关键步骤
步骤 1:初始化样本权重
- 初始权重:每个样本的权重相同,总和为1。
例如:如果有10个样本,初始权重均为0.1
。
步骤 2:迭代训练弱分类器
在每次迭代中:
- 训练弱分类器:基于当前权重分布,找到一个分类误差最小的弱分类器(如决策树桩)。
- 计算分类误差率:
其中 (D_t(i)) 是第 (t) 轮样本 (i) 的权重,II 是指示函数(分类错误时为1)。 - 计算弱分类器的权重:
误差率越低的分类器,权重 αt 越大。 - 更新样本权重:
-
- 分类错误的样本权重会被放大,分类正确的权重会被缩小。
- (Z_t) 是归一化因子,确保权重总和为1。
步骤 3:组合弱分类器
最终强分类器为:
即所有弱分类器的加权投票结果。
3. 用例子详解 AdaBoost
数据集:
序号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
x | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
y | +1 | +1 | +1 | -1 | -1 | -1 | +1 | +1 | +1 | -1 |
目标:通过 AdaBoost 组合多个决策树桩(仅分裂一次的决策树)。
迭代过程:
第1轮(t=1):
- 初始权重:所有样本权重均为
0.1
。 - 训练弱分类器:选择分裂点
x ≤ 2.5
,将数据分为两类:
-
- 左侧(x ≤ 2.5)预测为
+1
,右侧预测为-1
。
- 左侧(x ≤ 2.5)预测为
- 计算误差率:
-
- 分错的样本是序号7、8、9(真实标签为
+1
,但被预测为-1
),误差率:
- 分错的样本是序号7、8、9(真实标签为
- 计算分类器权重:
- 更新权重:
- 分错的样本权重放大,分对的缩小。新权重分布 (D_2) 如下:
序号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
D2 | 0.071 | 0.071 | 0.071 | 0.071 | 0.071 | 0.071 | 0.167 | 0.167 | 0.167 | 0.071 |
第2轮(t=2):
- 训练弱分类器:选择分裂点
x ≤ 8.5
,将数据分为两类:
-
- 左侧(x ≤ 8.5)预测为
+1
,右侧预测为-1
。
- 左侧(x ≤ 8.5)预测为
- 计算误差率:
-
- 分错的样本是序号4、5、6(真实标签为
-1
,但被预测为+1
),误差率:
- 分错的样本是序号4、5、6(真实标签为
- 计算分类器权重:
- 更新权重:
序号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
D3 | 0.045 | 0.045 | 0.045 | 0.167 | 0.167 | 0.167 | 0.106 | 0.106 | 0.106 | 0.045 |
-
- 分错的样本权重放大,新权重分布 (D_3) 如下:
第3轮(t=3):
- 训练弱分类器:选择分裂点
x > 5.5
,将数据分为两类:
-
- 右侧(x > 5.5)预测为
+1
,左侧预测为-1
。
- 右侧(x > 5.5)预测为
- 计算误差率:
-
- 分错的样本是序号10(真实标签为
-1
,但被预测为+1
),误差率:
- 分错的样本是序号10(真实标签为
- 计算分类器权重:
- 更新权重:
-
- 最终所有样本被正确分类,训练结束。
最终强分类器:
通过加权投票,最终分类器可以正确分类所有样本。
4. AdaBoost 的优缺点
优点:
- 高精度:通过逐步优化,最终模型的泛化能力很强。
- 自动关注难样本:分错的样本会被赋予更高权重,后续模型重点学习。
- 简单高效:基分类器通常为决策树桩,计算速度快。
缺点:
- 对噪声敏感:异常值可能被过度关注,导致过拟合。
- 需调整参数:如迭代次数(
n_estimators
)和学习率(learning_rate
)。
5. Python 实现(基于 Scikit-learn)
from sklearn.ensemble import AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split# 生成模拟数据
X, y = make_classification(n_samples=1000, n_features=20, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# AdaBoost 模型(使用决策树桩作为基分类器)
model = AdaBoostClassifier(base_estimator=DecisionTreeClassifier(max_depth=1), # 弱分类器n_estimators=50, # 迭代次数learning_rate=1.0, # 学习率(控制每个分类器的权重缩放)random_state=42
)# 训练与预测
model.fit(X_train, y_train)
print("测试集准确率:", model.score(X_test, y_test))
6. 总结
- 核心思想:通过迭代调整样本权重,让模型逐步关注难分类的样本。
- 关键公式:误差率 (e_t)、分类器权重 (\alpha_t)、权重更新公式。
- 应用场景:分类问题(如文本分类、图像识别),尤其适合数据分布不均衡的情况。
7. 通俗比喻:班级考试
- 第1次考试 :所有学生权重相同,老师根据错误重点讲解。
- 第2次考试 :之前错题权重增加,学生更关注这些题。
- 最终成绩 :多次考试成绩加权平均,最终得分更准确。