【干货分享】Boosting算法简单案例

Boosting算法是一种集成学习方法,通过逐步迭代训练弱分类器,并通过加权组合它们的预测结果来构建一个强分类器。

下面是Boosting算法(以AdaBoost为例)的详细过程和一个案例:

  1. 数据准备:首先,将数据集分为训练集和测试集。训练集用于训练Boosting模型,测试集用于评估模型的性能。

  2. 初始化权重:对于训练集中的每个样本,初始化一个权重,使得所有样本的权重之和为1。初始权重可以是均匀分布的,即每个样本的权重相等。

  3. 迭代训练弱分类器:循环进行以下步骤,直到达到停止条件(例如,达到最大迭代次数或分类器性能足够好):

a. 训练一个弱分类器:使用当前样本权重训练一个弱分类器,例如决策树桩(仅有一个分裂节点的决策树)。

b. 计算分类器误差:计算弱分类器在训练集上的误差,通过比较分类器的预测结果和实际标签。

c. 计算分类器权重:基于分类器的误差,计算分类器的权重。误差越小的分类器权重越大,表示分类器的预测结果对于纠正错误更有权威性。

d. 更新样本权重:根据分类器的权重和分类器的预测结果,更新每个样本的权重。被错误分类的样本权重增加,被正确分类的样本权重减少。

e. 归一化样本权重:将样本权重归一化,使得所有样本的权重之和为1。

  1. 构建强分类器:将所有弱分类器的预测结果加权组合,得到最终的强分类器。

下面是一个简单的AdaBoost算法的计算实例,假设我们有一个二元分类问题,数据集包含6个样本和2个特征(X1和X2),目标变量为类别标签(Y):

| 样本 | X1 | X2 | Y |

|------|----|----|---|

| 1 | 1 | 2 | 0 |

| 2 | 2 | 1 | 0 |

| 3 | 3 | 3 | 1 |

| 4 | 4 | 2 | 1 |

| 5 | 3 | 4 | 0 |

| 6 | 5 | 5 | 1 |

我们将构建一个包含3个弱分类器的AdaBoost模型。

  1. 初始化权重:初始权重为均匀分布,每个样本的权重为1/6。

  2. 迭代训练弱分类器:

a. 弱分类器1:使用当前样本权重训练一个弱分类器。

在第一次迭代中,我们选择一个决策树桩作为弱分类器,它选择最佳的特征和阈值进行二元分类。

  • 决策树桩选择特征X1和阈值2进行分类。样本1、2、3和5被正确分类,样本4和6被错误分类。

b. 计算分类器误差:计算弱分类器在训练集上的误差。

  • 弱分类器1误差:错误分类的样本权重之和为1/6 + 1/6 = 1/3。

c. 计算分类器权重:基于分类器的误差,计算分类器的权重。

  • 弱分类器1权重:根据误差计算公式,弱分类器1的权重为0.5 * log((1 - 1/3) / (1/3)) ≈ 0.4236。

d. 更新样本权重:根据分类器的权重和分类器的预测结果,更新每个样本的权重。

  • 被错误分类的样本权重增加,被正确分类的样本权重减少。

样本1、2、3和5的权重由1/6增加到1/6 * exp(0.4236) ≈ 0.1889。

样本4和6的权重由1/6减少到1/6 * exp(-0.4236) ≈ 0.0625。

e. 归一化样本权重:将样本权重归一化,使得所有样本的权重之和为1。

  • 归一化后的样本权重:0.1889 + 0.1889 + 0.1889 + 0.1889 + 0.0625 + 0.0625 = 1。

f. 弱分类器2和弱分类器3的训练过程与弱分类器1类似,根据更新后的样本权重训练分类器并计算权重。

  1. 构建强分类器:将所有弱分类器的预测结果加权组合,得到最终的强分类器。

强分类器的预测结果由每个弱分类器的预测结果乘以其对应的权重,然后取加权结果的符号作为最终的预测类别。

假设弱分类器1、弱分类器2和弱分类器3的权重分别为0.4236、0.5432和0.6789,它们的预测结果分别为[-1, -1, 1, 1, -1, 1],则强分类器的预测结果为:

加权结果 = 0.4236 * (-1) + 0.5432 * (-1) + 0.6789 * 1 ≈ 0.6987

最终的预测类别为sign(0.6987) = 1。

相关推荐
故事和你916 小时前
洛谷-数据结构1-1-线性表1
开发语言·数据结构·c++·算法·leetcode·动态规划·图论
脱氧核糖核酸__6 小时前
LeetCode热题100——53.最大子数组和(题解+答案+要点)
数据结构·c++·算法·leetcode
脱氧核糖核酸__7 小时前
LeetCode 热题100——42.接雨水(题目+题解+答案)
数据结构·c++·算法·leetcode
王老师青少年编程8 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【线性扫描贪心】:数列分段 Section I
c++·算法·编程·贪心·csp·信奥赛·线性扫描贪心
王老师青少年编程8 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【线性扫描贪心】:分糖果
c++·算法·贪心算法·csp·信奥赛·线性扫描贪心·分糖果
_日拱一卒8 小时前
LeetCode:2两数相加
算法·leetcode·职场和发展
py有趣8 小时前
力扣热门100题之零钱兑换
算法·leetcode
董董灿是个攻城狮8 小时前
Opus 4.7 来了,我并不建议你升级
算法
无敌昊哥战神8 小时前
【保姆级题解】力扣17. 电话号码的字母组合 (回溯算法经典入门) | Python/C/C++多语言详解
c语言·c++·python·算法·leetcode
脱氧核糖核酸__8 小时前
LeetCode热题100——238.除了自身以外数组的乘积(题目+题解+答案)
数据结构·c++·算法·leetcode