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

文章目录

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

一、前言

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

二、数据划分方法

1. 留出法(Hold-out)

  • 使用 train_test_split 将数据分为训练集和测试集。
  • 代码片段:
python 复制代码
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 将数据分为多折,循环训练和测试。
  • 代码片段:
python 复制代码
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)

  • 每次留一个样本做测试,其余做训练。
  • 代码片段:
python 复制代码
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份,轮流做测试 KFold N-N/K N/K 评估更稳定,适合中小数据集
留一法 每次留一个样本做测试,其余训练 LeaveOneOut N-1 1 适合样本量较小的情况

说明:

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

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

博客内容如有错误欢迎指正~

相关推荐
PNP Robotics2 小时前
领军军者|PNP机器人包文涛:以具身智能定义机器人的“生命直觉”
人工智能·深度学习·学习·机器学习·机器人
云原生指北3 小时前
你的数据正在喂养 AI:从 Atlassian 公告,看科技平台的数据训练默认政策
笔记
**蓝桉**3 小时前
容器服务学习笔记
笔记·学习
zhangrelay4 小时前
三分钟云课实践速通--模拟电子技术-模电--SimulIDE
linux·笔记·学习·ubuntu·lubuntu
木木_王5 小时前
嵌入式Linux学习 | 数据结构 (Day05) 栈与队列详解(原理 + C 语言实现 + 实战实验 + 易错点剖析)
linux·c语言·开发语言·数据结构·笔记·学习
lkforce5 小时前
MiniMind学习笔记(三)--train_pretrain.py(预训练)
笔记·机器学习·ai·预训练·minimind·train_pretrain
OSwich5 小时前
【 Godot 4 学习笔记】数组(Array)
笔记·学习·godot
数据皮皮侠AI5 小时前
中国城市可再生能源数据集(2005-2021)|顶刊 Sci Data 11 种能源面板
大数据·人工智能·笔记·能源·1024程序员节
其实防守也摸鱼5 小时前
面试常问问题总结--护网蓝队方向
网络·笔记·安全·面试·职场和发展·护网·初级蓝队
lwf0061645 小时前
DeepFM 学习日记
深度学习·机器学习