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

机器学习-数据集划分

文章目录

  • 一. 为什么要划分数据集
  • 二. 数据集划分的方法
    • 1. 留出法:
    • 2. 交叉验证:将数据集划分为训练集,验证集,测试集
    • 3. 留一法:
    • 4. 自助法:

一. 为什么要划分数据集

为了能够评估模型的泛化能力,可以通过实验测试对学习器的泛化能力进行评估,进而做出选择。因此需要使用一个 “测试集” 来测试学习器对新样本的判别能力,以测试集上的 “测试误差” 作为泛化误差的近似。

一般测试集满足:

  • 能代表整个数据集
  • 测试集与训练集互斥
  • 测试集与训练集建议比例: 2比8、3比7 等

二. 数据集划分的方法

1. 留出法:

将数据集划分成两个互斥的集合:训练集,测试集

● 训练集用于模型训练
● 测试集用于模型验证
● 也称之为简单交叉验证

from sklearn.model_selection import train_test_split
from sklearn.model_selection import StratifiedShuffleSplit
from sklearn.model_selection import ShuffleSplit
from collections import Counter
from sklearn.datasets import load_iris#加载数据集
x,y = load_iris(return_X_y=True)
Counter(y)

Counter({0: 50, 1: 50, 2: 50})

#留出法(随机分割)
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.2,random_state=0)
Counter(y_train), Counter(y_test)

(Counter({2: 44, 0: 39, 1: 37}), Counter({1: 13, 0: 11, 2: 6}))

#留出法(分层分割)
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.2,random_state=0,stratify=y)
Counter(y_train), Counter(y_test)

(Counter({0: 40, 1: 40, 2: 40}), Counter({0: 10, 1: 10, 2: 10}))

# 多次划分(随机分割)
spliter = ShuffleSplit(n_splits=5, test_size=0.2, random_state=0)
for train,test in spliter.split(x,y):print('随机多次分割:', Counter(y[test]))

随机多次分割: Counter({1: 13, 0: 11, 2: 6})
随机多次分割: Counter({1: 12, 2: 10, 0: 8})
随机多次分割: Counter({1: 11, 0: 10, 2: 9})
随机多次分割: Counter({2: 14, 1: 9, 0: 7})
随机多次分割: Counter({2: 13, 0: 12, 1: 5})

# 多次划分(分层分割)
spliter = StratifiedShuffleSplit(n_splits=5, test_size=0.2, random_state=0)
for train,test in spliter.split(x,y):print('随机多次分割:', Counter(y[test]))

随机多次分割: Counter({0: 10, 1: 10, 2: 10})
随机多次分割: Counter({2: 10, 0: 10, 1: 10})
随机多次分割: Counter({0: 10, 1: 10, 2: 10})
随机多次分割: Counter({1: 10, 2: 10, 0: 10})
随机多次分割: Counter({1: 10, 2: 10, 0: 10})

2. 交叉验证:将数据集划分为训练集,验证集,测试集

在这里插入图片描述
K-Fold交叉验证,将数据随机且均匀地分成k分,如上图所示(k为10),假设每份数据的标号为0-9
● 第一次使用标号为0-8的共9份数据来做训练,而使用标号为9的这一份数据来进行测试,得到一个准确率
● 第二次使用标记为1-9的共9份数据进行训练,而使用标号为0的这份数据进行测试,得到第二个准确率
● 以此类推,每次使用9份数据作为训练,而使用剩下的一份数据进行测试
● 共进行10次训练,最后模型的准确率为10次准确率的平均值
● 这样可以避免了数据划分而造成的评估不准确的问题

● 训练集用于模型训练
● 验证集用于参数调整
● 测试集用于模型验证

from sklearn.model_selection import KFold   
from sklearn.model_selection import StratifiedKFold
from sklearn.datasets import load_iris
from collections import Counterfrom sklearn.model_selection import train_test_split
from sklearn.model_selection import StratifiedShuffleSplit
from sklearn.model_selection import ShuffleSplit
from collections import Counter
from sklearn.datasets import load_iris#加载数据集
x,y = load_iris(return_X_y=True)
Counter(y)

Counter({0: 50, 1: 50, 2: 50})

#随机交叉验证
spliter = KFold(n_splits=5, shuffle=True, random_state=0)
for tain,test in spliter.split(x,y):print('随机交叉验证:', Counter(y[test]))

随机交叉验证: Counter({1: 13, 0: 11, 2: 6})
随机交叉验证: Counter({2: 15, 1: 10, 0: 5})
随机交叉验证: Counter({0: 10, 1: 10, 2: 10})
随机交叉验证: Counter({0: 14, 2: 10, 1: 6})
随机交叉验证: Counter({1: 11, 0: 10, 2: 9})

#分层交叉验证
spliter = StratifiedKFold(n_splits=5, shuffle=True, random_state=0)
for tain,test in spliter.split(x,y):print('随机交叉验证:', Counter(y[test]))

随机交叉验证: Counter({0: 10, 1: 10, 2: 10})
随机交叉验证: Counter({0: 10, 1: 10, 2: 10})
随机交叉验证: Counter({0: 10, 1: 10, 2: 10})
随机交叉验证: Counter({0: 10, 1: 10, 2: 10})
随机交叉验证: Counter({0: 10, 1: 10, 2: 10})

KFold:
划分方式:每一折的数据都是从整个数据集中均匀划分的。例如,5 折交叉验证意味着数据集被划分成 5 个子集,每次验证时选择其中一个子集作为测试集,其余 4 个子集作为训练集。每个样本都会被用作一次验证集。
没有重复样本:每个样本仅会出现在一个折(训练集或验证集)中,不会有重复。
ShuffleSplit:
划分方式:ShuffleSplit 每次都会随机选择训练集和测试集,且训练集和测试集可能会有所重叠,也就是说,某些样本可能会出现在不同的划分中。
重复样本:允许样本在不同的划分中重复出现,因此数据集的某些样本在某次划分中可能作为训练集,而在另一划分中作为测试集。

3. 留一法:

每次从训练数据中抽取一条数据作为测试集

from sklearn.model_selection import LeaveOneOut
from sklearn.model_selection import LeavePOut
from sklearn.datasets import load_iris
from collections import Counter#加载数据集
x,y = load_iris(return_X_y=True)
Counter(y)

Counter({0: 50, 1: 50, 2: 50})

#留一法
spliter = LeaveOneOut()
for train,test in spliter.split(x,y):print('训练集:', len(train), '测试集:', len(test), test)

在这里插入图片描述

#留p法
spliter = LeavePOut(p=2)
for train,test in spliter.split(x,y):print('训练集:', len(train), '测试集:', len(test), test)

在这里插入图片描述

4. 自助法:

以自助采样(可重复采样、有放回采样)为基础
每次随机从D中抽出一个样本,将其拷贝放入D,然后再将该样本放回初始数据集D中,使得该样本在下次采样时仍有可能被抽到;
这个过程重复执行m次后,我们就得到了包含m个样本的数据集D′,这就是自助采样的结果。

● 在数据集D中随机抽取m个样本作为训练集
● 没被随机抽取到的D-m条数据作为测试集

import pandas as pd# 1. 构造数据集
data = [[90, 2, 10, 40],[60, 4, 15, 45],[75, 3, 13, 46],[78, 2, 64, 22]]data = pd.DataFrame(data)
data

在这里插入图片描述

# 2. 产生训练集
'''
这行代码的作用是从 data 数据集中进行有放回的随机抽样,抽样比例为 100%(即 frac=1)。这意味着每次抽样后,数据点会被放回数据集中,因此某些数据点可能会被多次抽样到,而有些数据点可能一次也不会被抽样到。具体来说:frac=1 表示抽样的比例为 100%,即抽取的数据量与原数据集相同。
replace=True 表示抽样是有放回的,即每次抽样后数据点会被放回数据集中,允许重复抽样。
这样做的结果是生成一个与原数据集大小相同的新数据集 train,其中可能包含重复的数据点。
'''
train = data.sample(frac=1, replace=True,random_state=0)
print('训练集:\n', train)print('*' * 30)# 3. 产生测试集
test = data.loc[data.index.difference(train.index)]
print('测试集:\n', test)

在这里插入图片描述

相关文章:

机器学习-数据集划分

文章目录 一. 为什么要划分数据集二. 数据集划分的方法1. 留出法:2. 交叉验证:将数据集划分为训练集,验证集,测试集3. 留一法:4. 自助法: 一. 为什么要划分数据集 为了能够评估模型的泛化能力,可…...

C++ 可变函数和参数

写一个函数&#xff0c;函数的参数是函数对象及参数&#xff0c;功能和thread类的构造函数相同。 代码示例&#xff1a; #include <iostream>#include <thread>#include <functional> using namespace std;void show0() { // 普通函数。cout <&…...

Hive之加载csv格式数据到hive

场景&#xff1a; 今天接了一个需求&#xff0c;将测试环境的hive数据导入到正式环境中。但是不需要整个流程的迁移&#xff0c;只需要迁移ads表 解决方案&#xff1a; 拿到这个需求首先想到两个方案&#xff1a; 1、将数据通过insert into语句导出&#xff0c;然后运行脚本 …...

C# OpenCV机器视觉:利用CNN实现快速模板匹配

在一个阳光灿烂的周末&#xff0c;阿强正瘫在沙发上&#xff0c;百无聊赖地换着电视频道。突然&#xff0c;一则新闻吸引了他的注意&#xff1a;某博物馆里一幅珍贵的古画离奇失踪&#xff0c;警方怀疑是被一伙狡猾的盗贼偷走了&#xff0c;现场只留下一些模糊不清的监控画面&a…...

【MCAL实战】MCU模块配置实践

目录 前言 正文 1.硬件分析 1.1 MCU系统模式分析 1.2MCU晶振使用分析 2.MCU通用配置 2.1 McuGeneralConfiguration 2.2 McuModuleConfiguration 2.3 McuResetSettingConf 2.4 McuTrapSettingConf 2.4 其他 3.MCU模式配置 3.1 McuModeSettingConf_0 3.2 McuModeSe…...

Vue3笔记——(三)hooks、路由

015 hooks 作用&#xff1a;使得代码更加模块化和可维护 Person.vue <template><div><h2>当前求和{{ sum }}</h2><button click"addFn">点我sum1</button></div> </template> <script setup lang"ts"…...

WinRAR.exe命令行的使用

工具 命令行打包命令 rem 默认压缩根目录&#xff0c;递归处理子文件夹使用 -r WinRAR.exe a -r test.rar C:/web/Views/...

【fly-iot飞凡物联】(20):2025年总体规划,把物联网整套技术方案和实现并落地,完成项目开发和课程录制。

前言 fly-iot飞凡物联专栏&#xff1a; https://blog.csdn.net/freewebsys/category_12219758.html 1&#xff0c;开源项目地址进行项目开发 https://gitee.com/fly-iot/fly-iot-platform 完成项目开发&#xff0c;接口开发。 把相关内容总结成文档&#xff0c;并录制课程。…...

Effective C++ 规则51:编写 new 和 delete 时需固守常规

1、背景 在 C 中&#xff0c;如果你需要为类自定义 new 和 delete&#xff0c;必须遵循一些约定和规则&#xff0c;以确保内存管理的一致性、可维护性和安全性。当我们使用 new 和 delete 操作时&#xff0c;C 编译器会&#xff1a; 调用全局或类特定的 operator new 来分配内…...

【更正版】梯级水光互补系统最大化可消纳电量期望短期优化调度模型

目录 1 主要内容 目标函数&#xff1a; 约束条件&#xff1a; 线性化处理&#xff1a; 流程示意&#xff1a; 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序参考文献《梯级水光互补系统最大化可消纳电量期望短期优化调度模型》&#xff0c;构建了以最大化整体可…...

移动端VR处理器和传统显卡的不同

骁龙 XR 系列芯片 更多地依赖 AI 技术 来优化渲染过程&#xff0c;而传统的 GPU 渲染 则倾向于在低画质下运行以减少负载。这种设计是为了在有限的硬件资源下&#xff08;如移动端 XR 设备&#xff09;实现高性能和低功耗的平衡。以下是具体的分析&#xff1a; 1. AI 驱动的渲染…...

基于回归分析法的光伏发电系统最大功率计算simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于回归分析法的光伏发电系统最大功率计算simulink建模与仿真。选择回归法进行最大功率点的追踪&#xff0c;使用光强和温度作为影响因素&#xff0c;电压作为输出进行建模。…...

JVM深入学习(一)

目录 一.JVM概述 1.1 为什么要学jvm&#xff1f; 1.2 jvm的作用 1.3 jvm内部构造 二.JVM类加载 2.1类加载过程 2.2类加载器 2.3类加载器的分类 2.4双亲委派机制 三.运行时数据区 堆空间区域划分&#xff08;堆&#xff09; 为什么分区(代)&#xff1f;&#xff08…...

【精选】基于数据挖掘的招聘信息分析与市场需求预测系统 职位分析、求职者趋势分析 职位匹配、人才趋势、市场需求分析数据挖掘技术 职位需求分析、人才市场趋势预测

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…...

视觉语言模型 (VLMs):跨模态智能的探索

文章目录 一. VLMs 的重要性与挑战&#xff1a;连接视觉与语言的桥梁 &#x1f309;二. VLMs 的核心训练范式&#xff1a;四种主流策略 &#x1f5fa;️1. 对比训练 (Contrastive Training)&#xff1a;拉近正例&#xff0c;推远负例 ⚖️2. 掩码方法 (Masking)&#xff1a;重构…...

kafka消费者详细介绍(超级详细)

文章目录 一、Kafka 消费者与消费者组1.1 Kafka 消费者&#xff08;Consumer&#xff09;概述1.1.1 消费者工作流程1.1.2 消费者的关键配置 1.2 Kafka 消费者组&#xff08;Consumer Group&#xff09;概述1.2.1 消费者组的工作原理1.2.2 消费者组的优点1.2.3 消费者组的再均衡…...

CF 339A.Helpful Maths(Java实现)

题目分析 输入一串式子&#xff0c;输出从小到大排列的式子 思路分析 如上所说核心思路&#xff0c;但是我要使用笨方法&#xff0c;输入一串式子用split分割开&#xff0c;但是此时需要用到转义字符&#xff0c;即函数内参数不能直接使用“”&#xff0c;而是“\\”。分割开后…...

web前端3--css

注意&#xff08;本文一切代码一律是在vscode中书写&#xff09; 1、书写位置 1、行内样式 //<标签名 style"样式声明"> <p style"color: red;">666</p> 2、内嵌样式 1、style标签 里面写css代码 css与html之间分离 2、css属性:值…...

Java Web-Request与Response

在 Java Web 开发中&#xff0c;Request 和 Response 是两个非常重要的对象&#xff0c;用于在客户端和服务器之间进行请求和响应的处理&#xff0c;以下是详细介绍&#xff1a; Request&#xff08;请求对象&#xff09; Request继承体系 在 Java Web 开发中&#xff0c;通…...

Spring AOP通知类型全解析:掌握方法执行前后的艺术

Spring的通知&#xff08;Advice&#xff09;类型主要有以下几种&#xff0c;它们都是在方法执行的不同阶段进行拦截和处理的一种机制&#xff1a; 1. 前置通知&#xff08;Before Advice&#xff09;&#xff1a;在目标方法执行之前执行的通知。就像你吃饭前要先洗手一样&…...

(一)HTTP协议 :请求与响应

前言 爬虫需要基础知识&#xff0c;HTTP协议只是个开始&#xff0c;除此之外还有很多&#xff0c;我们慢慢来记录。 今天的HTTP协议&#xff0c;会有助于我们更好的了解网络。 一、什么是HTTP协议 &#xff08;1&#xff09;定义 HTTP&#xff08;超文本传输协议&#xff…...

未初始化数据恢复全攻略

没有初始化概述 在日常使用电脑、硬盘、U盘等存储设备时&#xff0c;我们可能会遇到“没有初始化”的提示。这一情况通常发生在存储设备突然无法被系统正常识别或访问时&#xff0c;系统往往要求我们先进行初始化操作。然而&#xff0c;初始化操作意味着对存储设备进行格式化&…...

学习数据结构(1)算法复杂度

1.数据结构和算法 &#xff08;1&#xff09;数据结构是计算机存储、组织数据的方式&#xff0c;指相互之间存在⼀种或多种特定关系的数据元素的集合 &#xff08;2&#xff09;算法就是定义良好的计算过程&#xff0c;取一个或一组的值为输入&#xff0c;并产生出一个或一组…...

Github 2025-01-25Rust开源项目日报Top10

根据Github Trendings的统计,今日(2025-01-25统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10Python项目1Vue项目1JavaScript项目1Deno: 现代JavaScript和TypeScript运行时 创建周期:2118 天开发语言:Rust, JavaScript协议类型…...

免费GPU算力,不花钱部署DeepSeek-R1

在人工智能和大模型技术飞速发展的今天&#xff0c;越来越多的开发者和研究者希望能够亲自体验和微调大模型&#xff0c;以便更好地理解和应用这些先进的技术。然而&#xff0c;高昂的GPU算力成本往往成为了阻碍大家探索的瓶颈。幸运的是&#xff0c;腾讯云Cloud Studio提供了免…...

積分方程與簡單的泛函分析7.希爾伯特-施密特定理

1)def函數叫作"由核生成的(有源的)" 定义: 设 是定义在区域上的核函数。 对于函数,若存在函数使得, 则称函数是“由核生成的(有源的)”。 这里的直观理解是: 函数的“来源”可以通过核函数 与另一个函数的积分运算得到。 在积分方程理论中,这种表述常…...

2025年PHP面试宝典,技术总结。

面试是进入职场的第一道坎&#xff0c;因为我本身学校太一般的问题在面试中遇到了各种不爽&#xff0c;和那些高学历的相比自己真是信心大跌。我面试的方向是php开发工程师&#xff0c;主要做网站后台、APP接口等。下面是我这段时间总结的面试方面的常考常问的知识点&#xff0…...

网易Android开发面试题200道及参考答案 (上)

分析 Error 和 Exception 的区别 在 Java 编程中,Error 和 Exception 都继承自 Throwable 类,它们用于处理程序运行时出现的异常情况,但两者存在显著区别。 Error 通常表示系统级别的错误,是 Java 虚拟机(JVM)无法处理的严重问题,比如 OutOfMemoryError (内存溢出错误)…...

追剧记单词之:国色芳华与单词速记

●wretched adj. 恶劣的&#xff1b;悲惨的&#xff1b;不幸的&#xff1b;难过的 &#xff08;不幸的&#xff09;胜意出生于一个&#xff08;恶劣的&#xff09;家庭环境&#xff0c;嫁给王擎后依然过着&#xff08;悲惨的&#xff09;生活&#xff0c;她死后&#xff0c;牡丹…...

【科研建模】Pycaret自动机器学习框架使用流程及多分类项目实战案例详解

Pycaret自动机器学习框架使用流程及项目实战案例详解 1 Pycaret介绍2 安装及版本需求3 Pycaret自动机器学习框架使用流程3.1 Setup3.2 Compare Models3.3 Analyze Model3.4 Prediction3.5 Save Model4 多分类项目实战案例详解4.1 ✅ Setup4.2 ✅ Compare Models4.3 ✅ Experime…...