咱们结合这张图,把 “提升” 想象成 “做错题本 + 请老师补课” 的过程:
- 第一波数据(最上面的圆圈):“第一次作业”
假设你第一次做 100 道数学题(图中圆圈里的绿点白点代表不同的题),做完后老师批改:
- 绿点:你做对的题;
- 白点:你做错的题(比如 10 道)。
- 第一个模型(最上面的方框):“第一次总结规律”
你根据这 100 道题,总结出一套 “解题模板”(比如 “看到‘鸡兔同笼’就用方程”),但这套模板只能做对 90 道题,10 道白点题还是错。
- 第二波数据(中间的圆圈):“错题本重点练”
老师把你做错的 10 道题(白点)标红,让你重点练习。同时,把原来的 100 道题重新混在一起,但这次错题的 “权重” 更高(比如每道错题算 2 道题,普通题算 1 道)。
这样,新的练习册里,错题出现的概率更大,你被迫更关注它们。
- 第二个模型(中间的方框):“针对错题补课”
你根据新的练习册(重点是错题),再总结一套新的解题模板(比如 “鸡兔同笼用假设法更快”)。这次,你可能把之前的 5 道错题改对了,但还有 5 道错题。
- 第三波数据(最下面的圆圈):“继续补漏”
老师再次把你还没改对的 5 道题标红,继续增加它们的权重,让你重点练习…… 直到你把大部分错题改对。
- 最终模型:“综合所有模板”
经过几轮 “做题→总结→补漏”,你有了好几套解题模板。考试时,遇到一道题,你会同时用这几套模板分析,谁在这类题上更准,就听谁的(比如第一套模板在几何题上准,第二套在应用题上准)。
提升(Boosting)的核心逻辑(对应图中箭头)
- 从第一波到第二波的箭头:把错误样本(白点)的权重提高,让模型更关注它们;
- 每个方框(模型)的箭头:每个模型都在前一个模型的错误上改进;
- 最终所有模型的输出:按 “能力” 加权投票(比如在某类题上表现好的模型,权重更高)。
总结
“先做一套题,找出错题重点练;再做一套题,再找错题重点练…… 最后综合所有经验,谁强听谁的。”
它和装袋(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}") |
在这个示例中:
- 首先,我们生成了一个用于分类的示例数据集,其中包含 1000 个样本和 20 个特征。
- 然后,我们将数据集划分为训练集和测试集,训练集用于训练模型,测试集用于评估模型的性能。
- 接着,我们创建了一个AdaBoostClassifier对象,设置了使用 50 个弱学习器(这里默认是决策树)。
- 然后,我们使用训练集对模型进行训练,模型会按照提升算法的原理,逐步构建一系列的弱学习器,并不断调整样本的权重,使得后续的弱学习器更关注那些被之前的弱学习器错误分类的样本。
- 训练完成后,我们使用测试集对模型进行预测,并计算模型的准确率来评估其性能。
通过这个示例,你可以看到提升算法是如何通过逐步改进模型来提高分类准确率的。在实际应用中,你可以根据具体的问题和数据特点,选择合适的提升算法和参数,以获得更好的性能。