提升(Boosting)及 Python 示例

发布于:2025-07-16 ⋅ 阅读:(19) ⋅ 点赞:(0)

咱们结合这张图,把 “提升” 想象成 做错题本 + 请老师补课” 的过程:

  1. 第一波数据(最上面的圆圈):“第一次作业”

假设你第一次做 100 道数学题(图中圆圈里的绿点白点代表不同的题),做完后老师批改:

  1. 绿点:你做对的题;
  2. 白点:你做错的题(比如 10 道)。
  3. 第一个模型(最上面的方框):“第一次总结规律”

你根据这 100 道题,总结出一套 “解题模板”(比如 “看到‘鸡兔同笼’就用方程”),但这套模板只能做对 90 道题,10 道白点题还是错。

  1. 第二波数据(中间的圆圈):“错题本重点练”

老师把你做错的 10 道题(白点)标红,让你重点练习。同时,把原来的 100 道题重新混在一起,但这次错题的 “权重” 更高(比如每道错题算 2 道题,普通题算 1 道)。

这样,新的练习册里,错题出现的概率更大,你被迫更关注它们。

  1. 第二个模型(中间的方框):“针对错题补课”

你根据新的练习册(重点是错题),再总结一套新的解题模板(比如 “鸡兔同笼用假设法更快”)。这次,你可能把之前的 5 道错题改对了,但还有 5 道错题。

  1. 第三波数据(最下面的圆圈):“继续补漏”

老师再次把你还没改对的 5 道题标红,继续增加它们的权重,让你重点练习…… 直到你把大部分错题改对。

  1. 最终模型:“综合所有模板”

经过几轮 “做题→总结→补漏”,你有了好几套解题模板。考试时,遇到一道题,你会同时用这几套模板分析,谁在这类题上更准,就听谁的(比如第一套模板在几何题上准,第二套在应用题上准)。

提升(Boosting)的核心逻辑(对应图中箭头)

  1. 从第一波到第二波的箭头:把错误样本(白点)的权重提高,让模型更关注它们;
  2. 每个方框(模型)的箭头:每个模型都在前一个模型的错误上改进
  3. 最终所有模型的输出:能力” 加权投票(比如在某类题上表现好的模型,权重更高)。

总结

先做一套题,找出错题重点练;再做一套题,再找错题重点练…… 最后综合所有经验,谁强听谁的。”

它和装袋(Bagging)的区别是:装袋是 “平行做题,投票决定”,提升是 “串行补漏,强者主导”~

提升算法的使用示例

为了让你更直观地理解提升算法的使用,我们以一个简单的分类任务为例,使用 Python 的scikit-learn库中的AdaBoostClassifier来实现。

假设我们有一个数据集,包含一些样本的特征和对应的类别标签,我们的目标是根据这些特征来预测样本的类别。

# 导入必要的库

from sklearn.ensemble import AdaBoostClassifier

from sklearn.datasets import make_classification

from sklearn.model_selection import train_test_split

from sklearn.metrics import accuracy_score

# 生成一个示例数据集

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.3, random_state=42)

# 创建一个AdaBoost分类器对象

# n_estimators表示使用的弱学习器(这里是决策树)的数量

# random_state用于保证结果的可重复性

clf = AdaBoostClassifier(n_estimators=50, random_state=42)

# 训练模型

clf.fit(X_train, y_train)

# 在测试集上进行预测

y_pred = clf.predict(X_test)

# 计算模型的准确率

accuracy = accuracy_score(y_test, y_pred)

print(f"模型的准确率为: {accuracy}")

在这个示例中:

  1. 首先,我们生成了一个用于分类的示例数据集,其中包含 1000 个样本和 20 个特征。
  2. 然后,我们将数据集划分为训练集和测试集,训练集用于训练模型,测试集用于评估模型的性能。
  3. 接着,我们创建了一个AdaBoostClassifier对象,设置了使用 50 个弱学习器(这里默认是决策树)。
  4. 然后,我们使用训练集对模型进行训练,模型会按照提升算法的原理,逐步构建一系列的弱学习器,并不断调整样本的权重,使得后续的弱学习器更关注那些被之前的弱学习器错误分类的样本。
  5. 训练完成后,我们使用测试集对模型进行预测,并计算模型的准确率来评估其性能。

通过这个示例,你可以看到提升算法是如何通过逐步改进模型来提高分类准确率的。在实际应用中,你可以根据具体的问题和数据特点,选择合适的提升算法和参数,以获得更好的性能。


网站公告

今日签到

点亮在社区的每一天
去签到