AdaBoost算法

简介: **AdaBoost** 是一种 Boosting 算法,通过序列训练弱分类器并赋予错误分类样本更大权重,逐步构建强分类器。它使用指数损失函数,每次迭代时,弱分类器聚焦于前一轮分类错误的样本。最终,弱分类器的预测结果按其性能加权组合成强分类器。与 Bagging 相比,Boosting 是串行的,每个模型依赖前一个模型的输出,更重视错误样本。AdaBoost 的优点包括提高弱分类器性能、鲁棒性和灵活性,但对噪声敏感且训练时间可能较长。

Boosting是一种集成学习方法,AdaBoost是Boosting算法中的一种具体实现。


Boosting方法的核心思想在于将多个弱分类器组合成一个强分类器。这些弱分类器通常是简单的模型,比如决策树,它们在训练过程中的错误会被后续的弱分类器所修正。Boosting算法通过逐步增加新的弱分类器来提高整体模型的性能,每个新的弱分类器都专注于之前模型分类错误的样本。


AdaBoost(Adaptive Boosting)是Boosting算法家族中的一员,它的特点是使用了指数损失函数(exponential loss function),这种损失函数会给分类错误的样本赋予更大的权重,使得后续的弱分类器更加关注这些难以分类的样本。通过这种方式,AdaBoost能够自适应地调整每个样本的权重,从而提高模型的整体性能。除了AdaBoost,还有其他基于不同损失函数的Boosting算法,如L2Boosting和LogitBoost等。这些算法虽然在具体的实现细节上有所不同,但都遵循了Boosting方法将弱分类器组合成强分类器的基本框架。


Boosting每一个训练器重点关注前一个训练器不足的地方进行训练,通过加权投票的方式,得出预测结果。


Bagging 和 Boosting


Bagging 通过均匀取样的方式从原始样本集中抽取训练集,而 Boosting 使用全部样本,并在每一轮训练中根据错误率调整样例权重。这意味着 Bagging 的训练过程可以并行进行,因为它的基模型之间是独立的,而 Boosting 通常是串行进行的,因为每个模型都依赖于前一个模型的表现。


Bagging 方法中每个基模型对于最终决策的贡献是相等的,类似于民主投票制,每个模型有一票;而在 Boosting 中,每个基模型的贡献是根据其性能加权的,性能更好的模型会有更大的影响力。


AdaBoost


AdaBoost算法的核心步骤是:


  1. 权重更新:在每一轮迭代中,根据样本的分类结果来更新每个样本的权重。如果一个样本被正确分类,那么它的权重将会降低;如果一个样本被错误分类,那么它的权重将会增加。这样可以使得在后续的迭代中,分类器更加关注那些难以分类的样本。


  1. 弱分类器的选择:在每一轮迭代中,从所有的弱分类器中选择一个最佳的弱分类器。这个最佳的弱分类器是指在当前权重分布下,分类误差最小的那个弱分类器。


  1. 分类误差率较小的弱分类器的权值大,在表决中起较大作用。


AdaBoost 模型公式





  1. α 为模型的权重,m 为弱学习器数量。


  1. hi(x) 表示弱学习器


  1. H(x) 输出结果大于 0 则归为正类,小于 0 则归为负类。


AdaBoost 构建过程


Sample Feature (x) Label (y)
1 1 -1
2 2 -1
3 3 1
4 4 1


初始化


D1(1)=D1(2)=D1(3)=D1(4)=1/4


第1轮迭代


  1. 训练一个弱分类器 ℎ1(x),例如 h_1(x) = \sign(x - 1.5)。
  2. 计算错误率 ϵ1,假设所有样本都被正确分类,则 ϵ1=0。
  3. 计算权重α1,由于epsilon1=0,则α1=infty。但通常我们会设置一个上限,比如α1=0.5。
  4. 更新样本权重,由于所有样本都被正确分类,权重保持不变。


第2轮迭代


  1. 训练另一个弱分类器 ℎ2(x),例如 h_2(x) = \sign(x - 3)。
  2. 计算错误率 ϵ2,假设样本1和2被正确分类,样本3和4被错误分类,则ϵ2=21。
  3. 计算权重α2,α2=21ln(212)=21ln(4)≈0.693。
  4. 更新样本权重,增加样本3和4的权重,减少样本1和2的权重。


最终分类器


  • 组合弱分类器的预测结果,形成最终的强分类器H(x)。


这个过程会根据迭代次数M 重复进行,直到达到预定的迭代次数或者满足某个停止条件(如错误率达到某个阈值)。


Demo实战


import pandas as pd
df_wine = pd.read_csv('wine.data')
 
df_wine.columns = ['Class label', 'Alcohol', 'Malic acid', 'Ash', 'Alcalinity of ash', 'Magnesium', 'Total phenols',
'Flavanoids', 'Nonflavanoid phenols', 'Proanthocyanins', 'Color intensity', 'Hue', 'OD280/OD315 of diluted wines',
'Proline']
 
df_wine = df_wine[df_wine['Class label'] != 1]
 
X = df_wine[['Alcohol', 'Hue']]
y = df_wine['Class label']


划分训练集测试集


from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split
 
le = LabelEncoder()
y = le.fit_transform(y)
# 划分训练集测试集
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.4,random_state=1)


from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import AdaBoostClassifier
 
tree = DecisionTreeClassifier(criterion='entropy',max_depth=1)
ada= AdaBoostClassifier(base_estimator=tree,n_estimators=500,learning_rate=0.1)
 
from sklearn.metrics import accuracy_score
 
tree = tree.fit(X_train,y_train)
y_train_pre = tree.predict(X_train)
y_test_pre = tree.predict(X_test)
tree_train = accuracy_score(y_train,y_train_pre)
tree_test = accuracy_score(y_test,y_test_pre)
print('Decision tree train/test accuracies %.3f/%.3f' % (tree_train,tree_test))
# 0.845/0.854
 
 
ada = ada.fit(X_train,y_train)
y_train_pre = ada.predict(X_train)
y_test_pre = ada.predict(X_test)
ada_train = accuracy_score(y_train,y_train_pre)
ada_test = accuracy_score(y_test,y_test_pre)
print('Adaboost train/test accuracies %.3f/%.3f' % (ada_train,ada_test))
# 1/0.875


AdaBosst的决策区域比单层的决策区域更加复杂。


集成学习与单独的分类器性能比较,集成学习提高了复杂度,但在实践中,需要衡量是否愿意为适度提高预测性能付出更多的计算成本。


AdaBoost算法的总结


AdaBoost的核心思想是通过对错误分类的样本增加权重,使得后续的弱分类器更加关注这些难以分类的样本。通过加权投票的方式,将多个弱分类器的预测结果组合起来,形成一个强分类器。


  1. 初始化:为每个训练样本分配相同的权重。


  1. 迭代训练弱分类器:对于每一轮迭代,训练一个弱分类器,使其在加权训练集上的错误率最小化。


  1. 计算弱分类器权重:根据弱分类器在加权训练集上的错误率,计算其权重。错误率越低,权重越高。


  1. 更新样本权重:根据弱分类器的表现,更新样本权重。被错误分类的样本权重增加,正确分类的样本权重减少。


  1. 构建最终分类器:将所有弱分类器的预测结果按照其权重进行加权求和,形成最终的强分类器




应用领域


AdaBoost算法广泛应用于各种机器学习任务,包括图像识别、文本分类、医学诊断等领域。


优点

  • 提高模型的性能:AdaBoost可以显著提高弱分类器的性能,使其成为一个强大的分类器。
  • 鲁棒性:AdaBoost对于过拟合具有很好的鲁棒性。
  • 灵活性:可以与各种类型的弱分类器结合使用。


缺点

  • 对噪声敏感:如果训练数据包含噪声,AdaBoost可能会给噪声样本分配较高的权重,从而影响模型的性能。
  • 长时间训练:对于大规模数据集,AdaBoost的训练时间可能会很长。  



相关文章
|
6月前
|
机器学习/深度学习 算法 前端开发
【数据挖掘】袋装、AdaBoost、随机森林算法的讲解及分类实战(超详细 附源码)
【数据挖掘】袋装、AdaBoost、随机森林算法的讲解及分类实战(超详细 附源码)
113 0
|
4月前
|
数据采集 机器学习/深度学习 算法
Python实现AdaBoost分类模型(AdaBoostClassifier算法)项目实战
Python实现AdaBoost分类模型(AdaBoostClassifier算法)项目实战
125 0
|
机器学习/深度学习 算法
经典机器学习系列(六)【集成学习】之周志华西瓜书-AdaBoost算法证明解析
经典机器学习系列(六)【集成学习】之周志华西瓜书-AdaBoost算法证明解析
161 0
|
6月前
|
机器学习/深度学习 算法 数据可视化
样条曲线、决策树、Adaboost、梯度提升(GBM)算法进行回归、分类和动态可视化
样条曲线、决策树、Adaboost、梯度提升(GBM)算法进行回归、分类和动态可视化
|
6月前
|
机器学习/深度学习 算法 数据可视化
R语言样条曲线、决策树、Adaboost、梯度提升(GBM)算法进行回归、分类和动态可视化
R语言样条曲线、决策树、Adaboost、梯度提升(GBM)算法进行回归、分类和动态可视化
|
机器学习/深度学习 人工智能 算法
AdaBoost算法解密:从基础到应用的全面解析
AdaBoost算法解密:从基础到应用的全面解析
170 0
|
移动开发 算法
|
机器学习/深度学习 人工智能 算法
【机器学习】集成学习(Boosting)——AdaBoost提升算法(理论+图解+公式推导)
【机器学习】集成学习(Boosting)——AdaBoost提升算法(理论+图解+公式推导)
250 0
【机器学习】集成学习(Boosting)——AdaBoost提升算法(理论+图解+公式推导)
|
机器学习/深度学习 算法 前端开发
【ML】关于机器学习中AdaBoost算法的学习
关于机器学习中AdaBoost算法的学习
|
27天前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。