机器学习:训练集与测试集分割train_test_split

这篇具有很好参考价值的文章主要介绍了机器学习:训练集与测试集分割train_test_split。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 引言

在使用机器学习训练模型算法的过程中,为提高模型的泛化能力、防止过拟合等目的,需要将整体数据划分为训练集和测试集两部分,训练集用于模型训练,测试集用于模型的验证。此时,使用train_test_split函数可便捷高效的实现数据训练集与测试集的划分。

2 train_test_split介绍

train_test_split函数来自scikit-learn库(也称为sklearn),安装命令:

pip install sklearn

函数的导入:

from sklearn.model_selection import train_test_split

2.1 函数定义

def train_test_split(*arrays,test_size=None,train_size=None,random_state=None,
    shuffle=True,stratify=None,):

2.2 参数说明

  • *arrays: 单个数组或元组,表示需要划分的数据集。如果传入多个数组,则必须保证每个数组的第一维大小相同。
  • test_size: 测试集的大小(占总数据集的比例,值为0.0-1.0,表示测试集占总样本比例)。默认值为0.25,即将传入数据的25%作为测试集。
  • train_size: 训练集的大小(占总数据集的比例,值为0.0-1.0,表示训练集占总样本比例)。默认值为None,此时和test_size互补,即训练集的大小为(1-test_size)。
  • random_state: 随机数种子。可以设置一个整数,用于复现结果。默认为None。其实是该组随机数的编号,在需要重复试验的时候,保证得到一组一样的随机数。(比如每次都填1,其他参数一样的情况下你得到的随机数组是一样的。但填0或不填,每次都会不一样。)
  • shuffle: 是否随机打乱数据。默认为True。
  • stratify: 可选参数,用于进行分层抽样。传入标签数组,保证划分后的训练集和测试集中各类别样本比例与原始数据集相同。默认为None,即普通的随机划分。(此参数作用是保持测试集与整个数据集里的数据分类比例一致,比如有1000个数据,800个属于A类,200个属于B类。设置stratify = y_lable,test_size=0.25,split之后数据组成如下:training: 750个数据,其中600个属于A类,150个属于B类;testing: 250个数据,其中200个属于A类,50个属于B类)

2.3 返回值

该函数返回一个元组(X_train, X_test, y_train, y_test),其中X_train表示训练集的特征数据,X_test表示测试集的特征数据,y_train表示训练集的标签数据,y_test表示测试集的标签数据。

2.4 注意事项

  • test_sizetrain_size必须至少有一个设置为非None
  • 当传入多个数组时,请确保每个数组的第一维大小相同。
  • random_state要设置一个整数值,从而保证每次获取相同的训练集和测试集
  • 当使用分层抽样时,请确保传入的标签数组是正确的。

3 train_test_split使用

3.1 使用train_test_split分割Iris数据

from sklearn import datasets
from sklearn.model_selection import train_test_split

# 加载Iris数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=1)
train_dataset = TensorDataset(torch.from_numpy(X_train), torch.from_numpy(y_train))
test_dataset = TensorDataset(torch.from_numpy(X_test), torch.from_numpy(y_test ))

batch_size = 32
train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=True)

print(X_train)
print(X_test)

结果展示:

X_train=[[6.5 2.8 4.6 1.5]
 [6.7 2.5 5.8 1.8]
 [6.8 3.  5.5 2.1]
 [5.1 3.5 1.4 0.3]
 [6.  2.2 5.  1.5]
 ......此处数据省略
 [4.9 3.6 1.4 0.1]]
X_test=[[5.8 4.  1.2 0.2]
 [5.1 2.5 3.  1.1]
 [6.6 3.  4.4 1.4]
 [5.4 3.9 1.3 0.4]
 [7.9 3.8 6.4 2. ]
 ......此处数据省略
 [5.2 3.4 1.4 0.2]]

3.2 使用train_test_split分割水果识别数据

在/opt/dataset下存放着水果图片的分类数据文件夹(文件夹名称为标签),每个文件夹下存储着多张对应标签的水果图片,如下所示:

机器学习:训练集与测试集分割train_test_split,深度学习之pytorch,机器学习,人工智能,深度学习,sklearn

以apple文件夹为例,图片内容如下:

机器学习:训练集与测试集分割train_test_split,深度学习之pytorch,机器学习,人工智能,深度学习,sklearn

数据加载和分割数据集的代码如下:

from torchvision.datasets import ImageFolder
from sklearn.model_selection import train_test_split

# 图像变换
transform = transforms.Compose([transforms.Resize((224, 224)),
                                transforms.ToTensor(),
                                transforms.Normalize(
                                     mean=[0.5, 0.5, 0.5],
                                     std=[0.5, 0.5, 0.5]
                                ), ])
# 加载数据集
dataset = ImageFolder('/opt/dataset', transform=transform)

# 划分训练集与测试集
train_dataset, valid_dataset = train_test_split(dataset, test_size=0.2, random_state=10)

batch_size = 64
train_loader = DataLoader(dataset=train_dataset, batch_size=batch_size, shuffle=True, drop_last=True)
test_loader = DataLoader(dataset=valid_dataset, batch_size=batch_size, shuffle=True, drop_last=True)

4 sklearn介绍

train_test_split()是sklearn
.cross_validation模块中用来随机划分训练集和测试集。

sklearn,全称scikit-learn,是python中的机器学习库,建立在numpy、scipy、matplotlib等数据科学包的基础之上,涵盖了机器学习中的样例数据、数据预处理、模型验证、特征选择、分类、回归、聚类、降维等几乎所有环节,功能十分强大。与深度学习库存在pytorch、TensorFlow等多种框架可选不同,sklearn是python中传统机器学习的首选库,不存在其他竞争者。

sklearn为初学者提供了一些经典数据集,通过这些数据集可快速搭建机器学习任务、对比模型性能。数据集主要围绕分类和回归两类经典任务,对于不同需求,常用数据集简介如下:

  • load_breast_cancer:乳腺癌数据集,特征为连续数值变量,标签为0或1的二分类任务

  • load_iris:经典鸢尾花数据集,特征为连续数值变量,标签为0/1/2的三分类任务,且各类样本数量均衡,均为50个

  • load_wine:红酒数据集,与鸢尾花数据集特点类似,也是用于连续特征的3分类任务,不同之处在于各类样本数量轻微不均衡

  • load_digits:小型手写数字数据集(之所以称为小型,是因为还有大型的手写数字数据集mnist),包含0-9共10种标签,各类样本均衡,与前面3个数据集最大不同在于特征也是离散数值0—16之间,例如在进行多项式朴素贝叶斯模型、ID3树模型时,可用该数据集

  • load_boston:波士顿房价数据集,连续特征拟合房价,适用于回归任务

值得指出,sklearn除了load系列经典数据集外,还支持自定义数据集make系列和下载数据集fetch系列(load系列为安装sklearn库时自带,而fetch则需额外下载),这为更多的学习任务场景提供了便利。

sklearn中的各模型均有规范的数据输入输出格式,一般以np.array和pd.dataframe为标准格式,所以一些字符串的离散标签是不能直接用于模型训练的;同时为了加快模型训练速度和保证训练精度,往往还需对数据进行预处理,例如在以距离作为度量进行训练时则必须考虑去量纲化的问题。为此,sklearn提供了一些常用的数据预处理功能,常用的包括:

  • MinMaxScaler:归一化去量纲处理,适用于数据有明显的上下限,不会存在严重的异常值,例如考试得分0-100之间的数据可首选归一化处理

  • StandardScaler:标准化去量纲处理,适用于可能存在极大或极小的异常值,此时用MinMaxScaler时,可能因单个异常点而将其他数值变换的过于集中,而用标准正态分布去量纲则可有效避免这一问题

  • Binarizer:二值化处理,适用于将连续变量离散化

  • OneHotEncoder:独热编码,一种经典的编码方式,适用于离散标签间不存在明确的大小相对关系时。例如对于民族特征进行编码时,若将其编码为0-55的数值,则对于以距离作为度量的模型则意味着民族之间存在"大小"和"远近"关系,而用独热编码则将每个民族转换为一个由1个"1"和55个"0"组成的向量。弊端就是当分类标签过多时,容易带来维度灾难,而特征又过于稀疏

  • Ordinary:数值编码,适用于某些标签编码为数值后不影响模型理解和训练时。例如,当民族为待分类标签时,则可将其简单编码为0-55之间的数字文章来源地址https://www.toymoban.com/news/detail-629270.html

到了这里,关于机器学习:训练集与测试集分割train_test_split的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 机器学习02-再识K邻近算法(自定义数据集训练及测试)

    如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。简单的说就是根据你的“邻居”来推断出你的类别。 用个成语就是物以类聚 思想: 如果一个样本在特征空间中的K个最相邻的样本中的大多数属于某一

    2024年02月15日
    浏览(28)
  • 深度学习中用来训练的train.py 探究学习2.1( 数据预处理)

    下列为mmcls中数据预处理部分  train_pipeline是一个训练过程的配置列表,用于定义数据预处理的步骤。下面是train_pipeline中各个步骤的介绍: 1. LoadImageFromFile:从文件中加载图像。 2. RandomResizedCrop:随机缩放裁剪图像到指定大小。 3. RandomFlip:以一定的概率随机水平翻转图像。

    2024年02月04日
    浏览(40)
  • 机器学习01 -Hello World(对鸢尾花(Iris Flower)进行训练及测试)

    机器学习是一种人工智能(AI)的子领域,它探索和开发计算机系统,使其能够从数据中学习和改进,并在没有明确编程指令的情况下做出决策或完成任务。 传统的程序需要程序员明确编写指令来告诉计算机如何执行特定任务。但是,机器学习采用不同的方法。它允许计算机

    2024年02月15日
    浏览(33)
  • 论文代码学习—HiFi-GAN(4)——模型训练函数train文件具体解析

    这里翻译了HiFi-GAN这篇论文的具体内容,具体链接。 这篇文章还是学到了很多东西,从整体上说,学到了生成对抗网络的构建思路,包括生成器和鉴定器。细化到具体实现的细节,如何 实现对于特定周期的数据处理?在细化,膨胀卷积是如何实现的?这些通过文章,仅仅是了

    2024年02月14日
    浏览(28)
  • yolov8训练自己的数据集与转成onnx利用opencv进行调用

    文章目录 系列文章目录 前言 一、利用labeling进行数据的创建? 二、使用步骤 1.引入库 2.读入数据 总结 首先需要创建适合yolov8的数据模式,需要将xml文件转成txt文件。修改yolov8的配置文件实现模型的训练 提示:以下是本篇文章正文内容,下面案例可供参考 代码如下(示例)

    2024年02月06日
    浏览(37)
  • 机器学习从入门到放弃:硬train一发手写数字识别

    一、前言 前面我们了解了关于机器学习使用到的数学基础和内部原理,这一次就来动手使用 pytorch 来实现一个简单的神经网络工程,用来识别手写数字的项目。自己动手后会发现,框架里已经帮你实现了大部分的数学底层逻辑,例如数据集的预处理,梯度下降等等,所以只要

    2024年02月06日
    浏览(56)
  • Multi-View Learning(多视图学习/多视角学习 )是什么? Co-training(协同训练)和它的关系

    一句话解释什么是Multi-View Learning: 从多个视角进行学习,可以让模型从多方面更好的理解事物,从而提升模型的性能 多个视角的来源: (1) 多个源(multiple sources ):比如人物识别可以用脸、指纹等作为不同源的输入。 (2) 多个特征子集(different feature subsets;):比如图像表

    2024年02月05日
    浏览(72)
  • 基于Dlib库+SVM+Tensorflow+PyQT5智能面相分析-机器学习算法应用(含全部工程源码)+训练及测试数据集

    本项目利用了Dlib库的训练模型,以获取精确的面部特征。在人脸检测的过程中,它不仅能够准确地定位人脸,还能够确定出面部的68个关键点的准确坐标。借助这些关键点,我们可以提取丰富的面部特征。 通过将这些面部特征应用于基于支持向量机(SVM)的分类方法,我们可

    2024年02月13日
    浏览(34)
  • 【李宏毅机器学习·学习笔记】Tips for Training: Adaptive Learning Rate

    本节课主要介绍了Adaptive Learning Rate的基本思想和方法。通过使用Adaptive Learning Rate的策略,在训练深度神经网络时程序能实现在不同参数、不同iteration中,学习率不同。 本节课涉及到的 算法或策略 有:Adgrad、RMSProp、Adam、Learning Rate Decay、Warm Up。 本节课 参考的资料 有: MI

    2024年02月14日
    浏览(34)
  • 李宏毅机器学习作业11——Transfer Learning,Domain Adversarial Training

    Domain Adversarial Training见: ​李宏毅机器学习——领域适应Domain Adaptation_iwill323的博客-CSDN博客_领域适应 迁移学习参见2022CS231n PPT笔记 - 迁移学习_iwill323的博客-CSDN博客_cs231n ppt 目录 任务和数据集 任务 数据集 方法论:DaNN 导包 数据处理 显示图片 Canny Edge Detection transforms datas

    2024年02月09日
    浏览(101)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包