基于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 Tree命令工具

《基于Python实现一个WindowsTree命令工具》今天想要在Windows平台的CMD命令终端窗口中使用像Linux下的tree命令,打印一下目录结构层级树,然而还真有tree命令,但是发现... 目录引言实现代码使用说明可用选项示例用法功能特点添加到环境变量方法一:创建批处理文件并添加到PATH1

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件

CnPlugin是PL/SQL Developer工具插件使用教程

《CnPlugin是PL/SQLDeveloper工具插件使用教程》:本文主要介绍CnPlugin是PL/SQLDeveloper工具插件使用教程,具有很好的参考价值,希望对大家有所帮助,如有错... 目录PL/SQL Developer工具插件使用安装拷贝文件配置总结PL/SQL Developer工具插

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

Python使用FFmpeg实现高效音频格式转换工具

《Python使用FFmpeg实现高效音频格式转换工具》在数字音频处理领域,音频格式转换是一项基础但至关重要的功能,本文主要为大家介绍了Python如何使用FFmpeg实现强大功能的图形化音频转换工具... 目录概述功能详解软件效果展示主界面布局转换过程截图完成提示开发步骤详解1. 环境准备2. 项目功能结

Linux系统之stress-ng测压工具的使用

《Linux系统之stress-ng测压工具的使用》:本文主要介绍Linux系统之stress-ng测压工具的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、理论1.stress工具简介与安装2.语法及参数3.具体安装二、实验1.运行8 cpu, 4 fo

Maven项目中集成数据库文档生成工具的操作步骤

《Maven项目中集成数据库文档生成工具的操作步骤》在Maven项目中,可以通过集成数据库文档生成工具来自动生成数据库文档,本文为大家整理了使用screw-maven-plugin(推荐)的完... 目录1. 添加插件配置到 pom.XML2. 配置数据库信息3. 执行生成命令4. 高级配置选项5. 注意事

SpringBoot整合Sa-Token实现RBAC权限模型的过程解析

《SpringBoot整合Sa-Token实现RBAC权限模型的过程解析》:本文主要介绍SpringBoot整合Sa-Token实现RBAC权限模型的过程解析,本文给大家介绍的非常详细,对大家的学... 目录前言一、基础概念1.1 RBAC模型核心概念1.2 Sa-Token核心功能1.3 环境准备二、表结

Python使用pynput模拟实现键盘自动输入工具

《Python使用pynput模拟实现键盘自动输入工具》在日常办公和软件开发中,我们经常需要处理大量重复的文本输入工作,所以本文就来和大家介绍一款使用Python的PyQt5库结合pynput键盘控制... 目录概述:当自动化遇上可视化功能全景图核心功能矩阵技术栈深度效果展示使用教程四步操作指南核心代码解析