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

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

相关推荐
程序猿000001号2 分钟前
使用Python的Seaborn库进行数据可视化
开发语言·python·信息可视化
API快乐传递者11 分钟前
Python爬虫获取淘宝详情接口详细解析
开发语言·爬虫·python
公众号Codewar原创作者13 分钟前
R数据分析:工具变量回归的做法和解释,实例解析
开发语言·人工智能·python
FL162386312918 分钟前
python版本的Selenium的下载及chrome环境搭建和简单使用
chrome·python·selenium
巫师不要去魔法部乱说22 分钟前
PyCharm专项训练5 最短路径算法
python·算法·pycharm
Chloe.Zz28 分钟前
Python基础知识回顾
python
IT古董28 分钟前
【漫话机器学习系列】020.正则化强度的倒数C(Inverse of regularization strength)
人工智能·机器学习
进击的小小学生31 分钟前
机器学习连载
人工智能·机器学习
骑个小蜗牛33 分钟前
Python 标准库:random——随机数
python
Trouvaille ~42 分钟前
【机器学习】从流动到恒常,无穷中归一:积分的数学诗意
人工智能·python·机器学习·ai·数据分析·matplotlib·微积分