机器学习_10、集成学习-AdaBoost

AdaBoost

AdaBoost(Adaptive Boosting的简称)是一种集成学习方法,它的核心思想在于将多个弱学习器组合起来,形成一个强学习器。通过这种方式,AdaBoost能够显著提高分类性能。下面详细介绍AdaBoost的主要概念和工作原理:

1. 弱学习器(Weak Learner)

  • 弱学习器指的是那些仅比随机猜测略好的模型,例如决策树、小神经网络等。在AdaBoost中,通常使用深度非常浅的决策树(如单层决策树,也称为决策树桩)作为弱学习器。

2. 自适应(Adaptive)

  • AdaBoost之所以称为自适应增强,是因为它能够根据前一个学习器的表现调整数据的权重分布,使得之前被错误分类的数据在后续的学习器中获得更多的关注。这种自适应的过程使得模型能够专注于那些难以正确分类的样本。

3. 工作原理

  • 初始化权重:开始时,每个训练样本被赋予相同的权重。
  • 循环训练弱学习器 :AdaBoost算法会进行多轮迭代,每一轮都会训练一个新的弱学习器。在每一轮中:
    • 基于当前的权重分布,从训练集中训练出一个弱学习器。
    • 计算该弱学习器的错误率。
    • 根据错误率计算该弱学习器的权重(即该学习器对最终结果的贡献)。错误率越低的学习器权重越大。
    • 更新训练样本的权重,增加被当前学习器错误分类样本的权重,减少正确分类样本的权重。
    • 进入下一轮迭代。
  • 组合弱学习器:所有的弱学习器根据各自的权重组合成最终的模型。分类决策通常是通过对所有学习器的加权投票来实现的。

4. 特点和优势

  • 准确率高:通过组合多个弱学习器,AdaBoost能够达到很高的准确率。
  • 易于编码:AdaBoost算法相对简单,易于实现。
  • 自动处理特征选择:AdaBoost在训练过程中会自动选择有用的特征,从而简化了模型的复杂度和提高了模型的泛化能力。
  • 不太容易过拟合:在弱学习器的选择和数量控制得当的情况下,AdaBoost不太容易过拟合。

5. 应用

AdaBoost被广泛应用于各种分类问题,包括二分类和多分类问题,如人脸识别、客户流失预测、文本分类等领域。

复制代码
#coding=utf-8
#AdaBoostClassifier.py
import pandas as pd
from sklearn.model_selection import train_test_split
#from sklearn.naive_bayes import GaussianNB
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import AdaBoostClassifier

# 加载数据
filename="./glass.data"
glass_data = pd.read_csv(filename,index_col=0,header=None)
# 先从DataFrame中取出数组值(.value)
X,y = glass_data.iloc[:,:-1].values, glass_data.iloc[:,-1].values
#X,y = glass_data.iloc[:,:-1], glass_data.iloc[:,-1]
# 划分训练集与测试集
X_train, X_test, y_train, y_test = train_test_split(
    X, y, shuffle=True, stratify=y, random_state=1)

# 创建基本分类器对象
#base_clf = GaussianNB()
base_clf = DecisionTreeClassifier(max_depth=2,random_state=0)
# 创建AdaBoostingClassifier对象
ada_clf = AdaBoostClassifier(base_estimator=base_clf,
                             random_state=0,n_estimators=1000)

for clf in (base_clf, ada_clf):
    clf.fit(X_train, y_train)
    print(clf.__class__.__name__,"训练集准确率:",
          clf.score(X_train, y_train), sep="")
    print(clf.__class__.__name__,"测试集准确率:",
          clf.score(X_test, y_test), sep="") 
    print(clf.__class__.__name__,
          "对测试集前2个样本预测的分类标签:\n",
          clf.predict(X_test[:2]), sep="")
    print(clf.__class__.__name__,
          "对测试集前2个样本预测的分类概率:\n",
          clf.predict_proba(X_test[:2]), sep="") 
    print("分类器中的标签排列:",clf.classes_)
    # 概率预测转化为标签预测
    print("根据预测概率推算预测标签:",end="")
    for i in clf.predict_proba(X_test[:2]).argmax(axis=1):
        print(clf.classes_[i], end="  ")
    print()
    
print("测试集前2个样本的真实标签:",y_test[:2],sep="")
相关推荐
运器1233 分钟前
【一起来学AI大模型】PyTorch DataLoader 实战指南
大数据·人工智能·pytorch·python·深度学习·ai·ai编程
军军君0110 分钟前
基于Springboot+UniApp+Ai实现模拟面试小工具二:后端项目搭建
前端·javascript·spring boot·spring·微信小程序·前端框架·集成学习
超龄超能程序猿17 分钟前
(5)机器学习小白入门 YOLOv:数据需求与图像不足应对策略
人工智能·python·机器学习·numpy·pandas·scipy
卷福同学18 分钟前
【AI编程】AI+高德MCP不到10分钟搞定上海三日游
人工智能·算法·程序员
帅次26 分钟前
系统分析师-计算机系统-输入输出系统
人工智能·分布式·深度学习·神经网络·架构·系统架构·硬件架构
AndrewHZ1 小时前
【图像处理基石】如何入门大规模三维重建?
人工智能·深度学习·大模型·llm·三维重建·立体视觉·大规模三维重建
5G行业应用1 小时前
【赠书福利,回馈公号读者】《智慧城市与智能网联汽车,融合创新发展之路》
人工智能·汽车·智慧城市
悟空胆好小1 小时前
分音塔科技(BABEL Technology) 的公司背景、股权构成、产品类型及技术能力的全方位解读
网络·人工智能·科技·嵌入式硬件
探讨探讨AGV1 小时前
以科技赋能未来,科聪持续支持青年创新实践 —— 第七届“科聪杯”浙江省大学生智能机器人创意竞赛圆满落幕
人工智能·科技·机器人
cwn_1 小时前
回归(多项式回归)
人工智能·机器学习·数据挖掘·回归