基于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开发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. 内容优化分析模

MySQL慢查询工具的使用小结

《MySQL慢查询工具的使用小结》使用MySQL的慢查询工具可以帮助开发者识别和优化性能不佳的SQL查询,本文就来介绍一下MySQL的慢查询工具,具有一定的参考价值,感兴趣的可以了解一下... 目录一、启用慢查询日志1.1 编辑mysql配置文件1.2 重启MySQL服务二、配置动态参数(可选)三、分析慢查

基于Python实现进阶版PDF合并/拆分工具

《基于Python实现进阶版PDF合并/拆分工具》在数字化时代,PDF文件已成为日常工作和学习中不可或缺的一部分,本文将详细介绍一款简单易用的PDF工具,帮助用户轻松完成PDF文件的合并与拆分操作... 目录工具概述环境准备界面说明合并PDF文件拆分PDF文件高级技巧常见问题完整源代码总结在数字化时代,PD

Python按照24个实用大方向精选的上千种工具库汇总整理

《Python按照24个实用大方向精选的上千种工具库汇总整理》本文整理了Python生态中近千个库,涵盖数据处理、图像处理、网络开发、Web框架、人工智能、科学计算、GUI工具、测试框架、环境管理等多... 目录1、数据处理文本处理特殊文本处理html/XML 解析文件处理配置文件处理文档相关日志管理日期和

使用Python开发一个Ditto剪贴板数据导出工具

《使用Python开发一个Ditto剪贴板数据导出工具》在日常工作中,我们经常需要处理大量的剪贴板数据,下面将介绍如何使用Python的wxPython库开发一个图形化工具,实现从Ditto数据库中读... 目录前言运行结果项目需求分析技术选型核心功能实现1. Ditto数据库结构分析2. 数据库自动定位3