机器学习之 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回归器进行拟合。

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

相关推荐
哥布林学者6 小时前
高光谱成像(一)高光谱图像
机器学习·高光谱成像
罗西的思考7 小时前
AI Agent框架探秘:拆解 OpenHands(10)--- Runtime
人工智能·算法·机器学习
孟健9 小时前
Karpathy 用 200 行纯 Python 从零实现 GPT:代码逐行解析
python
HXhlx11 小时前
CART决策树基本原理
算法·机器学习
码路飞11 小时前
写了个 AI 聊天页面,被 5 种流式格式折腾了一整天 😭
javascript·python
曲幽13 小时前
FastAPI压力测试实战:Locust模拟真实用户并发及优化建议
python·fastapi·web·locust·asyncio·test·uvicorn·workers
敏编程18 小时前
一天一个Python库:jsonschema - JSON 数据验证利器
python
前端付豪18 小时前
LangChain记忆:通过Memory记住上次的对话细节
人工智能·python·langchain
databook18 小时前
ManimCE v0.20.1 发布:LaTeX 渲染修复与动画稳定性提升
python·动效
花酒锄作田1 天前
使用 pkgutil 实现动态插件系统
python