集成学习——Bagging,Boosting

一.什么是集成学习

集成学习的基本思想是通过结合多个基学习器的预测结果,来提高模型的泛化能力和稳定性。这些基学习器可以是相同类型的算法,也可以是不同类型的算法。

当基学习器之间具有一定的差异性时,它们在面对不同的样本子集或特征子集时,可能会犯不同的错误。通过将这些基学习器集成起来,可以相互补充,减少错误,从而提高整体的预测准确性。

二. 集成学习的作用

1.增加准确度:多个模型通常比单个模型预测更准确。

2.减少过拟合:通过模型多样性降低对训练数据特定模式的依赖。

3.对噪声数据和异常数据有更高的容忍度。

三.主要的集成学习方法

1.Bagging

原理:通过自助采样获得多个训练集,分别训练模型,然后取平均值(回归时)或投票(分类时)。

代表算法:随机森林算法。

bagging是一种并行式的集成学习方法,不同训练集训练模型之间没有联系

随机森林:决策树 + Bagging

随机森林api(使用前要记得 from sklearn.ensemble import RandomForestClassifier):

RandomForestClassifier(n_estimators = 40,  #随机森林中决策树的数量,一般在50-100之间criterion = 'gini',  #分割特征的方法max_depth = None,bootstrap = None,random_state = 42  #随机数种子
)

Bagging分类器:

BaggingClassifier(estimator = DecisionTreeClassifier(),  #集成算法使用决策树n_estimators = 60,  #多少个决策树max_samples = 0.8,  #每次采样80%的样本max_features = 0.8,  #每次采样80%的特征random_state = 42  #随机数种子
)

2.Boosting

原理:在每一轮迭代中,根据当前的样本权重分布,训练一个弱学习器。这个弱学习器会尝试对训练数据进行拟合,但它的性能可能相对较弱。然后,根据弱学习器的预测结果,调整样本的权重。具体来说,对于被错误分类的样本,增加其权重;对于被正确分类的样本,降低其权重。这样,在下一轮迭代中,弱学习器会更加关注那些之前被错误分类的样本。这个过程不断重复,直到达到预设的迭代次数或者满足其他停止条件。

代表算法:AdaBoost

Boosting是一种串行集成学习方法,将多个弱学习器集合成一个强学习器。

逐步改进:每个新模型都专注于纠正前一个模型的错误。

加权训练:错误分类的样本在后续训练中获得更高权重。

线性组合:将所有弱学习器的预测结果加权组合。

AdaBoost api(使用前要记得 from sklearn.ensemble import AdaBoostClassifier):

AdaBoostClassifier(estimator = DecisionTreeClassifier(),n_estimators = 60,learning_rate = 0.8,random_state = 42)

四.总结

Bagging:从原始训练数据集中有放回地随机抽样,生成多个子数据集,然后分别在这些子数据集上训练不同的基学习器,最后将这些基学习器的预测结果进行组合(分类任务通常采用投票法,回归任务通常采用平均法)来得到最终的预测结果。

Boosting:在训练过程中,根据前一个基学习器的预测结果来调整样本的权重,使得被错误分类的样本在后续的训练中得到更多的关注,然后依次训练多个基学习器,每个基学习器都在上一轮调整后的样本权重基础上进行训练,最后将这些基学习器按照一定的权重组合起来进行预测。

五.小练习

1.

 

import matplotlib.pyplot as plt
from IPython.core.pylabtools import figsize
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, classification_report, confusion_matrix
import numpy as np
import pandas as pdiris = load_iris()x = iris.data
y = iris.targetx_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.3, random_state = 42)
R_forest = RandomForestClassifier(n_estimators = 100,criterion = 'gini',max_depth = 3,random_state = 42
)
R_forest.fit(x_train, y_train)
y_predict = R_forest.predict(x_test)
print('准确率:', accuracy_score(y_predict, y_test))print('分类')
print(classification_report(y_test, y_predict, target_names=iris.target_names))cm = confusion_matrix(y_test, y_predict)
cm_df = pd.DataFrame(cm,index = [f"预测{cls}" for cls in iris.target_names],columns = [f"实际{cls}" for cls in iris.target_names]
)
print(cm_df)plt.figure((figsize(10, 6)))
plt.barh(iris.feature_names, R_forest.feature_importances_)
plt.title('importance')
plt.xlabel('feature_importances')
plt.ylabel('feature_names')
plt.tight_layout()
plt.show()

2.

 

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import classification_report, roc_auc_scoredata = pd.read_csv('creditcard.csv')scaler = StandardScaler()
data['Amount'] = scaler.fit_transform(data['Amount'].values.reshape(-1, 1))# 删除Time列
df = data.drop('Time', axis=1)x = data.drop('Class', axis=1)
y = data['Class']
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=42, stratify=y)# 4. 训练模型
model = RandomForestClassifier(n_estimators=100,class_weight='balanced',random_state=42)
model.fit(x_train, y_train)y_predict = model.predict(x_test)
y_prob = model.predict_proba(x_test)[:, 1]print("分类报告:")
print(classification_report(y_test, y_predict, digits=4))
print(f"AUC-ROC: {roc_auc_score(y_test, y_prob):.4f}")

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

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

相关文章

【笔试训练】给一个数组构建二叉树|从前序遍历与中序遍历构建二叉树|二叉树中的最大路径和

文章目录 1.给一个数组构建二叉树2.从前序遍历和中序遍历构建二叉树3.二叉树中的最大路径和 1.给一个数组构建二叉树 思路:就是借助一个队列实现层序遍历的思想。 先将root节点入队列,构造左右节点后,root取出来时,将其左右孩子都…

Swift实战:如何优雅地从二叉搜索树中挑出最接近的K个值

文章目录 摘要描述题解答案题解代码分析示例测试及结果时间复杂度空间复杂度总结未来展望 摘要 在日常开发中,我们经常会遇到“在一堆数据中找出最接近某个值”的需求。尤其在搜索引擎、推荐系统或者地理坐标匹配中,这种“最近匹配”的问题非常常见。Le…

Linux512 ssh免密登录 ssh配置回顾

下载MX 官网 参考 OK 登个tom试试 然后再计划登个RealServer 计划再用仅主机网卡试试 连不上 看来要通过JumpServer再联 通过网卡访问 被踢掉了 成功通过跳板机JumpServer登入到RealServer 方法一免密登录 现计划尝试方法二 只有1个tom 我连了两个tom 看来是根据IP划…

编译原理AST以Babel为例进行解读、Webpack中自定义loader与plugin

AST树详解 编译原理 主要研究如何将高级编程语言的源代码转换为机器能理解的目标代码(通常是二进制代码或中间代码)。编译器的底层实现通常包含多个阶段,包括词法分析、语法分析、语义分析和代码生成。 一、AST的核心概念与作用 AST&#…

51c大模型~合集127

我自己的原文哦~ https://blog.51cto.com/whaosoft/13905076 #Executor-Workers架构 图解Vllm V1系列2 本文详细介绍了vllm v1的Executor-Workers架构,包括Executor的四种类型(mp、ray、uni、external_launcher)及其适用场景&#xff…

《Effective Python》第1章 Pythonic 思维详解——深入理解流程控制中的解构利器match

《Effective Python》第1章 Pythonic 思维详解——深入理解流程控制中的解构利器match 引言 Python 3.10 引入了全新的 match 语句,它不仅是一个“类 switch”的语法结构,更是一种**结构化模式匹配(structural pattern matching&#xff09…

Nacos源码—8.Nacos升级gRPC分析五

大纲 7.服务端对服务实例进行健康检查 8.服务下线如何注销注册表和客户端等信息 9.事件驱动架构源码分析 7.服务端对服务实例进行健康检查 (1)服务端对服务实例进行健康检查的设计逻辑 (2)服务端对服务实例进行健康检查的源码 (3)服务端检查服务实例不健康后的注销处理 (…

[手写系列]Go手写db — — 完整教程

[手写系列]Go手写db ZiyiDB是一个简单的内存数据库实现,支持基本的SQL操作,包含create、insert、delete、select、update、drop。目前一期暂支持int类型以及字符类型数据,后续会支持更多数据结构以及能力。本项目基于https://github.com/eato…

十三、动态对象创建(Dynamic Object Creation)

十三、动态对象创建(Dynamic Object Creation) 目录 13.1 对象创建(Object creation)13.2 new / delete 操作符13.3 数组的 new 与 delete13.4 总结 背景说明 有时候我们需要知道程序中对象的数量、类型和声明周期,…

一、网络基础

IPv4:32位二进制 -- 点分十进制标识 192.168.1.1(连续的32位,为了好看方便每8位一段) IPv6:128位二进制 IP(Internet协议) 洪泛:除流量进入接口外的所有接口的复制 OSI模型&#…

前端面试测试题目(一)

一、Vue的双向绑定机制(v-model底层实现原理) Vue的双向绑定核心由 响应式系统 和 指令语法糖 共同实现,具体原理如下: 响应式系统 Vue通过数据劫持和依赖收集实现数据变化到视图的同步: • 数据劫持:在Vue…

我用Deepseek + 亮数据爬虫神器 1小时做出輿情分析器

我用Deepseek 亮数据爬虫神器 1小时做出輿情分析器 一、前言二、Web Scraper API 实战(1)选择对应的URL(2)点击进入对应url界面(3)API结果实例和爬取结果展示(4)用户直接使用post请…

机器学习实战:归一化与标准化的选择指南

在机器学习实战中——是否需要归一化(Normalization)或标准化(Standardization),取决于所使用的模型类型。 ✅ LightGBM / XGBoost 是否需要归一化或标准化? 不需要。 🔧 原因: L…

磁珠特点,原理与应用

什么是磁珠? 磁珠在1930年由日本东京工业大学的加藤与五郎和武井武两位教授发明,TDK首次生产,是电感的一种,区别就是:电感外面包裹着铁氧体材质。 因铁氧体具有高电阻率,低涡流损耗,高频时依旧…

【连载14】基础智能体的进展与挑战综述-多智能体系统设计

基础智能体的进展与挑战综述 从类脑智能到具备可进化性、协作性和安全性的系统 【翻译团队】刘军(liujunbupt.edu.cn) 钱雨欣玥 冯梓哲 李正博 李冠谕 朱宇晗 张霄天 孙大壮 黄若溪 在基于大语言模型的多智能体系统(LLM-MAS)中,合作目标和合…

React Native踩坑实录:解决NativeBase Radio组件在Android上的兼容性问题

React Native踩坑实录:解决NativeBase Radio组件在Android上的兼容性问题 问题背景 在最近的React Native项目开发中,我们的应用在iOS设备上运行良好,但当部署到Android设备时,进入语言设置和隐私设置页面后应用崩溃。我们遇到了…

[Windows] 网络检测工具InternetTest v8.8.2.2503 单文件版_支持查询IP_DNS_WIFI密码一键恢复

InternetTest(详情请戳 官网 / 作者项目地址)是一款免费开源的网络检测实用工具,其可实现监控、诊断互联网网络连接,例如进行 ping 测试、延迟测试、WiFi 密码查看、IP 地址或域名信息查询等算是搭建网站及服务器的实用维护工具。…

配置Hadoop集群-集群配置

以下是 Hadoop 集群的核心配置步骤,基于之前的免密登录和文件同步基础,完成 Hadoop 分布式环境的搭建: 1. 集群规划 假设集群包含 3 个节点: master:NameNode、ResourceManagerslave1:DataNode、NodeMana…

Spring Bean有哪几种配置方式?

大家好,我是锋哥。今天分享关于【Spring Bean有哪几种配置方式?】面试题。希望对大家有帮助; Spring Bean有哪几种配置方式? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Spring Bean的配置方式主要有三种&#xff…

Webpack中Compiler详解以及自定义loader和plugin详解

Webpack Compiler 源码全面解析 Compiler 类图解析: 1. Tapable 基类 Webpack 插件系统的核心,提供钩子注册(plugin)和触发(applyPlugins)能力。Compiler 和 Compilation 均继承此类,支持插件…