基于scikit-learn工具的交叉检验 — cross_validation模型

2024-05-14 06:48

本文主要是介绍基于scikit-learn工具的交叉检验 — cross_validation模型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 何为交叉检验

在进行数据挖掘的工作或者比赛中,通常都是给定一个train训练数据集和一个test测试数据集,然后采用一个或多个模型对train进行训练,最后将训练完成得到的模型用于test 的预测。然后问题来了,我们怎么确定我们对train 训练的模型是优秀的呢?
那么我们会想到从原来的train 数据集中分成两部分 train_1,train_2,拿train_1去训练,然后将训练完成的结果带入另一部分train_2去验证。因为这时另一部分也是有target的,所以可以验证出模型的效果。
但是这样也有一个弊端,因为我们一直在将模型优化到使train_2 的结果越来越好的状态,可是我们的最终目的是要预测test, 而我们不停的优化train_2的结果很可能会造成在train_2 上的过拟合。因此我们不能只分一份来做验证,而是采用多份数据去验证,然后求平均;这样就避免了对谋一份验证数据的过拟合。这就叫交叉检验。

下面我主要介绍通过sklearn中的cross_validation 来做交叉检验

2. cross_validation

2.1 cross_validation.KFold

KFold(n,n_fold=3,shuffle=False,random_state=None)
  • n 样本个数
  • n_fold 分为多少份,至少为2,每份样本个数相同

例1

from sklearn import cross_validation
k_fold = cross_validation.KFold(n=12,n_folds=4)
for train_indices,test_indices in k_fold:print train_indices,test_indices

例2

from sklearn import cross_validation
from sklearn import datasets,svm
digits = datasets.load_digits()
X_digits = digits.data
y_digits = digits.target
clf = svm.SVC(kernel='linear',C=1)
k_fold = cross_validation.KFold(len(X_digits),n_folds=10)
print [clf.fit(X_digits[train],y_digits[train]).score(X_digits[test],y_digits[test]) for train ,test in k_fold]

还有一个函数,可以不需要写for循环,直接得到结果

cross_validation.cross_val_score(clf,X_digits,y_digits,cv=10)

2.2 cross_validation.StratifiedKFold

StratifiedKFold 是kFold 的变形,它划分的时候是将每个类别的相同比例的样本进行搭配作为1个fold,

StratifiedKFold(y,n_folds=3,shuffle=False,random_state=None)
  • y 样本标签

例子

import numpy as np
from sklearn import cross_validation
X=np.array([[1,2],[3,4],[1,2],[3,4],[1,2],[3,4],[1,2],[3,4]])
y=np.array([0,0,1,1,0,0,1,1])
skf = cross_validation.StratifiedKFold(y,n_folds=4)
for skf1,skf2 in skf:print skf1,skf2

这篇关于基于scikit-learn工具的交叉检验 — cross_validation模型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/988045

相关文章

Python+wxPython开发一个文件属性比对工具

《Python+wxPython开发一个文件属性比对工具》在日常的文件管理工作中,我们经常会遇到同一个文件存在多个版本,或者需要验证备份文件与源文件是否一致,下面我们就来看看如何使用wxPython模... 目录引言项目背景与需求应用场景核心需求运行结果技术选型程序设计界面布局核心功能模块关键代码解析文件大

Java领域模型示例详解

《Java领域模型示例详解》本文介绍了Java领域模型(POJO/Entity/VO/DTO/BO)的定义、用途和区别,强调了它们在不同场景下的角色和使用场景,文章还通过一个流程示例展示了各模型如何协... 目录Java领域模型(POJO / Entity / VO/ DTO / BO)一、为什么需要领域模

深入理解Redis线程模型的原理及使用

《深入理解Redis线程模型的原理及使用》Redis的线程模型整体还是多线程的,只是后台执行指令的核心线程是单线程的,整个线程模型可以理解为还是以单线程为主,基于这种单线程为主的线程模型,不同客户端的... 目录1 Redis是单线程www.chinasem.cn还是多线程2 Redis如何保证指令原子性2.

GO语言中gox交叉编译的实现

《GO语言中gox交叉编译的实现》本文主要介绍了GO语言中gox交叉编译的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录一、安装二、使用三、遇到的问题1、开启CGO2、修改环境变量最近在工作中使用GO语言进行编码开发,因

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

Java JDK Validation 注解解析与使用方法验证

《JavaJDKValidation注解解析与使用方法验证》JakartaValidation提供了一种声明式、标准化的方式来验证Java对象,与框架无关,可以方便地集成到各种Java应用中,... 目录核心概念1. 主要注解基本约束注解其他常用注解2. 核心接口使用方法1. 基本使用添加依赖 (Maven

Linux五种IO模型的使用解读

《Linux五种IO模型的使用解读》文章系统解析了Linux的五种IO模型(阻塞、非阻塞、IO复用、信号驱动、异步),重点区分同步与异步IO的本质差异,强调同步由用户发起,异步由内核触发,通过对比各模... 目录1.IO模型简介2.五种IO模型2.1 IO模型分析方法2.2 阻塞IO2.3 非阻塞IO2.4

基于Go语言开发一个 IP 归属地查询接口工具

《基于Go语言开发一个IP归属地查询接口工具》在日常开发中,IP地址归属地查询是一个常见需求,本文将带大家使用Go语言快速开发一个IP归属地查询接口服务,有需要的小伙伴可以了解下... 目录功能目标技术栈项目结构核心代码(main.go)使用方法扩展功能总结在日常开发中,IP 地址归属地查询是一个常见需求:

使用python制作一款文件粉碎工具

《使用python制作一款文件粉碎工具》这篇文章主要为大家详细介绍了如何使用python制作一款文件粉碎工具,能够有效粉碎密码文件和机密Excel表格等,感兴趣的小伙伴可以了解一下... 文件粉碎工具:适用于粉碎密码文件和机密的escel表格等等,主要作用就是防止 别人用数据恢复大师把你刚删除的机密的文件恢

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模