train_test_split,GridSearchCV,cross_val_score

train_test_split、cross_val_score与GridSearchCV的区别、联系与应用 今天在优化模型的时候碰到了一件头疼的事:train_test_split、cross_val_score与GridSearchCV貌似是三个非常相近的概念,它们都包含交叉验证的相关知识。在我查询的相关案例中三者也都有相应的出现,但比较杂乱,此处对此尽量做出一个我个人的理解和思考。 阅读详情

一:交叉验证
交叉验证示意图:将数据分为训练数据、验证数据和测试数据。
训练数据和验证数据用于做交叉验证和调节参数。测试数据用于求指标。

数据的使用

从第一步到第二步,再从第二步到第三步。都可以使用这个函数。
sklearn.model_selection.train_test_split(*arrays, **options)
train_data:所要划分的样本特征集
train_target:所要划分的样本结果
test_size:样本占比,如果是整数的话就是样本的数量
random_state:是随机数的种子。
随机数种子:其实就是该组随机数的编号,在需要重复试验的时候,保证得到一组一样的随机数。比如你每次都填1,其他参数一样的情况下你得到的随机数组是一样的。但填0或不填,每次都会不一样。
随机数的产生取决于种子,随机数和种子之间的关系遵从以下两个规则:
种子不同,产生不同的随机数;种子相同,即使实例不同也产生相同的随机数

事实上,这个函数只是用来分割数据的。并不是用来做交叉验证。交叉验证的目的是调参。这里有更直接的办法:
1,网格搜索,即GridSearchCV类。
2,cross_val_score类

我的这个代码首先将10.iris.data数据分成训练集和测试集。然后对训练集使用GridSearchCV进行4折交叉验证。得到较好的参数。数据长这个样子:
这里写图片描述

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
@author: XiangguoSun
@contact: sunxiangguodut@qq.com
@file: train_test_split and GridSearchCV.py
@time: 2017/3/2 8:59
@software: PyCharm
"""
import numpy as np
from sklearn import svm
from sklearn.model_selection import train_test_split
from sklearn.model_selection import GridSearchCV
'''
有些代码是这样写的:
from sklearn.cross_validation import train_test_split
in fact:
This module was deprecated in version 0.18 in favor of the
model_selection module into which all the refactored classes
and functions are moved. Also note that the interface of the
new CV iterators are different from that of this module.
This module will be removed in 0.20."
'''

if __name__ == '__main__':
    path = './10.iris.data'  # 数据文件路径
    str2num = {'Iris-setosa': 0, 'Iris-versicolor': 1, 'Iris-virginica': 2}
    data = np.loadtxt(path, dtype=float, delimiter=',', converters={4: lambda s:str2num[s] })
    '''
    Load data from a text file.
    Each row in the text file must have the same number of values.
    Parameters
    ----------
    fname : file or str
       File, filename, or generator to read.  If the filename extension is
       ``.gz`` or ``.bz2``, the file is first decompressed. Note that
       generators should return byte strings for Python 3k.
    dtype : data-type, optional
       Data-type of the resulting array; default: float.  If this is a
       structured data-type, the resulting array will be 1-dimensional, and
       each row will be interpreted as an element of the array.  In this
       case, the number of columns used must match the number of fields in
       the data-type.
    delimiter : str, optional
       The string used to separate values.  By default, this is any
       whitespace.
    converters : dict, optional
       A dictionary mapping column number to a function that will convert
       that column to a float.  E.g., if column 0 is a date string:
       ``converters = {0: datestr2num}``.  Converters can also be used to
       provide a default value for missing data (but see also `genfromtxt`):
       ``converters = {3: lambda s: float(s.strip() or 0)}``.  Default: None.
    skiprows : int, optional
       Skip the first `skiprows` lines; default: 0.
    Returns
    -------
    out : ndarray
       Data read from the text file.
    '''
    x, y = np.split(data, (4,), axis=1)
    '''
    我们的data是一个shape为(150,5)的ndarray。axis=1,是说以第二坐标轴来分割。
    indices_or_sections=(4,)的意思是分割为如下的几个子ndarray:[:4]和[4:]
    np.split(data, (4,), axis=1)这段代码相当于将我们的data分割为如下几块:
    data[:,0~3],data[:,4~end]
    需要注意的是indices_or_sections=4表示分割为大小相等的4部分。
    indices_or_sections=[2,3]表示a[:2],a[2:3],a[3:]
    也可以用()代替[],但是如果只有一个值,()要用“,”例如(4,)否则会被认为是4

    函数的返回是一系列的子数组。在这个例子中,我们分割出两个子数组,分别用x和y来表示
    '''
    x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=1, train_size=0.6)
    '''
    现在我们得到了60%的训练数据和40%的测试数据。对于交叉验证的原理而言,你可能还需要
    对这60%的训练数据再用若干次train_test_split得到训练数据和验证数据。但是我们接下来可以用网格搜索来
    简化这一过程。
    '''
    print np.shape(x_train),np.shape(y_train),np.shape(y_train[:,0])
    '''
    (90L, 2L),(90L, 1L),(90L,)
    '''
    grid= GridSearchCV(svm.SVC(),param_grid={"C":[0.1, 1, 10], "gamma": [1, 0.1, 0.01]},cv=4)
    grid.fit(x_train,y_train[:,0])#请注意这里y_train的格式
    print ("the best parameters are{0} with a score of {1}".format(grid.best_params_,grid.best_score_))

这里写图片描述

sklearn常用交叉验证方法总结 klearn交叉验证函数 ‘BaseCrossValidator’, ’GridSearchCV’, ‘TimeSeriesSplit’, ‘KFold’, ‘GroupKFold’, ‘GroupShuffleSplit’, ‘LeaveOneGroupOut’, ‘LeaveOneOut’, ‘LeavePGroupsOut’, ‘LeavePOut’, ‘ParameterGrid’, ‘P... 阅读详情

相关推荐

泰坦尼克号生存预测-----基于决策树模型(机器学习- sklearn)

"""主要是存储本人的笔记为主,但是希望和各位进行交流"" 简介:该代码主要会用 train_test_split 及 cross_val_score验证模型的有效度。 此外,还会用GridSearchCV找出模型最优的参数。 step 1:对数据进行处理,比如填补或者删除缺失值。此外, 决策树无法处理文字,所以,我们需要把性别(sex)及 船票号码(embark)转换数字。比如,0,1,2等无意义的数字。 import pandas as pd from sklearn.tree impo

weixin_51287450的博客 2383

python机器学习 train_test_split()函数用法解析及示例 划分训练集和测试集 以鸢尾数据为例 入门级讲解

文章目录train_test_split()用法获取数据划分训练集和测试集完整代码脚手架 train_test_split()用法 python机器学习中常用 train_test_split()函数划分训练集和测试集,其用法语法如下: X_train, X_test, y_train, y_test = train_test_split(train_data, train_target, test_size, random_state, shuffle) 变量 描述 X_train 划

侯小啾技术博客 11万+

GridSearchCV实战指南:从参数迷宫到工业级调优

网格搜索(GridSearchCV)是机器学习模型超参数优化的基础技术,其本质是通过系统性穷举与交叉验证,构建可复现的模型性能评估闭环。核心原理在于将经验驱动的调参过程转化为结构化决策:先识别偏差-方差失衡等真实问题,再基于参数敏感性进行维度降维,最后依托多折稳定性与业务指标对齐完成验证闭环。该技术广泛应用于回归预测、分类建模与风控系统等工业场景,尤其在scikit-learn生态中,结合StandardScaler、Pipeline和joblib序列化,可支撑从实验验证到生产部署的端到端流程。本文聚焦Gr

weixin_34037173的博客 567

train_test_split详解

train_test_split是python在机器学习中常常需要用到的一个方法安装方法:pip installsklearn导入方法:from sklearn.model_selection import train_test_splittrain_test_split是每个机器学习学习者必学的方法之一,这里给大家总结出了详细的用法。

weixin_42888180的博客 1万+

【机器学习】sk-learn的模型选择 (sklearn.model_selection) 可以做什么?

sklearn.model_selection 模块提供了丰富的工具来帮助开发者进行模型选择和评估。通过使用这些工具,可以有效地选择合适的模型和超参数,避免过拟合,并提高模型在新数据上的泛化能力。如果你有具体的模型选择或评估需求,可以根据上述功能选择合适的方法进行实施。

weixin_41359455的博客 1234

机器学习入门:从数据预处理到模型评估全流程解析

机器学习作为人工智能的核心技术,通过算法让计算机从数据中学习规律。其核心原理是通过训练数据构建预测模型,关键技术包括数据预处理、特征工程和模型调优。在实际工程中,数据清洗和标准化直接影响模型性能,而交叉验证和超参数调优则是提升泛化能力的关键手段。以经典的Iris数据集为例,完整的机器学习流程涵盖数据探索、缺失值处理、特征编码等预处理步骤,以及逻辑回归、决策树等基础模型的实现与评估。特别是在学术作业和工业实践中,正确处理数据泄露问题和选择合适的评估指标至关重要。掌握这些基础技能后,可以进一步应用于Kaggle

weixin_33827590的博客 332

关于train_test_split和cross_val_score交叉检验

train_test_split分组 train_test_split函数用于将矩阵随机划分为训练子集和测试子集,并返回划分好的训练集测试集样本和训练集测试集标签。 X_train,X_test, y_train, y_test =cross_validation.train_test_split(train_data,train_target,test_size=0.3, rando...

weixin_30535043的博客 736

10个被忽略的scikit-learn隐藏参数,提升模型鲁棒性与线上效果

scikit-learn作为Python机器学习基石,其API表面简洁,但底层蕴含大量面向真实场景的鲁棒性设计。理解StandardScaler的with_mean=False、KBinsDiscretizer的quantile分箱、RandomForest的oob_decision_function_等机制,本质是掌握数据分布敏感性、训练推理一致性与模型不确定性量化等核心原理。这些特性不改变算法本身,却能显著缓解长尾数据失真、时序泄露、OOB评估盲区等产线高频问题,在金融风控、电商推荐、工业预测等任务中直

图灵教育官方博客 530

Python划分训练集,测试集函数——train_test_split()详解

假设需要分割出测试集的同时知道对应原数据的索引。

hellozhxy的博客 1万+

K折交叉验证实战:sklearn中稳定评估模型泛化能力

K折交叉验证是机器学习中评估模型泛化能力的基础技术,其核心在于通过多次子集划分与训练测试,将模型在未知数据上的性能不确定性转化为可量化、可复现的统计分布。相比单次train_test_split,它有效缓解数据分割偏差、训练信息浪费和超参数选择污染三大风险,尤其适用于小样本、类别不平衡或生产环境稳定性要求高的场景。在scikit-learn中,StratifiedKFold保障分类任务的分层一致性,KFold适配回归任务,而Pipeline封装与cross_val_score协同可杜绝特征泄露。本文聚焦工程

dianqi0560的博客 549

从零理解Brep:用Python玩转3D建模的边界表示法(附OpenCASCADE示例)

本文深入解析了边界表示法(Brep)在3D建模中的应用,通过Python和OpenCASCADE的实战示例,详细介绍了Brep的核心数据结构、布尔运算、网格转换及3D打印优化技巧。适合CAD设计、3D打印和计算机图形学领域的开发者学习与实践。

n4o5p6q7r的博客 427

sklearn.model_selection.train_test_split划分训练集和测试集

sklearn是python的一个模块,用于机器学习方面。train_test_split是划分数据集的一个函数。1、函数原型1.1 参数:def train_test_split(*arrays, **options): """ Parameters ---------- *arrays : sequence of indexables with same lengt

I am what i am 3万+

Ascend C 算子开发遇到的问题及解决方法

在学习Ascend C算子开发进阶课程的时候,进行Ascend C自定义算子工程、算子调用等实验,在开发环境中遇到了一些问题,在这里记录一下。首先如果在启智社区CANN版本为6.3 ,要进行Ascend C算子开发,需要更新CANN版本。

qq_45257495的博客 5109

sklearn学习——model_selection

0. 写在前面 本博客累积一些关于sklearn中model_selection中常用的函数. 1. 形成测试集和训练集 from sklearn.model_selection import train_test_split Xtrain,Xtest,Ytrain,Ytest = train_test_split(wine.data,wine.target,test_size=0.3,shuffle=True) 2. 交叉验证 from sklearn.model_selection import c

weixin_44441131的博客 3374

PHP实战:5分钟搞定SM4国密加密算法集成(附完整代码)

本文提供了一份可直接用于生产环境的PHP SM4国密加密算法集成实战指南。文章详细解析了SM4算法核心,对比了ECB与CBC工作模式,并给出了包含完整代码、密钥管理、数据填充及性能优化的解决方案,帮助开发者快速、安全地在PHP项目中集成国密加密算法。

2a4s6d8f0g的博客 342

如何在iPhone上本地运行SmolVLM?5亿参数模型实战指南(附Swift代码)

本文详细介绍了如何在iPhone上本地部署和运行轻量高效的SmolVLM多模态模型。通过实战指南,分享了使用Swift和MLX框架进行环境配置、模型加载、内存优化以及实现实时图像分析与文本生成的完整流程,帮助开发者在移动端高效运行AI视觉语言模型。

echo99的专栏 654

随机森林对缺失值进行补充

import pandas as pdfrom sklearn.tree import DecisionTreeClassifierfrom sklearn.model_selection import train_test_splitfrom sklearn.model_selection import GridSearchCVfrom sklearn.model_selection import cross_val_scoreimport matplotlib.pyplot as plt

2301_78427373的博客 205

视频生成工具本地部署完全指南:Seedance能装吗?有哪些开源替代?

本文系统介绍了视频生成模型的本地部署方案,分为三个部分:1)Seedance 2.0的混合部署模式,其开源组件可本地集成但核心功能需调用API;2)完全开源替代方案对比,包括LTX-2、Wan 2.1等模型的硬件需求与特点;3)详细部署指南,以ComfyUI+Wan 2.1为例,涵盖软件准备、模型整合、参数调优等步骤,并提供了显存优化和多GPU配置技巧。文章为需要离线视频生成能力的用户提供了完整技术路径。

小明的博客 1万+

【sklearn】RF 交叉验证 袋外数据 参数学习曲线 网格搜索

RF 交叉验证 RF袋外数据 参数学习曲线 网格搜索

烦成航的博客 1106

Autosar NvM配置-手动配置Nvblock及使用-基于ETAS软件

NVM作为存储协议栈中最顶层的模块,是必须要掌握的。目前项目基本使用MCU带的Dflash模块,使用Fee模拟eeprom。在项目前期阶段,应该充分讨论需要存储的内容,包括应用数据,诊断数据等,用以评估Dflash空间是否够用。本文基于ETAS软件介绍NVBlock配置生成NVM参数及使用。使用NVBlock配置生成,基本不用手写代码,还是比较方便的。对于Nv block的划分,建议将同时写的一类数据放到一个block中,因为block除了data以外,Fee还会增加一些header数据,占用不少内存。

赞的博客 1884

神经进化实践:用遗传算法替代反向传播优化神经网络

神经进化用来定义应用于深度学习的特定优化模式。在本节中,我们通过遗传算法优化简单深度学习网络的权重/参数,替换在误差反向传播训练过程中的所用优化器。

盼小辉丶的博客 3624

机器学习工程篇

1、数据集划分 2、数据标准化 3、特征提取 4、参数优化 5、学习器流水线和字典学习 6、性能度量

qq_44290699的博客 290

手把手教你学simulink(28.2)--四旋翼无人机景示例:基于自抗扰控制(ADRC)的无人机姿态稳定系统

通过上述代码实现,您可以逐步创建和搭建一个基于自抗扰控制的无人机姿态稳定系统。该系统能够实时估计和补偿外部扰动及模型不确定性,确保无人机姿态稳定。自抗扰控制具有较强的鲁棒性和适应性,能够在存在不确定性和扰动的情况下提供快速且精确的控制性能。Simulink提供了强大的建模和仿真工具,使得控制系统工程师能够快速构建复杂的控制算法,并将其应用于实际工程中。无人机动力学建模:建立无人机的六自由度(6-DOF)动力学模型,包括位置、速度、姿态角和角速度。自抗扰控制器设计。

MHD0815的博客 501

别再乱用train_test_split了!用sklearn的KFold和StratifiedKFold让你的模型评估更靠谱

本文深入探讨了sklearn中KFold和StratifiedKFold交叉验证技术的优势,相比传统的train_test_split方法,它们能提供更可靠的模型评估结果。通过实际代码示例展示了如何实现这两种方法,并详细讲解了如何与GridSearchCV结合进行超参数调优,帮助数据科学家避免常见评估陷阱,提升模型性能评估的准确性。

weixin_34260100的博客 479

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

别再只会用train_test_split了:用Python的sklearn玩转K折交叉验证(附完整代码)

本文深入探讨了Python中K折交叉验证的进阶技巧,帮助开发者超越基础的train_test_split方法。通过详细的代码示例和实战分析,介绍了分层K折、时间序列处理等高级应用,提升模型评估的稳定性和准确性。特别适合数据科学家和机器学习工程师优化模型性能。

weixin_30764883的博客 301

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

机器学习超参数调优与交叉验证实战指南

超参数调优是机器学习模型优化的核心环节,直接影响模型性能。交叉验证作为评估模型泛化能力的关键技术,通过将训练数据划分为多个互斥子集进行轮换训练验证,有效解决了数据隔离和有限数据利用的问题。在工业实践中,结合网格搜索(GridSearchCV)等自动化工具,可以系统性地探索参数空间,找到最优模型配置。本文以kNN算法和鸢尾花数据集为例,详解了从手动调参到工业级最佳实践的完整流程,特别强调了交叉验证在防止数据泄露、提高模型鲁棒性方面的重要价值。针对实际项目中的常见陷阱,如数据泄露、分层抽样忽视等问题,给出了具体

weixin_34150830的博客 326

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

上一篇: 深入浅出EM算法
下一篇: 感知机实现Python
相国大人
博客等级 码龄10年 1009粉丝 132原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值