分割训练集测试集验证集的两种方式(代码片段)

bitcarmanlee bitcarmanlee     2023-01-09     579

关键词:

训练模型过程中,不可避免要对数据集进行切分,将数据集按比例分成训练集,测试集,验证集。作为一种常见的需求,稍微总结了一下两种实现方式。

1.train_test_split

平时最常见的切分数据集的方法是sklearn中的train_test_split方法,该方法可以很方便将数据集分成训练集与测试集。

import random
import pandas as pd
from sklearn.model_selection import train_test_split


def gen_data():
    x1 = [random.random() for _ in range(100)]
    x2 = [random.randint(0, 9) for _ in range(100)]
    y = [random.randint(0, 1) for _ in range(100)]
    data = pd.DataFrame('f1': x1, 'f2': x2, 'label': y)

    X_train, X_test, y_train, y_test = train_test_split(data[['f1', 'f2']], data.label, test_size=0.2)
    print(X_train)
    print()
    print(X_test)
    print()
    print(y_train)
    print()
    print(y_test)

上面的代码运行以后,结果为

          f1  f2
58  0.167506   4
75  0.687526   8
26  0.973927   9
5   0.959837   9
28  0.713963   0
..       ...  ..
42  0.513807   2
16  0.398464   6
90  0.809922   4
3   0.957735   2
47  0.822975   3

[80 rows x 2 columns]

          f1  f2
59  0.148613   7
40  0.981047   8
6   0.609841   3
7   0.364588   5
24  0.907005   8
92  0.530647   8
99  0.675087   0
37  0.131263   7
63  0.187509   2
39  0.657692   1
56  0.932423   0
23  0.800484   8
54  0.428490   5
25  0.853351   6
17  0.525853   7
64  0.045794   4
4   0.642669   7
50  0.149979   4
87  0.969403   6
77  0.096266   9

58    0
75    1
26    0
5     1
28    0
     ..
42    1
16    1
90    1
3     0
47    1
Name: label, Length: 80, dtype: int64

59    0
40    1
6     0
7     1
24    1
92    0
99    0
37    0
63    0
39    0
56    1
23    0
54    0
25    0
17    0
64    1
4     0
50    0
87    0
77    1
Name: label, dtype: int64

2.自己切分实现

train_test_split确实很方便,也很实用。但是该方法有一个问题,只能切分成train,test两个数据集。很多时候我们还需要一个验证集,这个时候train_test_split方法就无能为力了。因此我们自己简单实现一个切分的方法。

import random
import pandas as pd

def gen_train_test_val():
    x1 = [random.random() for _ in range(100)]
    x2 = [random.randint(0, 9) for _ in range(100)]
    y = [random.randint(0, 1) for _ in range(100)]
    data = pd.DataFrame('f1': x1, 'f2': x2, 'label': y)

    train_size = int(len(data) * 0.7)
    test_size = int(len(data) * 0.2)
    idx = list(data.index)
    random.shuffle(idx)

    df_train = data.loc[idx[:train_size]]
    df_test = data.loc[idx[train_size:train_size+test_size]]
    df_valid = data.loc[idx[train_size+test_size:]]

    print(df_train)
    print()
    print(df_test)
    print()
    print(df_valid)
    print()


gen_train_test_val()

上面实现方式的核心思路是,利用dataframe默认的index,做shuffle。shuffle完毕以后,根据设定的train_size,test_size来选取数据集。比如在上面的实现中,我们就是设定训练集70%,测试集20%,验证集为剩余的10%。

最后代码输出为

          f1  f2  label
64  0.397632   5      1
99  0.938272   3      1
26  0.832233   5      1
48  0.259652   6      0
57  0.083901   8      1
..       ...  ..    ...
9   0.629019   1      0
81  0.261926   4      0
54  0.691443   5      1
86  0.617717   7      1
45  0.357114   5      0

[70 rows x 3 columns]

          f1  f2  label
52  0.693583   2      1
12  0.431800   9      0
5   0.865485   5      0
96  0.273552   8      1
58  0.739783   7      1
87  0.245566   4      1
65  0.468828   3      1
94  0.782948   7      0
69  0.393221   1      0
17  0.388766   6      1
23  0.829479   9      1
8   0.052652   7      0
93  0.458537   3      1
55  0.174687   4      1
83  0.857251   3      0
14  0.547664   7      1
13  0.037768   4      0
41  0.626701   4      0
50  0.289869   5      0
75  0.889851   3      1

          f1  f2  label
51  0.834317   3      0
70  0.885837   4      0
74  0.343928   1      0
44  0.707159   1      1
85  0.108250   3      0
88  0.045994   7      0
53  0.472742   9      0
24  0.498392   9      0
82  0.856740   1      1
16  0.608382   7      1

训练、验证和测试集的最佳分割

】训练、验证和测试集的最佳分割【英文标题】:Optimalsplitfortraining,validationandtestingsets【发布时间】:2021-09-0707:25:10【问题描述】:我最初认为分割训练、验证和测试数据的一个好的经验法则是60-20-20。但是,最佳答案here似乎建... 查看详情

猫狗数据集读取数据集的第二种方式(代码片段)

...ml读取数据集:https://www.cnblogs.com/xiximayou/p/12422827.html进行训练:https://www.cnblogs.com/xiximayou/p/12448300.html保存模型并继续进行训练:https://www.cnblogs.com/xiximayou/p/12452624.html加载保存的模型并测试:https://www.cnblogs.com/xiximayou/p/12459499.html... 查看详情

train_test_split分割测试集训练集(代码片段)

#导入模块包fromsklearn.model_selectionimporttrain_test_split#分割数据,test_size默认是0.75x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.7,random_state=1)test_size设置测试集的比例;random_state固定随机种子,便于多次测试时使用。 查看详情

如何使用交叉验证来确定使用训练、验证和测试集的最终模型

】如何使用交叉验证来确定使用训练、验证和测试集的最终模型【英文标题】:HowtouseCrossValidationtoDetermineaFinalModelusingTraining,Validation,&TestSets【发布时间】:2020-11-1816:07:43【问题描述】:我无法理解模型选择阶段和最终模型测... 查看详情

训练集验证集和测试集的意义(转)

...73/article/details/78266558在有监督的机器学习中,经常会说到训练集(train)、验证集(validation)和测试集(test),这三个集合的区分可能会让人糊涂,特别是,有些读者搞不清楚验证集和测试集有什么区别。I.划分如果我们自己已... 查看详情

为啥要划分训练集、验证集和测试集

...术A一般来说机器学习的数据集都会被划分成三个个子集训练集,验证集和测试集。我们拿到的数据集通常都是由人工或者半自动化的方式收集来的,每个输入数据都有对应的输出,机器学习要做的是学习这些已经收集好的数据... 查看详情

深度学习原理与框架-神经网络-cifar10分类(代码)(代码片段)

...第三部分:将数据与模型输入到函数中,用于进行模型的训练,同时进行验证集的预测,来判断验证集的预测结果,保留最好的验证集结果的参数组合 第一部分:数据的准备第一步:构造列表,使用withopen()asf:pickle.load进行... 查看详情

训练集验证集测试集

转自:https://www.cnblogs.com/HuZihu/p/10538295.html对于训练集,验证集,测试集的概念,很多人都搞不清楚。网上的文章也是鱼龙混杂,因此,现在来把这方面的知识梳理一遍。让我们先来看一下模型验证(评估)的几种方式。 在... 查看详情

机器学习基础06day(代码片段)

...建立的模型进行预测。训练集与测试集训练集与测试集的分割可以使用cross_validation中的train_test_split方法,大部分的交叉验证迭代器都内建一个划分数据前进行数据索引打散的选项,train_test_split方法内部使用的就是交叉验证迭代... 查看详情

训练集,验证集,测试集的作用

参考技术A训练数据(baitraindataset)指的是,你拿来du建模zhi型的数据,拟合数据用验证数据dao(validdataset)指的是,你拿来挑模型的数据,因为训练数据可以训练很多个模型,譬如,训练步长、是否正则化等等,,你用验证数据(来... 查看详情

如何在不使用和拆分测试集的情况下将我的数据集拆分为训练和验证?

...如何在不使用和拆分测试集的情况下将我的数据集拆分为训练和验证?【英文标题】:Howcanisplitmydatasetintotrainingandvalidationwithnousingandsplitingtestset?【发布时间】:2020-09-2716:09:01【问题描述】:我知道这对于训练和验证集拆分是错... 查看详情

0-4统计建模划分训练/验证/测试集的几种方法

参考技术A1.最简单的随机拆分,一般拆为80%训练集20%测试集或70%训练集30%测试集。使用训练集训练,然后使用测试集测试模型效果。2.k折交叉验证:把整个数据集设法均分成k折(一般为随机拆分)。然后使用其中的k-1折进行训... 查看详情

字符识别--模型的训练与验证(代码片段)

一个成熟合格的深度学习训练过程至少具备以下功能:在训练集上训练,并在验证集上进行验证模型可以保存最优的权重,并读取权重记录训练集和验证集的精度,便于调参本节将构建验证集、模型训练和验证、模型保存与加载... 查看详情

评估机器学习模型的几种方法(验证集的重要性)(代码片段)

...器学习模型。评估模型的重点是将数据划分为三个集合:训练集、验证集和测试集。在训练数据上训练模型,在验证数据上评估模型。 查看详情

在机器学习中过度拟合术语(代码片段)

...们陈述以下内容“事实证明,测试数据集的准确性略低于训练数据集的准确度。训练精度和测试精度之间的差距是过度拟合的一个例子。过度拟合是指机器学习模型在新数据上的表现比在训练数据上表现更差。“我认为从TensorFlo... 查看详情

数据集的划分

参考技术A按一定比例划分为训练集和测试集这种方法也称为保留法。我们通常取8-2、7-3、6-4、5-5比例切分,直接将数据随机划分为训练集和测试集,然后使用训练集来生成模型,再用测试集来测试模型的正确率和误差,以验证... 查看详情

商品检测数据集训练应用api完成商品数据集的训练(代码片段)

...image_generator:获取图片数据标注数据生成器标注数据分割fromutils.detectio 查看详情

将训练集和测试集的数据除以训练集中的所有主题

】将训练集和测试集的数据除以训练集中的所有主题【英文标题】:Dividedatafortrainingandtestsetwithallsubjectinthetrainingset【发布时间】:2019-01-1404:31:14【问题描述】:我是机器学习的新手,我正在尝试处理SVM。我有一个包含近3000个数... 查看详情