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

读取数据集及数据集划分

文章目录

  • 读取数据集及数据集划分
    • 一、scikit-learn工具介绍
      • 1 scikit-learn安装
      • 2 Scikit-learn包含的内容
    • 二、数据集读取与划分详解
      • 1、特征与标签(Feature & Target)
      • 2、数据集的获取方式
        • 1. 使用 `sklearn` **内置**数据集 `load`
          • 🏷️ **使用** `load_iris(return_X_y=True)` **加载特征和标签**
          • ✅ `return_X_y=True` 的作用:
          • 📦 返回值说明:
          • ✅ 对比 `return_X_y=False` 的默认行为:
        • 2.现实世界数据集(需联网下载一次)`fetch`
        • 3. 使用 Pandas 读取本地数据集
    • 三、为什么要划分数据集?
    • 四、如何进行数据划分?
      • 示例:鸢尾花数据集划分
    • 🤔 思考:数据标签不平衡会怎样?
      • ✅ 为了解决这个问题,我们可以使用:
      • 🔍 参数 `stratify=y` 的作用:
    • 🔁 预告:分层K折交叉验证
    • 🧠 小结

读取数据集及数据集划分


一、scikit-learn工具介绍

  1. Python语言机器学习工具
  2. Scikit-learn包括许多智能的机器学习算法的实现
  3. Scikit-learn文档完善,容易上手,丰富的API接口函数
  4. Scikit-learn官网:https://scikit-learn.org/stable/#
  5. Scikit-learn中文文档:https://scikitlearn.com.cn/
  6. scikit-learn中文社区

1 scikit-learn安装

参考以下安装教程:https://www.sklearncn.cn/62/

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple scikit-learn

2 Scikit-learn包含的内容

Scikit-learn包含的内容

二、数据集读取与划分详解

image-20250801171447119

1、特征与标签(Feature & Target)

在机器学习中,我们训练模型的目标是让它能够从数据中学习规律,并在遇到新数据时做出正确的预测。

  • 特征(Feature):是数据的输入,是描述样本属性的变量,例如身高、体重、温度等。
  • 标签(Target):是模型要预测的目标值,也叫做响应变量或输出变量。

举例:

身高(cm)体重(kg)是否肥胖
17070
16080

在这个例子中:

  • “身高” 和 “体重” 是特征(X)
  • “是否肥胖” 是标签(y)

2、数据集的获取方式

我们可以通过多种方式获取数据:

1. 使用 sklearn 内置数据集 load
from sklearn.datasets import load_iris
iris = load_iris()

image-20250801170623284

🏷️ 使用 load_iris(return_X_y=True) 加载特征和标签

在使用 sklearn.datasets 提供的内置数据集(如鸢尾花 iris 数据集)时,我们经常只关心两个核心内容:

  • 特征(Feature, X):用来描述样本的属性,如花瓣长度、宽度等;
  • 标签(Target, y):样本所属的类别,如鸢尾花的种类。

为了快速获取这两个内容,load_iris() 提供了一个参数:

return_X_y=True 的作用:
from sklearn.datasets import load_irisX, y = load_iris(return_X_y=True)
参数类型说明
return_X_ybool型如果设置为 True,直接返回 (X, y)
📦 返回值说明:
  • X:一个二维数组(ndarray),形状为 (样本数量, 特征数量),表示所有样本的特征矩阵;
  • y:一个一维数组,表示每个样本对应的分类标签。

👉 它们组成一个 元组(tuple),我们通过 解构赋值 方式将其拆分为变量 Xy,这样可以直接用于后续的数据预处理或模型训练。

✅ 对比 return_X_y=False 的默认行为:
data = load_iris()
print(data.keys())

如果不设置 return_X_y=True,返回的是一个 Bunch 对象(类似字典),需要手动访问:

X = data.data
y = data.target

访问内容:

iris.data           # 特征数据
iris.feature_names  # 特征名称
iris.target         # 目标标签
iris.target_names   # 标签说明
iris.DESCR          # 数据集描述
2.现实世界数据集(需联网下载一次)fetch

例如:20类新闻文本、加利福尼亚房价数据等

from sklearn.datasets import fetch_20newsgroups
news = fetch_20newsgroups(data_home='./src',subset='all')

说明:

  • None 这是默认值,下载的文件路径为 “C:/Users/ADMIN/scikit_learn_data/20news-bydate_py3.pkz”
    自定义路径 例如 “./src”, 下载的文件路径为“./20news-bydate_py3.pkz”

  • subset 可选 'train''test''all'

  • 返回的是一个 Bunch 对象,属性包括 data, target, target_names, filenames

3. 使用 Pandas 读取本地数据集
import pandas as pd
df = pd.read_csv("路径/文件名.csv")
X = df.iloc[:, :-1]  # 假设最后一列是标签
y = df.iloc[:, -1]   # 标签列

三、为什么要划分数据集?

我们训练模型的目的是让它泛化到未见过的数据,所以不能只在一份数据上训练和测试。

image-20250801171814692

数据集通常会被划分为:

  • 训练集(Training Set):用来训练模型。
  • 测试集(Test Set):用来测试模型的泛化能力。
  • (有时还有验证集用于调参)

这样做的好处:

  • 防止模型过拟合训练数据。
  • 更真实地评估模型性能。

四、如何进行数据划分?

使用 train_test_split 函数:

from sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42
)

参数说明:

  • test_size:测试集占比,一般为 0.2(即20%)
  • random_state:设置随机种子,保证结果可重复

示例:鸢尾花数据集划分

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_splitiris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=22
)
print(X_train.shape, X_test.shape)

🤔 思考:数据标签不平衡会怎样?

在实际分类问题中,标签可能分布不均(比如类别0有 90%,类别1 只有 10%)。如果我们随机划分数据集,可能会出现:

  • 训练集或测试集中完全没有某些类别,导致模型无法识别这类样本;
  • 模型在训练时只学会预测“多数类”,造成评估失真。

✅ 为了解决这个问题,我们可以使用:

train_test_split(X, y, test_size=0.2, stratify=y, random_state=42)

🔍 参数 stratify=y 的作用:

保证划分后的训练集和测试集中各类别的比例与原始数据集保持一致

参数作用说明
stratify=y按照标签y的比例进行分层采样,保持类别分布稳定

🔁 预告:分层K折交叉验证

即使加入了 stratify,我们还是依赖“单次划分”。为了更稳健地评估模型性能,我们还会学习分层K折交叉验证(Stratified K-Fold CV),它在每一折都保持类别分布一致,让评估结果更加可靠。


🧠 小结

  • 特征是模型的输入,标签是我们要预测的目标
  • 数据划分是构建模型的第一步,要考虑到数据的分布是否均衡
  • 使用 stratify 参数可以避免标签不平衡带来的划分偏差
  • 为提高评估稳健性,后续我们将引入 分层K折交叉验证
http://www.dtcms.com/a/310819.html

相关文章:

  • 7.苹果ios逆向-目录结构
  • 【vue】Vue 项目创建工具对比:vue create 与 create-vue 的核心区别
  • 安卓开发--LinearLayout(线性布局)
  • 华锐矩阵世界平台与海外客户洽谈合作
  • 将 YOLOv11 的 .pt 模型转换为 YOLOv8 格式需要特定的处理流程 机器学习 计算机视觉cv
  • Spotlight on MySQL 300安装教程(附使用指南):实时监控MySQL性能的工具
  • 好未来披露2026财年Q1财报:净利润3128万美元,同比大增174%
  • 解决IDEA中MAVEN项目总是将LANGUAGE LEVEL重置的问题
  • InteriorGS 数据集
  • 力扣-字母异位词
  • gpu 优化
  • 从删库到跑路?MyBatis3逻辑删除实战:优雅规避数据灾难
  • 一致连续性背后的直觉是什么?
  • 高速信号设计之 DDR5 篇
  • 【unity实战】简易的车辆控制系统
  • 从零开始:Kaggle 竞赛实战入门指南
  • 鸿蒙系统PC安装指南
  • 【RH124 问答题】第 9 章 控制服务和守护进程
  • 测试分类:详解各类测试方式与方法
  • 告别“AI味”图像!最新开源AI模型FLUX.1-Krea实现真实光影生成
  • 【n8n】如何跟着AI学习n8n【05】:Merge节点和子流程调用
  • Prim算法
  • 交叉编译简介
  • 【JAVA面试】基础篇
  • 广东省省考备考(第六十三天8.1)——资料分析、数量(强化训练)
  • 【AI应用】 能源保供战:AI大模型如何守护万家灯火?
  • Day37| 完全背包、518.零钱兑换II、377. 组合总和 Ⅳ、70. 爬楼梯 (进阶)
  • 流式编程学习思路
  • 疯狂星期四文案网第26天运营日记
  • 【PyTorch✨】01 初识PyTorch