当前位置: 首页 > news >正文

Scikit-learn:Bunch 对象

在 Scikit-learn 中,很多数据集加载函数或获取函数并不是直接返回元组、列表或单独的数组,而是以名为 Bunch 的对象统一封装。理解 Bunch 对象,有助于更清晰地读取数据集内容,也能帮助初学者建立“数据集由多个部分共同构成”的整体认识。

一、什么是 Bunch 对象

Bunch 是 Scikit-learn 中的一种容器对象,本质上是支持属性访问的字典式数据结构。

Bunch 与普通字典非常相似,但它额外支持通过属性名访问键对应的值。

例如普通字典通常写作:

d["data"]

而 Bunch 既能这样写,也能写成:

bunch.data

因此,Bunch 可以看作是:在保留字典组织方式的同时,提供了更方便的访问形式。

Bunch 的作用主要是把同一数据集的多个相关部分统一组织起来,并提供更方便的访问方式;真正参与数值计算和模型训练的,仍然是其中的 data、target 等具体数据对象。

二、为什么 Scikit-learn 要使用 Bunch

一个机器学习数据集往往不只有一份“数据”。通常还会同时包含:

• 特征数据

• 标签数据

• 特征名称

• 类别名称

• 数据说明文档

如果把这些内容分散返回,使用时会比较混乱。而 Bunch 的优势就在于:用一个对象统一保存这些相关信息。

例如,加载鸢尾花数据集时:

from sklearn.datasets import load_iris iris = load_iris()print(type(iris))

输出结果通常类似于:

<class 'sklearn.utils._bunch.Bunch'>

可以看出,load_iris() 返回的并不是单独的数组,而是一个 Bunch 对象。

说明:上例输出结果中出现的是其实际实现所在的模块路径;在学习和使用时,通常将它理解为 sklearn.utils.Bunch 即可。

三、Bunch 中常见的字段

不同数据集返回的字段可能略有差异。

要注意的是,下面列出的这些字段是常见字段,而不是所有 Bunch 对象都必须同时具备的固定字段集合。

data 是最核心的部分,表示特征矩阵。

它通常是一个二维数组:

• 每一行表示一个样本

• 每一列表示一个特征

例如在鸢尾花数据集中,四列特征分别对应花萼长度、花萼宽度、花瓣长度和花瓣宽度;在实际返回结果中,它们会以 sepal length (cm)、sepal width (cm)、petal length (cm)、petal width (cm) 等名称出现。

print(iris.data[:3])

说明:

在较新版本的 Scikit-learn 中,许多加载函数支持 as_frame=True。此时返回的 Bunch 中,data 会变为 pandas DataFrame,target 会变为 DataFrame 或 Series;如果再设置 return_X_y=True,则函数会直接返回这两个对象。

target 表示标签数组,也就是每个样本对应的类别或目标值。

print(iris.target[:10])

如果是分类问题,target 往往是类别编号;

如果是回归问题,target 往往是连续数值。

feature_names 用于说明各个特征列的名称。

print(iris.feature_names)

这对于理解 data 中每一列的含义非常重要。否则,我们只能看到数字,而不知道这些数字分别表示什么。

在分类数据集中,target_names 常用于给出类别名称。

print(iris.target_names)

例如,target 中可能用 0、1、2 表示三类花,而 target_names 则给出它们真正的类别名称。

DESCR 是对数据集的文字说明(description),通常包含:

• 数据集背景

• 样本数量

• 特征说明

• 类别说明

• 数据来源

print(iris.DESCR[:300])

DESCR 是一个字符串(str)类型的字段,适合在初步了解数据集时阅读,但一般不用于正式建模过程中的数值计算。

四、Bunch 的两种访问方式

1、属性访问

这是最常见、也最直观的方式:

print(iris.data.shape)print(iris.target.shape)print(iris.feature_names)

这种写法简洁,适合日常使用。

不过需注意,属性访问要求键名必须是有效的 Python 变量名(无空格、无连字符)。若遇到特殊键名,仍需使用下方的字典方式访问。

2、字典方式访问

由于 Bunch 与字典类似,也可以这样写:

print(iris["data"].shape)print(iris["target"].shape)print(iris["feature_names"])

这种写法在需要动态处理键名时更方便。

例如:

for key in iris.keys(): print(key)

五、简单示例

下面通过一个简单示例观察 Bunch 对象中最常用的几个部分:

from sklearn.datasets import load_iris # 加载鸢尾花数据集iris = load_iris() # 查看 Bunch 中有哪些字段print(iris.keys()) # 查看特征矩阵和标签数组的形状print("data 的形状:", iris.data.shape)print("target 的形状:", iris.target.shape) # 查看特征名称print("特征名称:", iris.feature_names) # 查看类别名称print("类别名称:", iris.target_names) # 查看前 3 个样本print("前 3 个样本:")print(iris.data[:3]) # 查看前 3 个样本的标签print("前 3 个标签:")print(iris.target[:3])

通过这个示例可以看到,Bunch 对象并不是某种复杂算法结构,而是一个把数据集相关信息组织在一起的“容器”。

六、学习 Bunch 时应把握的重点

学习 Bunch,不必把注意力放在它的内部实现上,而应重点理解以下三点。

1、Bunch 是数据集的封装容器

Bunch 负责把同一数据集的多个部分组织在一起。

2、Bunch 本身不是训练数据

真正用于建模的是 data 和 target,而不是 Bunch 这个外层对象本身。

3、Bunch 可帮助我们建立完整的数据集视角

一个数据集不仅有样本值,还应包括特征名、标签含义和说明信息。

Bunch 的价值正在于把这些内容统一呈现出来。

从机器学习建模的角度看,Bunch 更适合用于“查看和理解数据集”;真正送入模型的,通常是其中的 data 与 target,或者由 return_X_y=True 直接返回的两个对象。

📘 小结

Bunch 对象是 Scikit-learn 中常见的数据集返回形式,本质上是一种支持属性访问的字典式容器。它将特征矩阵、标签数组、特征名称、类别名称和数据说明等信息统一封装起来,使数据集的结构更清晰、读取更方便。对于初学者来说,掌握 Bunch,有助于从“只看数据”过渡到“整体理解数据集结构”。

“点赞有美意,赞赏是鼓励”

http://www.jsqmd.com/news/668629/

相关文章:

  • 从T3到T507:全志工控芯片升级,我的嵌入式项目选型避坑指南
  • 2026年有机凉拌汁选购指南:江苏五大口碑厂商深度评测 - 2026年企业推荐榜
  • 【种类并查集】洛谷 P2024 [NOI2001] 食物链
  • 【JAVA基础面经】Set and Map
  • python hadolint
  • Wireshark安装踩坑实录:我是如何绕过VC++2015和KB补丁在Win10上跑起来的
  • 别再暴力上采样了!手把手教你用DeepLabv3+的Decoder模块提升分割边缘精度
  • 因果推理不是AGI的加分项,而是生死线,深度拆解3大主流架构在Do-Calculus测试中的崩溃临界点
  • 抖音内容获取的革命:从手动录屏到智能批量下载的3步终极方案
  • IgH EtherCAT 从入门到精通:第 12 章 CANopen over EtherCAT(CoE)协议
  • 杰理之获取歌词时看写入flash的起始地址是否为4K对齐【篇】
  • 2026年当下,济南景程新材料科技有限公司:聚醚直销领域的专业选择与实力解析 - 2026年企业推荐榜
  • 保姆级教程:从零在Mac上配置HarmonyOS PC的HNP构建环境(含Gitcode账户与SSH密钥关联详解)
  • 2026年4月新消息:江苏地区备受好评的排水沟盖板厂家深度解析 - 2026年企业推荐榜
  • 别再凭感觉画板了!PCB布局布线这10个坑,新手工程师最容易踩
  • 2026年近期江苏摆闸定制攻略:五大厂家深度评测与联系指南 - 2026年企业推荐榜
  • ESP8266-01S的TCP通信,从AT指令到Lua脚本开发,哪种更适合你的项目?
  • 材料科学正经历第4次方法论革命?——基于2026奇点大会278项AGI实验数据的颠覆性趋势研判
  • 2026年当下,上饶巡逻特种车五大授权服务商综合测评与选型指南 - 2026年企业推荐榜
  • 别再问客服了!51单片机驱动HC-SR501人体感应模块,这篇保姆级教程把跳线、代码、避坑全讲透了
  • 2026年Q2海南自贸港建设深化,如何挑选高可靠的摆闸源头合作厂家? - 2026年企业推荐榜
  • Sunshine游戏串流终极指南:从零开始搭建自托管游戏主机
  • 模型持久化不会提升准确率——揭秘机器学习中常见的评估误区
  • 双目测距精度到底怎么样?我用Python实测了不同距离和基线的效果
  • 终极黑苹果配置指南:OpCore-Simplify一键自动化工具完全教程
  • 从ISO9506到实际报文:手把手用Wireshark解码一个MMS数据包(含ASN.1/BER解析实战)
  • 智谱GLM-5.1登场:开源首超Opus 4.6,8小时自主执行重塑AI Agent边界
  • 2026年近期安徽摆闸采购:如何甄别优质厂家与避坑指南 - 2026年企业推荐榜
  • 2026年最新泰安五大新型围墙服务商专业推荐 - 2026年企业推荐榜
  • 3步上手BepInEx:让你的Unity游戏模组开发更简单