Python交叉验证实现

news2024/11/26 15:41:10

目录

  • <font color=blue size=4 face="楷体">HoldOut 交叉验证
  • <font color=red size=4 face="楷体">K 折交叉验证
  • <font color=blue size=4 face="楷体">分层 K 折交叉验证
  • <font color=blue size=4 face="楷体">Leave P Out 交叉验证
  • <font color=blue size=4 face="楷体">留一交叉验证
  • <font color=blue size=4 face="楷体">蒙特卡罗交叉验证(Shuffle Split)
  • <font color=blue size=4 face="楷体">时间序列交叉验证

HoldOut 交叉验证

在这种交叉验证技术中,整个数据集被随机划分为训练集和验证集。 根据经验,整个数据集的近 70% 用作训练集,其余 30% 用作验证集。

  • 但不适合不平衡数据集
  • 大量数据无法训练模型
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
iris=load_iris()
X=iris.data
Y=iris.target
print("Size of Dataset {}".format(len(X)))
logreg=LogisticRegression()
x_train,x_test,y_train,y_test=train_test_split(X,Y,test_size=0.3,random_state=42)
logreg.fit(x_train,y_train)
predict=logreg.predict(x_test)
print("Accuracy score on training set is {}".format(accuracy_score(logreg.predict(x_train),y_train)))
print("Accuracy score on test set is {}".format(accuracy_score(predict,y_test)))

K 折交叉验证

  • 在这种 K 折交叉验证技术中,整个数据集被划分为 K 个相等大小的部分。 每个分区称为一个“折叠”。因此,因为我们有 K 个部分,所以我们称之为 K 折叠。 一折用作验证集,其余 K-1 折用作训练集。
  • 该技术重复 K 次,直到每个折叠用作验证集,其余折叠用作训练集。
  • 模型的最终精度是通过取 k-models 验证数据的平均精度来计算的。
  • 不用于不平衡的数据集
  • 不适合时间序列数据
from sklearn.datasets import load_iris
from sklearn.model_selection import cross_val_score,KFold
from sklearn.linear_model import LogisticRegression
iris=load_iris()
X=iris.data
Y=iris.target
logreg=LogisticRegression()
kf=KFold(n_splits=5)
score=cross_val_score(logreg,X,Y,cv=kf)
print("Cross Validation Scores are {}".format(score))
print("Average Cross Validation score :{}".format(score.mean()))

分层 K 折交叉验证

分层 K-Fold 是 K-Fold 交叉验证的增强版本,主要用于不平衡的数据集。 就像 K-fold 一样,整个数据集被分成大小相等的 K-fold。

  • 但是在这种技术中,每个折叠将具有与整个数据集中相同的目标变量实例比率。
  • 对于不平衡数据非常有效
  • 不适合时间序列数据
from sklearn.datasets import load_iris
from sklearn.model_selection import cross_val_score,StratifiedKFold
from sklearn.linear_model import LogisticRegression
iris=load_iris()
X=iris.data
Y=iris.target
logreg=LogisticRegression()
stratifiedkf=StratifiedKFold(n_splits=5)
score=cross_val_score(logreg,X,Y,cv=stratifiedkf)
print("Cross Validation Scores are {}".format(score))
print("Average Cross Validation score :{}".format(score.mean()))

Leave P Out 交叉验证

Leave P Out 交叉验证是一种详尽的交叉验证技术,其中 p 样本用作验证集,剩余的 np 样本用作训练集。

  • 假设我们在数据集中有 100 个样本。 如果我们使用 p=10,那么在每次迭代中,10 个值将用作验证集,其余 90 个样本将用作训练集。
  • 重复这个过程,直到整个数据集在 p-样本和 n-p 训练样本的验证集上被划分。
  • 所有数据样本都用作训练和验证样本。
  • 计算时间长
  • 不适合不平衡数据集
from sklearn.model_selection import LeavePOut,cross_val_score
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
iris=load_iris()
X=iris.data
Y=iris.target
lpo=LeavePOut(p=2)
lpo.get_n_splits(X)
tree=RandomForestClassifier(n_estimators=10,max_depth=5,n_jobs=-1)
score=cross_val_score(tree,X,Y,cv=lpo)
print("Cross Validation Scores are {}".format(score))
print("Average Cross Validation score :{}".format(score.mean()))

留一交叉验证

留一交叉验证是一种详尽的交叉验证技术,其中 1 个样本点用作验证集,其余 n-1 个样本用作训练集。

  • 假设我们在数据集中有 100 个样本。 然后在每次迭代中,1 个值将用作验证集,其余 99 个样本作为训练集。 因此,重复该过程,直到数据集的每个样本都用作验证点。
  • 它与使用 p=1 的 LeavePOut 交叉验证相同。
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import LeaveOneOut,cross_val_score
iris=load_iris()
X=iris.data
Y=iris.target
loo=LeaveOneOut()
tree=RandomForestClassifier(n_estimators=10,max_depth=5,n_jobs=-1)
score=cross_val_score(tree,X,Y,cv=loo)
print("Cross Validation Scores are {}".format(score))
print("Average Cross Validation score :{}".format(score.mean()))

蒙特卡罗交叉验证(Shuffle Split)

蒙特卡罗交叉验证,也称为Shuffle Split交叉验证,是一种非常灵活的交叉验证策略。 在这种技术中,数据集被随机划分为训练集和验证集。

  • 我们已经决定了要用作训练集的数据集的百分比和用作验证集的百分比。 如果训练集和验证集大小的增加百分比总和不是 100,则剩余的数据集不会用于训练集或验证集。
  • 假设我们有 100 个样本,其中 60% 的样本用作训练集,20% 的样本用作验证集,那么剩下的 20%( 100-(60+20)) 将不被使用。
  • 这种拆分将重复我们必须指定的“n”次。
  • 1.我们可以自由使用训练和验证集的大小。
    2.我们可以选择重复的次数,而不依赖于重复的折叠次数。
  • 可能不会为训练集或验证集选择很少的样本。
  • 不适合不平衡的数据集
from sklearn.model_selection import ShuffleSplit,cross_val_score
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
logreg=LogisticRegression()
shuffle_split=ShuffleSplit(test_size=0.3,train_size=0.5,n_splits=10)
scores=cross_val_score(logreg,iris.data,iris.target,cv=shuffle_split)
print("cross Validation scores:n {}".format(scores))
print("Average Cross Validation score :{}".format(scores.mean()))

时间序列交叉验证

什么是时间序列数据?
时间序列数据是在不同时间点收集的数据。由于数据点是在相邻时间段收集的,因此观测值之间可能存在相关性。这是区分时间序列数据与横截面数据的特征之一。

在时间序列数据的情况下如何进行交叉验证?
在时间序列数据的情况下,我们不能选择随机样本并将它们分配给训练集或验证集,因为使用未来数据中的值来预测过去数据的值是没有意义的。

  • 由于数据的顺序对于时间序列相关问题非常重要,所以我们根据时间将数据拆分为训练集和验证集,也称为“前向链”方法或滚动交叉验证。
  • 我们从一小部分数据作为训练集开始。基于该集合,我们预测稍后的数据点,然后检查准确性。
  • 然后将预测样本作为下一个训练数据集的一部分包括在内,并对后续样本进行预测。
    在这里插入图片描述
import numpy as np
from sklearn.model_selection import TimeSeriesSplit
X = np.array([[1, 2], [3, 4], [1, 2], [3, 4], [1, 2], [3, 4]])
y = np.array([1, 2, 3, 4, 5, 6])
time_series = TimeSeriesSplit()
print(time_series)
for train_index, test_index in time_series.split(X):
    print("TRAIN:", train_index, "TEST:", test_index)
    X_train, X_test = X[train_index], X[test_index]
    y_train, y_test = y[train_index], y[test_index]

ref:https://zhuanlan.zhihu.com/p/435970393

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1042643.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

融云 CallPlus + X,通话场景一站式解决方案

融云近期上线的 CallPlus SDK&#xff0c;针对音视频呼叫场景单独设计后端服务 Call Server&#xff0c;信令延时低至 150ms&#xff0c;确保各端计时准确、一致&#xff1b;上线了音视频通话互转、灵活的多人通话、通话记录管理能力等功能。关注【融云全球互联网通信云】了解更…

掌动智能兼容性测试有哪些优势

兼容性测试为企业带来市场竞争优势&#xff0c;并提高用户满意度。在软件开发过程中&#xff0c;将兼容性测试作为一个重要的环节&#xff0c;将为企业的成功和用户满意度打下坚实的基础。那么&#xff0c;掌动智能兼容性测试的具体优势是什么?下面&#xff0c;就来看看具体介…

【面试题】说说你对 async和await 理解

前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 表妹一键制作自己的五星红旗国庆头像&#xff0c;超好看 async await详解 原理&#xff1a; async声明该函数是异步的&#xff0c;且该函数会返回一个…

比例导引详解(Proportional navigation guidance,PNG)-及Python程序

模型算法推导 比例导引是一种制导算法&#xff0c;其经典程度相当于控制器中的PID&#xff0c;在本文中&#xff0c;只对其二维平面的情况做分析&#xff0c;考虑一个拦截弹拦截机动目标&#xff08;固定目标相当于目标速度为0&#xff09;&#xff0c;其运动如下图所示&#…

变配电智能化系统:提高效率与安全性

随着科技的发展&#xff0c;电力系统正在逐步向智能化、数字化方向转型。变配电系统作为电力系统的重要组成部分&#xff0c;其智能化水平直接影响着电力系统的运行效率和稳定性。 一、系统概述 力安科技变配电智能化系统是一种采用先进技术&#xff0c;实现对变配电设…

DD5 进制转换

目录 一、题目 二、分析 三、代码 一、题目 进制转换_牛客题霸_牛客网 二、分析 三、代码 #include <iostream> #include <vector> #include <string> using namespace std; string Greater_than_Ten(int digit)//余数大于等于10的时候转换成对应的字母…

低照度增强算法(图像增强+目标检测+代码)

本文介绍 在增强低光图像时&#xff0c;许多深度学习算法基于Retinex理论。然而&#xff0c;Retinex模型并没有考虑到暗部隐藏的损坏或者由光照过程引入的影响。此外&#xff0c;这些方法通常需要繁琐的多阶段训练流程&#xff0c;并依赖于卷积神经网络&#xff0c;在捕捉长距…

从零搭建开发脚手架 顺应潮流开启升级 - SpringBoot 从2.x 升级到3.x

文章目录 涉及升级项导入包修改SpringBoot3.x中spring.factories功能被移除 涉及升级项 升级JDK 8 -> JDK17 Spring Boot 2.3.7 -> Spring Boot 3.1.3 Mysql5.7.x -> Mysql8.x Mybatis-Puls 3.4.2 -> 3.5.3 knife4j 2.x -> 4.3.x sa-token 1.24.x -> 1.…

Apache Derby的使用

Apache Derby是关系型数据库&#xff0c;可以嵌入式方式运行&#xff0c;也可以独立运行&#xff0c;当使用嵌入式方式运行时常用于单元测试&#xff0c;本篇我们就使用单元测试来探索Apache Derby的使用 一、使用IDEA创建Maven项目 打开IDEA创建Maven项目&#xff0c;这里我…

C++: 模板(进阶)

学习目标 1.了解非类型模板参数 2.了解类模板的特化 3.知道模板分离编译会出现的问题 1.非类型模板参数(整型常量) 模板参数: 1.类型形参:在模板参数列表中,class/typename后的参数名称 2.非类型形参:整型常量 示例: template<class T ,size_t N>class arr{public://....…

Docker和Docker compose的安装使用指南

一&#xff0c;环境准备 Docker运行需要依赖jdk&#xff0c;所以需要先安装一下jdk yum install -y java-1.8.0-openjdk.x86_64 二&#xff0c;Docker安装和验证 1&#xff0c;安装依赖工具 yum install -y yum-utils 2&#xff0c;设置远程仓库 yum-config-manager --add-r…

什么是AI问答机器人?它的应用场景有哪些?

近年来&#xff0c;由于技术的进步和对个性化客户体验的需求不断增长&#xff0c;AI问答机器人也是获得了巨大的关注。AI问答机器人&#xff0c;也被称为AI聊天机器人&#xff0c;是一种旨在模拟人类对话并通过基于文本或语音的界面与用户交互的计算机程序。其能够自动执行各种…

idea Springboot在线商城系统VS开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot 在线商城系统是一套完善的信息系统&#xff0c;结合springboot框架和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用springboot框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有 完整的源代码和数据库&…

SpringCloud篇

SpringCloud五大组件是啥&#xff1f; rabbin gateway feign 注册中心&#xff08;nacos,Eureka&#xff09;,服务保护 &#xff08;sentinel&#xff09; &#xff1b; nacos和eureka的区别是什么&#xff1f; 负载均衡是如何实现的&#xff1f;&#xff1f; ribbon负载策略…

kaggle新赛:Optiver 美股价格预测赛题解析

赛题名称&#xff1a;Optiver - Trading at the Close 赛题链接&#xff1a;https://www.kaggle.com/competitions/optiver-trading-at-the-close 赛题背景 证券交易所是快节奏、高风险的环境&#xff0c;每一秒都很重要。随着交易日接近尾声&#xff0c;强度不断升级&#…

常见逻辑漏洞总结

Web安全测试中常见逻辑漏洞解析&#xff08;实战篇&#xff09; 简要&#xff1a; 越权漏洞是比较常见的漏洞类型&#xff0c;越权漏洞可以理解为&#xff0c;一个正常的用户A通常只能够对自己的一些信息进行增删改查&#xff0c;但是由于程序员的一时疏忽&#xff0c;对信息…

2024年浙江理工大学MBA项目报考形势如何?

浙江理工大学MBA项目怎么样&#xff0c;值不值得报考&#xff1f;2024年的最新招生政策已经出来&#xff0c;浙江理工大学MBA项目有全日制和非全日制两个MBA方向招生&#xff0c;分别招收19人和52人&#xff0c;总体招生规模不大&#xff0c;这也是浙江理工大学MBA项目近些年的…

锐思WMS和金蝶云星辰V1单据接口对接

锐思WMS和金蝶云星辰V1单据接口对接 来源系统:金蝶云星辰V1 金蝶云星辰基于金蝶云苍穹云原生PaaS平台构建&#xff0c;聚焦小型企业在线经营和数字化管理&#xff0c;提供财务云、税务云、进销存云、零售云、订货商城等SaaS服务&#xff0c;支持企业拓客开源、智能管理、实时决…

批量删除wordpress文章修订版本/自动草稿残留数据(3种方法)及四种方法禁用WordPress文章历史修订/自动保存/自动草稿功能

目录 1、批量删除wordpress文章修订版本/自动草稿残留数据&#xff08;3种方法&#xff09; 方法一&#xff1a;SQL命令批量删除 命令&#xff1a; 方法二&#xff1a;利用PHP代码来删除 方法三&#xff1a;利用数据库清理优化插件 WP Clean Up 或 WP Cleaner 批量删除 2…

VEX —— Functions|Math

目录 sign —— 返回给定数的符号标签 abs —— 返回绝对值 avg —— 返回平均值 sum —— 求和 max —— 返回最大值 min —— 返回最小值 rint —— 返回四舍五入后的整数 ceil —— 返回最近的最大整数 floor —— 返回最近的最小整数 frac —— 返回浮点值的小数…