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

笔记/sklearn中的数据划分方法

文章目录

    • 一、前言
    • 二、数据划分方法
      • 1. 留出法(Hold-out)
      • 2. K折交叉验证(K-Fold)
      • 3. 留一法(Leave-One-Out)
    • 三、总结

一、前言

简要介绍数据划分在机器学习中的作用。

二、数据划分方法

1. 留出法(Hold-out)

  • 使用 train_test_split 将数据分为训练集和测试集。
  • 代码片段:
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=0)
print('Train obs: ', len(X_train))
print('Test obs: ', len(X_test))

2. K折交叉验证(K-Fold)

  • 用 KFold 将数据分为多折,循环训练和测试。
  • 代码片段:
from sklearn.model_selection import KFold
X = np.random.randn(20, 1)
# 创建一个KFold对象,将数据分为5份,shuffle=True表示在分割前会先打乱数据
# 设置一个random state保证每次打乱的结果一致
kf = KFold(n_splits=5, shuffle=True, random_state=10)
#kf.get_n_splits(X)
for train_index, test_index in kf.split(X):print(train_index, test_index)
# 创建一个KFold对象,将数据分为5份,不打乱数据
kf = KFold(n_splits=5, shuffle=False)
#kf.get_n_splits(X)
for train_index, test_index in kf.split(X):print(train_index, test_index)    

在这里插入图片描述
Note:假设总共有N个样本,K折交叉验证会将数据平均分成K份。每一折中,test_index的数量大约是 N/K(如果N不能被K整除,有的折会多一个或少一个),其余的样本作为训练集,train_index的数量就是N- test_index 的数量。在本例中,test_index的数量是20/5=4。

3. 留一法(Leave-One-Out)

  • 每次留一个样本做测试,其余做训练。
  • 代码片段:
from sklearn.model_selection import LeaveOneOut
loo = LeaveOneOut()
loo.get_n_splits(X)
for train_index, test_index in loo.split(X):print(train_index, test_index)

在这里插入图片描述

三、总结

方法名称主要思想sklearn实现训练集数量测试集数量适用场景与特点
留出法随机划分一部分做训练,其余做测试train_test_split设定比例(如60%)设定比例(如40%)简单高效,适合大数据集
K折交叉验证将数据均分为K份,轮流做测试KFoldN-N/KN/K评估更稳定,适合中小数据集
留一法每次留一个样本做测试,其余训练LeaveOneOutN-11适合样本量较小的情况

说明:

  • 训练集数量和测试集数量均为占总样本数的比例或数量。
  • K折法和留一法属于交叉验证,能更全面评估模型性能。
  • 留出法实现简单,适合数据量较大时快速实验。

参考:https://scikit-learn.org/stable/api/sklearn.model_selection.html

博客内容如有错误欢迎指正~
在这里插入图片描述

http://www.dtcms.com/a/277163.html

相关文章:

  • 流程控制:从基础结构到跨语言实践与优化
  • 博客项目 laravel vue mysql 第五章 标签功能
  • 前端性能优化利器:懒加载技术原理与最佳实践
  • JAVA JVM虚拟线程
  • 第三章-提示词-解锁Prompt提示词工程核销逻辑,开启高效AI交互(10/36)
  • Vue3 Diff 算法片段解析:新旧节点队列之乱序比对与更新策略
  • 7月13日星期日今日早报简报微语报早读
  • Python PyWhat详解:一款高效的数据类型识别与扫描工具
  • 把固态电池当“显卡”用:基于Li⁺迁移率的矩阵乘法加速器——电解质-权重共设计框架与FP8训练实战
  • C++--List的模拟实现
  • 深入解析Hadoop RPC:技术细节与推广应用
  • vue3 ref vs reactive值的修改
  • 自动润滑系统:从 “盲目养护“ 到智能精注的工业运维革命
  • 【芯片笔记】ADF4159
  • 详解Linux下多进程与多线程通信(一)
  • python:使用openpyxl库,实现excel表格的创建、查询(读取)、修改、插入数据
  • LVS负载均衡集群概述
  • 论文笔记:AnImitation Learning Approach for Cache Replacement
  • iOS高级开发工程师面试——架构设计
  • MailSpring
  • [Subtitle Edit] 语言文件管理.xml | 测试框架(VSTest) | 构建流程(MSBuild) | AppVeyor(CI/CD)
  • 006_测试评估与安全实践
  • 设计模式之工厂模式:对象创建的智慧之道
  • 设计模式-门面模式
  • CAU数据挖掘第四章 分类问题
  • 【论文阅读47】-微震事件的时间、空间和强度(能量)预测
  • Java设计模式之行为型模式(命令模式)
  • 单例模式:确保全局唯一实例
  • 第三章-提示词-探秘大语言基础模型:认知、分类与前沿洞察(9/36)
  • 数据结构 Map和Set