集成学习算法

news2025/1/23 8:29:06

集成学习算法

一、集成学习介绍

二、随机森林算法

1、Bootstrap随机抽样

2、Bagging 算法

3、训练算法

4、代码实现

三、Boosting 算法

AdaBoost 算法

1、强分类器与弱分类器

2、训练算法

3、代码实现


一、集成学习介绍

集成学习是通过多个模型的组合形成一个精度更高的模型,参与组合的模型称为弱学习器

在预测时使用这些弱学习器模型联合进行预测; 训练时需要用训练样本集依次训练出这些弱学习器。

二、随机森林算法

随机森林由多棵决策树组成,因此每一棵决策树就是一个弱学习器。

分类问题: 一个测试样本会送到每一棵树中进行预测, 然后投票,得票最多的类为最终分类结果。

回归问题: 随机森林的预测输出是所有决策树输出的均值。

1、Bootstrap随机抽样

抽样是指从一个样本数据集中随机选取一些样本,形成新的数据集。Bootstrap 使用的是有放回抽样。

做法:在有 n 个样本的集合中有放回地抽取 n 个样本。 在这个新的数据集中原始样本集中的一个样本可能会出现多次, 也可能不出现。 假设样本集中有 n 个样本, 每次抽中其中任何一个样本的概率都为 1/n, 一个样本在每次抽样中没被抽中的概率为 1-1/n。 由于是有放回抽样, 每次抽样都是相互独立的, 因此, 对连续 n 次抽样, 一个样本没被抽中的概率为:(1-1/n)^n

2、Bagging 算法

在 Bootstrap 抽样的基础上可以构造出 Bagging(Bootstrap Aggregation)算法。

做法:对训练样本集进行多次 Bootstrap 抽样, 每次抽样形成的数据集用于训练一个弱学习器模型, 得到多个独立的弱学习器, 最后用它们的组合进行预测。 训练流程如下:

T 为弱学习器的数量

3、训练算法

随机森林对训练样本特征向量的分量都进行了随机采样。

样本的随机采样(Bootstrap抽样):

  • 在构建每棵决策树时,随机森林会从原始训练数据集中通过有放回抽样的方式随机选择样本。这意味着某些样本可能被多次选中,而另一些样本可能一次都没有被选中。这种采样方式有助于增加模型的多样性,因为每棵树都是在略有不同的数据集上训练的。
  • 构建方法:用均匀分布的随机数构造, 如果有 l 个训练样本, 只需要将随机数变换到区间[0,l-1]即可。 每次抽取样本时生成一个该区间内的随机数,然后选择编号为该随机数的样本。

特征的随机采样:

  • 在构建决策树的每个节点时,随机森林不是使用所有的特征,而是从所有特征中随机选择一部分特征。例如,如果原始数据集有10个特征,随机森林可能会随机选择其中的5个特征来决定最佳分割点。这种随机选择特征的方式有助于减少特征之间的相互影响,防止某些特征在决策过程中占据主导地位,从而提高模型的泛化能力。 
  • 对特征分量的采样是无放回抽样, 可以用随机洗牌的方式实现。

训练每一棵决策树时都有部分样本未参与训练, 可以在训练时利用这些没有被选中的样本做测试, 统计它们的预测误差, 这称为包外误差。增加决策树的数量, 包外误差会下降,因此一种确定决策树数量的思路是通过观察包外误差来决定何时终止训练, 当包外误差稳定了之后停止训练。

4、代码实现

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score

# 加载Iris数据集
iris = load_iris()
X = iris.data  # 特征数据
y = iris.target  # 目标值(标签)

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 创建RandomForestClassifier模型
rf_classifier = RandomForestClassifier(n_estimators=5, random_state=42)

# 训练模型
rf_classifier.fit(X_train, y_train)

# 使用测试集进行预测
y_pred = rf_classifier.predict(X_test)

# 计算并打印准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy:.2f}")

三、Boosting 算法

由多个弱学习器组成, 预测时用每个弱学习器分别进行预测, 然后投票得到结果;

训练时依次训练每个弱学习器, 在这里采用了与随机森林不同的策略,不是对样本进行独立的随机抽样构造训练集, 而是重点关注被前面的弱分类器错分的样本

AdaBoost 算法

自适应提升(Adaptive Boosting),是 Boosting 算法的一种实现版本。用于分类问题。用弱分类器的线性组合来构造强分类器。

AdaBoost 算法的核心思想就是关注之前被错分的样本, 准确率高的弱分类器有更大的权重。

1、强分类器与弱分类器

强分类器计算公式:F(x) = \sum_{t=1}^{T} \alpha_t f_t(x)

  • x 为输入向量
  • F(x)为强分类器
  •  f_t(x)为弱分类器
  •  \alpha _t为弱分类器的权重
  • T 为弱分类器的数量

对于二分类问题, 弱分类器的输出值为+1 或-1, 分别对应正样本或负样本。 分类时的判定规则为:sgn(F(x))。强分类器的输出值也为+1 或-1, 同样对应于正样本或负样本。 之所以叫弱分类器是因为它们的精度不用太高, 对于二分类问题, 只要保证准确率大于 0.5 即可, 即比随机猜测强, 随机猜测也有 0.5的准确率。

2、训练算法

  • 训练样本的权重值
    初始时所有样本的权重相等, 在训练过程中,被前面的弱分类器错分的样本会加大权重, 反之会减小权重, 这样接下来的弱分类器会更加关注这些被错分的样本。
  • 弱分类器的权重值
    根据弱分类器的准确率构造,精度越高的弱分类器权重越大。

给定 l 个训练样本(x_i,y_i) , 其中x_i是特征向量, y_i是类别标签, 其值为+1 或-1。训练流程如下:

初始化样本权重值, 所有样本的初始权重相等:w_i^0 = 1 / l, i = 1,2,...,l

循环, 对t = 1,2,...,T依次训练每个弱分类器:

  •         训练一个弱分类器f_t(x), 并计算它对训练样本集的错误率e_t = \frac{\sum_{i=1}^{t} w_i^t |f_t(x_i) - y_i|}{2 \sum_{i=1}^{l} w_i^{t-1}}
  •         计算弱分类器的权重:\alpha_t = \frac{1}{2} \ln \frac{1 - e_t}{e_t}
  •         更新所有样本的权重:w_i^t = w_i^{t-1} \frac{\exp(-y_i \alpha_t f_t(x_i))}{Z_t}(其中, Z_t为归一化因子, 它是所有样本的权重之和:Z_t = \sum_{i=1}^{l} w_i^{t-1} \exp(-y_i \alpha_t f_t(x_i)))由于被弱分类器正确分类的样本有y_if_t(x_i) = +1,被弱分类器错误分类的样本有y_if_t(x_i) = -1,如果不考虑归一化因子样本权重更新公式可以简化为w_i^t = \begin{cases} e^{-\alpha_t} \times w_i^{t-1}, & \text{if } f_t(x_i) = y_i \\ e^{\alpha_t} \times w_i^{t-1}, & \text{if } f_t(x_i) \neq y_i \end{cases},其中e^{-\alpha_t} = e^{-\frac{1}{2} \ln \frac{1-e_t}{e_t}} = \sqrt{\frac{e_t}{1-e_t}},故样本权重更新公式可以进一步简化为:w_i^t = \begin{cases} \sqrt{\frac{e_t}{1-e_t}} \times w_i^{t-1}, & \text{if } f_t(x_i) = y_i \\ \sqrt{\frac{1-e_t}{e_t}} \times w_i^{t-1}, & \text{if } f_t(x_i) \neq y_i \end{cases}

结束循环

最后得到强分类器:\operatorname{sgn}(F(x)) = \operatorname{sgn}\left(\sum_{t=1}^{T} \alpha_t f_t(x)\right)

弱分类器模型可以选择决策树或逻辑回归等。 强分类器是弱分类器的线性组合, 如果弱分类器是线性函数, 无论怎样组合, 强分类器依然是线性的, 因此,应该选择非线性模型作为弱分类器。

3、代码实现

# 导入必要的库
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import AdaBoostClassifier
from sklearn.metrics import accuracy_score

# 加载Iris数据集
iris = load_iris()
X = iris.data
y = iris.target

# 划分数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 初始化DecisionTreeClassifier
base_clf = DecisionTreeClassifier(max_depth=1)

# 使用AdaBoostClassifier,设置弱分类器为DecisionTreeClassifier
ada_clf = AdaBoostClassifier(estimator=base_clf, n_estimators=5)

# 训练模型
ada_clf.fit(X_train, y_train)

# 在测试集上进行预测
y_pred = ada_clf.predict(X_test)

# 计算并打印准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy:.2f}")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2280806.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

算法6(力扣148)-排序链表

1、问题 给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 2、采用例子 输入:head [4,2,1,3] 输出:[1,2,3,4] 3、实现思路 将链表拆分成节点,存入数组使用sort排序,再用reduce重建链接 4、具…

DNA结合之Motif_1:CNN

1,首先可以识别在KO前后的motif——》由CNN模型做出识别,看看这个有没有什么灵感 2,ZNF143等都可以使用来识别 3,暂时只使用单个peak文件,后期可以使用ENCODE中所有的对应的TF的peak文件 1,文件解压之后…

【unity游戏开发之InputSystem——02】InputAction的使用介绍(基于unity6开发介绍)

文章目录 一、InputAction简介1、InputAction是什么?2、示例 二、InputAction参数相关1、点击齿轮1.1 Actions 动作(1)动作类型(Action Type)(2)初始状态检查(Initial State Check&a…

机器学习 vs 深度学习

目录 一、机器学习 1、实现原理 2、实施方法 二、深度学习 1、与机器学习的联系与区别 2、神经网络的历史发展 3、神经网络的基本概念 一、机器学习 1、实现原理 训练(归纳)和预测(演绎) 归纳: 从具体案例中抽象一般规律…

Docker核心命令与Yocto项目的高效应用

随着软件开发逐渐向分布式和容器化方向演进,Docker 已成为主流的容器化技术之一。它通过标准化的环境配置、资源隔离和高效的部署流程,大幅提高了开发和构建效率。Yocto 项目作为嵌入式 Linux 系统构建工具,与 Docker 的结合进一步增强了开发…

Linux通过docker部署京东矩阵容器服务

获取激活码 将京东无线宝app升级到最新版,然后打开首页,点击号 选择添加容器矩阵,然后获取激活码 运行容器 read -p "请输入你的激活码: " ACTIVECODE;read -p "请输入宿主机的缓存路径: " src;docker rm -f cmatrix;docker run -d -it --name cmatrix …

vue视频流播放,支持多种视频格式,如rmvb、mkv

先将视频转码为ts ffmpeg -i C:\test\3.rmvb -codec: copy -start_number 0 -hls_time 10 -hls_list_size 0 -f hls C:\test\a\output.m3u8 后端配置接口 import org.springframework.core.io.Resource; import org.springframework.core.io.UrlResource; import org.spring…

【Solr分词器】

Solr分词器 一,什么是solr分词器? 前面已经提到过,Solr是一个高性能的全文检索服务,基于Apache Lucene的,Lucene是一个用Java编写的开源的信息检索库,为全文索引和搜索提供了基础功能。 在Solr中&#xf…

OS2.【Linux】基本命令入门(1)

目录 1.操作系统是什么? 2.好操作系统的衡量标准 3.操作系统的核心工作 4.在计算机上所有行为都会被转换为硬件行为 5.文件 6.简单介绍一些基本命令 1.clear 2.pwd 3.ls 1.ls -l 2.隐藏文件的创建 3.ls -al 4.ls -ld 5.ls -F(注意是大写) 4.cd 1.cd .. "…

LabVIEW处理复杂系统和数据处理

LabVIEW 是一个图形化编程平台,广泛应用于自动化控制、数据采集、信号处理、仪器控制等复杂系统的开发。它的图形化界面使得开发人员能够直观地设计系统和算法,尤其适合处理需要实时数据分析、高精度控制和复杂硬件集成的应用场景。LabVIEW 提供丰富的库…

激光雷达和相机早期融合

通过外参和内参的标定将激光雷达的点云投影到图像上。 • 传感器标定 首先需要对激光雷达和相机(用于获取 2D 图像)进行外参和内参标定。这是为了确定激光雷达坐标系和相机坐标系之间的转换关系,包括旋转和平移。通常采用棋盘格等标定工具&…

C++----STL(vector)

vector的介绍 vector的文档介绍:cplusplus.com/reference/vector/vector/ 1.基本概念 简单来说,vector是表示可以改变大小的数组的顺序容器。使用连续的存储位置来存储元素,因此可以通过常规指针的偏移量来高效访问。 2.内部机制 vector…

Airflow:BranchOperator实现动态分支控制流程

Airflow是用于编排复杂工作流的开源平台,支持在有向无环图(dag)中定义、调度和监控任务。其中一个关键特性是能够使用BranchOperator创建动态的、有条件的工作流。在这篇博文中,我们将探索BranchOperator,讨论它是如何…

rocketmq-MQClientInstance-单进程多生产者组多消费者组的实例模型

多生产者组多消费者组的思考 思考下。当一个client,订阅多个consumergroup、多个productgroup时。此时进程的线程模型是如何的? 之前文章有分析到。消费者组,是有多个线程去共同协作的。 假设订阅2个consumergroup, 线程数量是2倍…

nuxt3项目打包部署到服务器后配置端口号和开启https

nuxt3打包后的项目部署相对于一般vite打包的静态文件部署要稍微麻烦一些,还有一个主要的问题是开发环境配置的.env环境变量在打包后部署时获取不到,具体的解决方案可以参考我之前文章 nuxt3项目打包后获取.env设置的环境变量无效的解决办法。 这里使用的…

Class ‘com.xxx.xxx‘ not found in module ‘xxxx‘ 解决方法

目录 前言1. 问题所示2. 原理分析3. 解决方法前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 1. 问题所示 启动项目的时候,出现如下Bug: Class ‘com.xxx.xxx‘ not found in module ‘xxxx‘截图如下: 2. 原理分析 Java 项目中引用的类未能被正…

ngrok同时配置多个内网穿透方法

一、概要 ngrok可以用来配置免费的内网穿透,启动后就可以用外网ip:端口访问到自己计算机的某个端口了。 可以用来从外网访问自己的测试页面(80、8080)、ftp文件传输(21)、远程桌面(3389)等。 …

OGG 19C 集成模式启用DDL复制

接Oracle19C PDB 环境下 OGG 搭建(PDB to PDB)_cdb架构 配置ogg-CSDN博客,给 pdb 环境 ogg 配置 DDL 功能。 一个报错 SYShfdb1> ddl_setup.sqlOracle GoldenGate DDL Replication setup scriptVerifying that current user has privile…

【计算机网络】- 应用层HTTP协议

目录 初识HTTP 什么是HTTP 版本 HTTPS 模型 HTTP抓包工具 为什么使用 抓包工具的下载 下载后的重要操作 Fiddler的使用 HTTP请求与响应的基本格式 HTTP请求基本格式​编辑 HTTP响应基本格式 协议格式总结❗️❗️❗️​编辑 HTTP 详解 认识 URL URL基本格式 …

基于SpringBoot+Vue的旅游管理系统【源码+文档+部署讲解】

系统介绍 基于SpringBootVue实现的旅游管理系统采用前后端分离架构方式,系统设计了管理员、用户两种角色,系统实现了用户登录与注册、个人中心、用户管理、景点信息管理、订票信息管理、用户评价管理、景点咨询、轮播图管理等功能。 技术选型 开发工具…