机器学习之 AdaBoost(Adaptive Boosting)

机器学习之 AdaBoost(Adaptive Boosting)


AdaBoost(Adaptive Boosting)是一种集成学习方法,主要用于提升弱分类器的性能,通过组合多个弱分类器(例如决策树)来构建一个强分类器。

AdaBoost在1995年由Yoav Freund和Robert Schapire提出,并且在机器学习领域得到了广泛的应用。

基本介绍

AdaBoost的基本思想是迭代地训练一系列弱分类器,每个弱分类器针对训练数据集进行训练,并根据上一个弱分类器的结果对数据进行加权。在每一轮迭代中,AdaBoost都会关注上一轮分类错误的样本,尝试通过调整权重使得这些样本在下一轮分类中得到更好的处理。最终,将这些弱分类器组合成一个强分类器,其性能优于单个弱分类器。

核心原理

  1. 初始化样本权重: 将每个样本的权重初始化为相等值。
  2. 迭代训练: 在每一轮迭代中,根据当前样本权重训练一个弱分类器。
  3. 计算错误率: 使用训练好的弱分类器对样本进行分类,并计算分类错误的样本的权重之和。
  4. 更新样本权重: 对于分类错误的样本,增加其权重,使其在下一轮迭代中更受关注;而对于分类正确的样本,减小其权重,降低其在下一轮迭代中的影响。
  5. 组合弱分类器: 根据每个弱分类器的分类准确性(权重),组合这些弱分类器得到一个强分类器。

公式推理


这样,分类错误率较低的弱分类器在最终的强分类器中会被赋予更大的权重,从而更大程度上影响最终的分类结果。

代码案例

使用多项式数据来演示AdaBoost回归器的效果,并且绘制了两个不同数量基学习器的情况下的回归结果。

python 复制代码
import numpy as np
import matplotlib.pyplot as plt
from sklearn.ensemble import AdaBoostRegressor
from sklearn.tree import DecisionTreeRegressor
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import make_pipeline

# 生成多项式数据
np.random.seed(42)
X = np.random.rand(500) * 10
y = np.sin(X) + np.random.normal(0, 0.5, 500)

# 将数据转换成二维数组
X = X[:, np.newaxis]

# 定义基学习器
base_regressor = DecisionTreeRegressor(max_depth=4)

# 定义AdaBoost回归器
regr_1 = AdaBoostRegressor(base_regressor, n_estimators=10, random_state=42)
regr_2 = AdaBoostRegressor(base_regressor, n_estimators=100, random_state=42)

# 训练模型
regr_1.fit(X, y)
regr_2.fit(X, y)

# 生成预测结果
X_test = np.linspace(0, 10, 500)[:, np.newaxis]
y_1 = regr_1.predict(X_test)
y_2 = regr_2.predict(X_test)

# 绘制结果
plt.figure(figsize=(10, 6))
plt.scatter(X, y, c='b', label='Training samples')
plt.plot(X_test, y_1, c='r', label='n_estimators=10', linewidth=2)
plt.plot(X_test, y_2, c='g', label='n_estimators=100', linewidth=2)
plt.xlabel('Data')
plt.ylabel('Target')
plt.title('AdaBoost Regression with Polynomial Features')
plt.legend()
plt.show()

首先,生成了一些多项式数据,然后使用了决策树回归器作为基学习器,并且分别使用了10个和100个基学习器的AdaBoost回归器进行拟合。

最后,我们绘制出了原始数据以及两种情况下的拟合结果。

树回归器作为基学习器,并且分别使用了10个和100个基学习器的AdaBoost回归器进行拟合。

最后,我们绘制出了原始数据以及两种情况下的拟合结果。

相关推荐
数据智能老司机4 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机5 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机5 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机5 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i5 小时前
drf初步梳理
python·django
每日AI新事件5 小时前
python的异步函数
python
这里有鱼汤6 小时前
miniQMT下载历史行情数据太慢怎么办?一招提速10倍!
前端·python
databook15 小时前
Manim实现脉冲闪烁特效
后端·python·动效
程序设计实验室16 小时前
2025年了,在 Django 之外,Python Web 框架还能怎么选?
python
倔强青铜三17 小时前
苦练Python第46天:文件写入与上下文管理器
人工智能·python·面试