Boosting
Boosting
学习目标
- 知道boosting集成原理和实现过程
- 知道bagging和boosting集成的区别
- 知道AdaBoost集成原理
Boosting思想
- 每一个训练器重点关注前一个训练器不足的地方进行训练
- 通过加权投票的方式,得出预测结果
- 串行的训练方式
1 什么是boosting
Bagging&Boosting对比
| bagging | boosting | |
| 数据采样 | 对数据进行有放回的采样训练 | 全部样本,根据前一轮学习结果调整数据的重要性 |
| 投票方式 | 所有学习器平权投票 | 对学习器进行加权投票 |
| 学习顺序 | 并行的,每个学习器没有依赖关系 | 串行,学习有先后顺序 |
2 实现过程:
3 bagging与boosting的区别
- 区别一:数据方面
- Bagging:对数据进行采样训练;
- Boosting:根据前一轮学习结果调整数据的重要性。
- 区别二:投票方面
- Bagging:所有学习器平权投票;
- Boosting:对学习器进行加权投票。
- 区别三:学习顺序
- Bagging的学习是并行的,每个学习器没有依赖关系;
- Boosting学习是串行,学习有先后顺序。
- 区别四:主要作用
- Bagging主要用于提高泛化性能(解决过拟合,也可以说降低方差)
- Boosting主要用于提高训练精度 (解决欠拟合,也可以说降低偏差)
4 AdaBoost介绍
4.1 Adaboost算法推导
4.2 关键点剖析
4.3 案例介绍
- 初始化工作:初始化 10 个样本的权重,每个样本的权重为:0.1
- 构建第一个基学习器:
a.寻找最优分裂点
- 1.对特征值 x 进行排序,确定分裂点为:0.5、1.5、2.5、3.5、4.5、5.5、6.5、7.5、8.5
- 2.当以 0.5 为分裂点时,有 5 个样本分类错误,错误率5/10
- 3.当以 1.5 为分裂点时,有 4 个样本分类错误,错误率4/10
- 4.当以 2.5 为分裂点时,有 3 个样本分类错误,错误率3/10
- 5.当以 3.5 为分裂点时,有 4 个样本分类错误,错误率4/10
- 6.当以 4.5 为分裂点时,有 5 个样本分类错误,错误率5/10
- 7.当以 5.5 为分裂点时,有 4 个样本分类错误,错误率4/10
- 8.当以 6.5 为分裂点时,有 5 个样本分类错误,错误率5/10
- 9.当以 7.5 为分裂点时,有 4 个样本分类错误,错误率4/10
- 10.当以 8.5 为分裂点时,有 3 个样本分类错误,错误率3/10
- 11.最终,选择以 2.5 作为分裂点(出现相同概率的情况使用奥卡姆剃刀选择最简单的情况),计算得出基学习器错误率为:3/10=0.3
b.计算模型权重: 1/2 * np.log((1-0.3)/0.3)=0.4236 (numpy中的计算公式np.log)
,则正确样本权重变化系数为:e-0.4236 = 0.6547
- 2.分类错误样本为:7、8、9 共 3 个,其计算公式为:

,则错误样本权重变化系数为:e0.4236 = 1.5275
- 3.样本 1、2、3、4、5、6、10 权重值为:0.06547
新的权重=权重系数*旧权重值,这里是0.1
- 4.样本 7、8、9 的样本权重值为:0.15275
- 5.归一化 Zt 值为:0.06547 * 7 + 0.15275 * 3 = 0.9165(所有新的权重和)
- 6.样本 1、2、3、4、5、6、10 最终权重值为(正样本权重/归一化值): 0.07143
- 7.样本 7、8、9 的样本权重值为(负样本权重/归一化值):0.1667
d.此时得到:
- 构建第二个弱学习器
1.寻找最优分裂点:
- 对特征值 x 进行排序,确定分裂点为:0.5、1.5、2.5、3.5、4.5、5.5、6.5、7.5、8.5
- 当以 0.5 为分裂点时,有 5 个样本分类错误,错误率为:0.07143 * 2 +0.16667 * 3= 0.64287
- 当以 1.5 为分裂点时,有 4 个样本分类错误,错误率为:0.07143 * 1 + 0.16667 * 3 = 0.57144
- 当以 2.5 为分裂点时,有 3 个样本分类错误,错误率为:0.16667 * 3 = 0.57144。。。 。。。
- 当以 8.5 为分裂点时,有 3 个样本分类错误,错误率为:0.07143 * 3 = 0.21429
- 最终,选择以 8.5 作为分裂点,计算得出基学习器错误率为:0.21429
2.计算模型权重:1/2 * np.log((1-0.21429)/0.21429)=0.64963
3.分类正确的样本:1、2、3、7、8、9、10,其权重调整系数为:0.5222
4.分类错误的样本:4、5、6,其权重调整系数为:1.9148
5.分类正确样本权重值:
a.样本 0、1、2、、9 为:0.0373
b.样本 6、7、8 为:0.087
6.分类错误样本权重值:0.1368
7.归一化 Zt 值为:0.0373 * 4 + 0.087 * 3 + 0.1368 * 3 = 0.8206
8.最终权重:
a.样本 0、1、2、9 为 :0.0455
b.样本 6、7、8 为:0.1060
c.样本 3、4、5 为:0.1667
此时得到:
- 构建第三个弱学习器
- 强学习器
4.4 api
- from sklearn.ensemble import AdaBoostClassifier
- api链接:AdaBoostClassifier — scikit-learn 1.6.1 documentation
4.5 LabelEncoder标签标准化
from sklearn.preprocessing import LabelEncoder# 创建一个 LabelEncoder 对象
le = LabelEncoder()# 假设我们有一些类别标签
labels = ['cat', 'dog', 'mouse', 'cat', 'dog']# 使用 fit_transform 方法将标签转换为整数编码
encoded_labels = le.fit_transform(labels)print(encoded_labels) # 输出: [0 1 2 0 1]# 如果需要将整数编码转换回原始标签,可以使用 inverse_transform 方法
original_labels = le.inverse_transform(encoded_labels)print(original_labels) # 输出: ['cat' 'dog' 'mouse' 'cat' 'dog']
- 0:表示类别标签 'cat'。在输入列表 ['cat', 'dog', 'bird', 'cat', 'bird'] 中,'cat' 是第一个出现的类别标签,因此被分配了整数标签 0。
- 1:表示类别标签 'dog'。'dog' 是第二个出现的类别标签,因此被分配了整数标签 1。
- 2:表示类别标签 'bird'。'bird' 是第三个出现的类别标签,因此被分配了整数标签 2。
- 重复标签:
4.6 AdaBoost实战葡萄酒数据
# 获取数据
import pandas as pd
df_wine = pd.read_csv('data/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']# 去掉一类(1,2,3)
df_wine = df_wine[df_wine['Class label'] != 1]# 获取特征值和目标值
X = df_wine[['Alcohol', 'Hue']].values
y = df_wine['Class label'].values
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split# 类别转化 (2,3)=>(0,1)
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# 机器学习(决策树和AdaBoost)
tree = DecisionTreeClassifier(criterion='entropy',max_depth=1,random_state=0)
ada= AdaBoostClassifier(base_estimator=tree,n_estimators=500,learning_rate=0.1,random_state=0)
from sklearn.metrics import accuracy_score# 决策树和AdaBoost分类器性能评估
# 决策树性能评估
tree = tree.fit(X_train,y_train)
y_train_pred = tree.predict(X_train)
y_test_pred = tree.predict(X_test)
tree_train = accuracy_score(y_train,y_train_pred)
tree_test = accuracy_score(y_test,y_test_pred)
print('Decision tree train/test accuracies %.3f/%.3f' % (tree_train,tree_test))
# Decision tree train/test accuracies 0.845/0.854
# AdaBoost性能评估
ada = ada.fit(X_train,y_train)
y_train_pred = ada.predict(X_train)
y_test_pred = ada.predict(X_test)
ada_train = accuracy_score(y_train,y_train_pred)
ada_test = accuracy_score(y_test,y_test_pred)
print('Adaboost train/test accuracies %.3f/%.3f' % (ada_train,ada_test))
# Adaboost train/test accuracies 1/0.875
5 小结
- 什么是Boosting 【知道】
- 随着学习的积累从弱到强
- 代表算法:Adaboost,GBDT,XGBoost,LightGBM
- bagging和boosting的区别【知道】
- 区别一:数据方面
- Bagging:对数据进行采样训练;
- Boosting:根据前一轮学习结果调整数据的重要性。
- 区别二:投票方面
- Bagging:所有学习器平权投票;
- Boosting:对学习器进行加权投票。
- 区别三:学习顺序
- Bagging的学习是并行的,每个学习器没有依赖关系;
- Boosting学习是串行,学习有先后顺序。
- 区别四:主要作用
- Bagging主要用于提高泛化性能(解决过拟合,也可以说降低方差)
- Boosting主要用于提高训练精度 (解决欠拟合,也可以说降低偏差)
- 区别一:数据方面
- AdaBoost构造过程【知道】
- 步骤一:初始化训练数据权重相等,训练第一个学习器;
- 步骤二:AdaBoost反复学习基本分类器;
- 步骤三:对m个学习器进行加权投票
相关文章:
Boosting
Boosting 学习目标 知道boosting集成原理和实现过程知道bagging和boosting集成的区别知道AdaBoost集成原理 Boosting思想 Boosting思想图 每一个训练器重点关注前一个训练器不足的地方进行训练通过加权投票的方式,得出预测结果串行的训练方式 1 什么是boosting 随着…...
【通俗讲解电子电路】——从零开始理解生活中的电路(一)
导言:电子电路为什么重要? ——看不见的“魔法”,如何驱动你的生活? 清晨,当你的手机闹钟响起时,你可能不会想到,是电子电路在精准控制着时间的跳动;当你用微波炉加热早餐时&#…...
LeetCode72编辑距离(动态规划)
给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 示例 1: 输入:word1 “horse”, word2 “ros” 输出…...
rabbitmq单向ssl认证配置与最佳实践(适用于各大云厂商)
背景 这里后补直接上代码 最佳实践 主要从两个方面保证消息不丢失 RabbitMQ方面 创建队列时开启持久化创建交换器时开启持久化创建镜像队列(可选)开启延迟队列(可选) 代码层面 开启生产者到交换器回调参数开启交换器到队列…...
【K8S】Kubernetes 基本架构、节点类型及运行流程详解(附架构图及流程图)
Kubernetes 架构 k8s 集群 多个 master node 多个 work nodeMaster 节点(主节点):负责集群的管理任务,包括调度容器、维护集群状态、监控集群、管理服务发现等。Worker 节点(工作节点):实际运…...
Windows版FFmpeg使用及B站视频下载示例python源码
Windows版FFmpeg使用及B站视频下载示例python源码 FFmpeg介绍和下载 FFmpeg 是一个功能强大、灵活且广泛使用的多媒体处理工具,无论是在专业领域还是日常使用中,都能满足各种多媒体处理需求。FFmpeg 是一个开源项目,遵循 LGPL 或 GPL 许可。…...
飞书考勤Excel导入到自己系统
此篇主要用于记录Excel一行中,单条数据的日期拿取,并判断上下班打卡情况。代码可能满足不了大部分需求,目前只够本公司用,如果需要,可以参考。 需要把飞书月度汇总的考勤表导入系统中可以参考下。 下图为需要获取的年…...
【leetcode hot 100 560】和为K的子数组
解法一:用左右指针寻找字串,如果和>k,则减少一个数(left);如果和<k,则加上一个数(right)。 class Solution {public int subarraySum(int[] nums, int k) {int nu…...
EGO-Planner的无人机视觉选择(yolov5和yolov8)
EGO-Planner的无人机视觉选择(yolov5和yolov8) 效果 yolov5检测效果 yolov8检测效果 一、YOLOv8 vs YOLOv5:关键差异解析 1. 训练效率:为何YOLOv8更快? 架构轻量化 YOLOv8采用C2f模块(Cross Stage Partia…...
C++ | 面向对象 | 类
👻类 👾语法格式 class className{Access specifiers: // 访问权限DataType variable; // 变量returnType functions() { } // 方法 };👾访问权限 class className {public:// 公有成员protected:// 受保护成员private:// 私有成员 }…...
性能测试分析和调优
步骤 性能调优的步骤 性能调优的步骤: 1.确定问题:根据性能测试的结果来分析确定bug。–测试人员职责 2.分析原因:分析问题产生的原因。----开发人员职责 3.给出解决方案:可以是修改软件配置、增加硬件资源配置、修改代码等----…...
阿里云oss文件上传springboot若依java
一、第一步 引入依赖 <!-- 阿里云OSS --> <dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId> </dependency> 二、第二步 application.yml #阿里云oss服务配置 aliyun:oss:endpoint: …...
【自学笔记】Oracle基础知识点总览-持续更新
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 Oracle 数据库基础知识点总览1. 数据库安装与配置2. SQL基础3. PL/SQL基础4. 数据库管理5. 高级主题 总结 Oracle 数据库基础知识点总览 1. 数据库安装与配置 安装…...
使用create_sql_query_chain工具根据自然语言问题生成SQL查询,踩坑版
1. 开启调试模式 from langchain import debugdebug True # 启用调试模式说明: 这里从 langchain 库中导入了一个名为 debug 的变量(或模块),然后将它设置为 True。这通常用来启用调试模式,方便开发者在程序运行时看…...
PyInstaller 打包python 程序 成 可执行文件
pyinstaller --onefile --name my_project --add-data "config/config.json:config" main.py 要将整个 Python 项目打包成一个可执行文件,可以使用 PyInstaller 来完成这个任务。以下是如何将整个项目打包成可执行文件的步骤: 1. 安装 PyIns…...
生鲜行业智能化供应链解决方案技术白皮书
行业痛点与技术挑战 损耗控制难题 行业平均损耗率达18%-25%,需构建动态定价模型与智能分拣系统 冷链管理复杂度 全程温控数据采集点超过23个/车次,异常响应延迟需压缩至90秒内 供需预测偏差 传统模式预测准确率不足65%,亟需AI驱动需求预测体…...
preg_replace 与 str_replace 的比较与选择
preg_replace 与 str_replace 的比较与选择 ——PHP字符串处理的核心工具深度解析 一、核心功能定位 在PHP的字符串处理中,str_replace和preg_replace是两种最常用的替换函数,但其设计目标和应用场景存在本质差异: str_replace 简单字符串替…...
无人机自主导航与避障技术!
自主导航的实现 环境感知:通过传感器(如摄像头、激光雷达、超声波传感器等)获取周围环境信息。 地图构建:利用SLAM(同步定位与地图构建)技术,实时生成环境地图并确定无人机的位置。 路径规划…...
密码学(哈希函数)
4.1 Hash函数与数据完整性 数据完整性: 检测传输消息(加密或未加密)的修改。 密码学Hash函数: 构建某些数据的简短“指纹”;如果数据被篡改,则该指纹(以高概率)不再有效。Hash函数…...
深入探索 STM32 微控制器:从基础到实践
一、引言 在当今的嵌入式系统领域,STM32 系列微控制器凭借其高性能、低功耗、丰富的外设以及广泛的应用场景,成为了众多开发者的首选。无论是在工业控制、智能家居、医疗设备,还是在消费电子等领域,STM32 都展现出了强大的生命力…...
React 常见面试题及答案
记录面试过程 常见问题,如有错误,欢迎批评指正 1. 什么是虚拟DOM?为什么它提高了性能? 虚拟DOM是React创建的一个轻量级JavaScript对象,表示真实DOM的结构。当状态变化时,React会生成新的虚拟DOM…...
SpringSecurity 实现token 认证
配置类 Configuration EnableWebSecurity EnableGlobalMethodSecurity(prePostEnabledtrue) public class SpringSecurityConfig extends WebSecurityConfigurerAdapter { Bean Override public AuthenticationManager authenticationManagerBean() throws Exception {return s…...
【详解 | 辨析】“单跳多跳,单天线多天线,单信道多信道” 之间的对比
文章目录 1. 单跳 & 多跳2. 单天线 & 多天线3. 单信道 & 多信道4. 小区内通信 & 小区间通信5. 更多辨析5.1 无线Mesh网络,Ad Hoc网络,无线传感器网络(MSN)5.2 “单天线/多天线”与“单信道/多信道”的区别 6. 工业…...
嵌入式开发工程师笔试面试指南-HR面试常见问题汇总
在嵌入式领域的招聘面试中,HR 通过一系列精心设计的问题,全面考察候选人的综合素质、专业能力以及与岗位的匹配度。以下从多个关键方面汇总了 HR 在嵌入式面试中常见的问题。 ** 一、语言表达方面 请简单介绍一下你自己这是面试开场常见问题,旨在让候选人做一个自我展示,…...
Docker 搭建 Gitlab 服务器 (完整详细版)
参考 Docker 搭建 Gitlab 服务器 (完整详细版)_docker gitlab-CSDN博客 Docker 安装 (完整详细版)_docker安装-CSDN博客 Docker 日常命令大全(完整详细版)_docker命令-CSDN博客 1、Gitlab镜像 # 查找Gitlab镜像 docker search gitlab # 拉取Gitlab镜像 docker pull gitlab/g…...
MongoDB安全管理
MongoDB如何鉴权 保证数据的安全性是数据库的重大职责之一。与大多数数据库一样,MongoDB内部提供了一套完整的权限防护机制。如下例所示: mongo --host 127.0.0.1 --port 27017 --username someone --password errorpass --authenticationDatabasestor…...
架构案例:从初创互联网公司到分布式存储与反应式编程框架的架构设计
文章目录 引言一、初创互联网公司架构演化案例1. 万级日订单级别架构2. 十万级日订单级别架构3. 百万级日订单级别架构 二、分布式存储系统 Doris 架构案例三、反应式编程框架架构案例总结 引言 分布式架构 今天我们将探讨三种不同类型的架构案例,分别探讨 一个初…...
神经网络之CNN图像识别(torch api 调用)
1.简介 CNN 是受生物学上感受野机制启发而提出的。它通过卷积操作自动提取数据中的特征,避免了传统机器学习方法中复杂的特征工程过程,能够自动学习到数据中的有效特征,从而进行分类、识别等任务。 2.结构 2.1卷积: 假设你有一…...
使用Truffle、Ganache、MetaMask、Vue+Web3完成的一个简单区块链项目
文章目录 概要初始化Truffle项目创建编写合约编译合约配置Ganache修改truffle-config.js文件编写迁移文件部署合约使用Truffle 控制台使用MetaMask和VueWeb3与链交互 概要 使用Truffle、Ganache、MetaMask、VueWeb3完成的一个简单区块链项目。 初始化Truffle项目 安装好truf…...
学生管理前端
文章目录 首页student.html查询功能 首页 SpringBoot前端html页面放在static文件夹下:/src/main/resources/static 默认首页为index.html,我们可以用两个超链接或者两个button跳转到对应的页面。这里只是单纯的跳转页面,不需要提交表单等其…...
