精华内容
下载资源
问答
  • 今天小编就为大家分享一篇python 划分数据集为训练集和测试集的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 主要介绍了用pandas划分数据集实现训练集和测试集,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 以下函数,使用于我最近的一个机器学习的项目,将数据集数据按照比例随机划分训练集数据和测试集数据: import csv import random def getDataSet(proportion): """ :exception 获取训练集和测试集(将数据按...
  • 鸢尾花数据集8:2划分训练集和测试集,并进行决策树分类算法练习Graphviz的安装训练集、测试集的划分输出训练模型可视化树状图训练模型的精度F1-Score测试集的精度F1-Score遇到的问题 针对鸢尾花数据集,按照80%训练...
  • knn算法实现的数字识别包括 训练集 测试集 以及代码
  • 今天小编就为大家分享一篇使用PyTorch将文件夹下的图片分为训练集和验证集实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 在做深度学习时,经常需要将数据集划分为3份,本代码可按照比例划分数据集,df为dataframe,ratio_train,ratio_test,ratio_val分别为训练集测试集和验证集的比例。直接调用函数即可 from sklearn.model_...

    在做深度学习时,经常需要将数据集划分为3份,本代码可按照比例划分数据集,df为dataframe,ratio_train,ratio_test,ratio_val分别为训练集、测试集和验证集的比例。直接调用函数即可

    from sklearn.model_selection import train_test_split

    def train_test_val_split(df,ratio_train,ratio_test,ratio_val):
        train, middle = train_test_split(df,test_size=1-ratio_train)
        ratio=ratio_val/(1-ratio_train)
        test,validation =train_test_split(middle,test_size=ratio)
        return train,test,validation

    演示例子:将数据集df按照训练集:测试集:验证集=0.6:0.2:0.2的比例划分
    train,test,val=train_test_val_split(df,0.6,0.2,0.2)

    展开全文
  • Sklearn 划分训练集和测试集

    千次阅读 2019-06-10 17:11:00
    样本 X 是 178 行 13 列的矩阵,标签 y 是一个 178 元素的向量,接下来准备划分训练集和测试集。 Sklearn 调包划分数据集 先来调用 Sklearn 数据集划分函数 train_test_split : test_size 是测试集比例,random_...
    
     

    640?wx_fmt=png

    【从零开始学机器学习第 03 篇】

    摘要:手写 Sklearn 的 train_test_split 函数。

    之前两篇文章以酒吧的红酒故事引出了 kNN 分类算法,根据已倒好的酒(样本),预测新倒的酒(预测)属于哪一类,文章见文末。

    预测方法我们使用了两种,一种是根据欧拉公式逐步手写,思路清晰直观。另外一种方法是模仿 Sklearn 中的 kNN 算法,把代码封装起来以调用库的形式使用,更加精简。

    然而这样做忽略了一个重要的问题,我们把全部的红酒样本都拿来生成 kNN 模型进行预测。而模型预测的准确率怎么样,并不清楚也无从验证。这在实际运用中有很大问题,比如说,根据股市数据做了一个模型,然后就直接参照这个模型就去投资股票了,结果模型预测趋势跟实际走势大相径庭,那就惨了。

    所以我们希望生成一个模型后,能有一个测试集先来测试一下模型,看看效果怎么样,然后进一步地调整并生成一个尽可能好的模型。

    这样的话,就需要把原始样本分成一大一小两份,比如 70% 和 30%,大的一份用来训练(train)生成模型,一份用来最后测试(test)模型。因为测试集本身有标签参照,跟模型预测的标签一对比就能知道模型效果如何。

    下面我们仍然以葡萄酒数据集为例,把数据集划分为训练集和测试集建立模型,最后测试模型效果。

    这份葡萄酒数据集来源于1988 年意大利的葡萄酒产地,属于 sklearn 自带的分类数据集,Sklearn 自带好几个常用的分类和回归数据集,之后会一一拿来做例子。

    这份数据集包含 178 个样本,13 个数值型特征:alcohol酒精浓度、color_intensity 颜色深度等(我们在第一课就使用了这两个特征)。
    标签(y值) 是葡萄酒的 3 种分类,用 [0,1,2] 表示。

    加载数据集

    640?wx_fmt=png

    样本 X 是 178 行 13 列的矩阵,标签 y 是一个 178 元素的向量,接下来准备划分训练集和测试集。

    Sklearn 调包划分数据集

    先来调用 Sklearn 数据集划分函数 train_test_split :

    640?wx_fmt=png

    test_size 是测试集比例,random_state 是一个随机种子,保证每次运行都能得到一样的随机结果

    Sklearn 只用两行代码就可以划分好数据集,虽然简单但是它背后是怎么划分的我们并不清楚,为此,下面来手写一下以更好理解。

    手写 train_test_split 函数

    观察到原始数据集的标签值是从 0 到 2 有序排列的,所以不能直接划分,要先把数据集打乱保证随机抽样。打乱可以用 numpy 的 permutation 函数,它会返回打乱后的数据集的索引,这个函数的妙处就在于根据索引就能同时匹配到 X 和 y。二者是一一对应的。

    数据集整体打乱后设置一个划分比例,比如 0.3,表示测试集和训练集的比例是 0.7:0.3,结合索引就分别能得到训练样本和标签的数量。

    640?wx_fmt=png
    mark

    因 Sklearn 中的 train_test_split 是向上取整,所以为了保持一致使用了向上取整的 ceil 函数,ceil (3.4) = 4;int 虽然也可以取整但它是向下取整的, int (3.4) = 3。

    在打乱数据之前,添加了一行 random.seed (321) 函数,它的作用是保证重新运行时能得到相同的随机数,若不加这句代码,每次得到的结果都会不一样,不便于相互比较。

    可以看到,手写函数比 Sklearn 调用的代码多很多,可不可以也像 Sklearn 那样只用几行代码完成数据集划分呢?可以的,只需要把上面的函数封装成一个库再调用即可。

    封装 train_test_split 函数

    封装很简单,只需要两步。

    首先,把代码写成一个函数存到一个 .py 程序:

     1import numpy as np 2from math import ceil 3 4def train_test_split(X, y, test_ratio=0.3, seed= None): 5    assert X.shape[0] == y.shape[0], 'X y 的行数要一样' 6    if seed: 7        np.random.seed(seed) 8    shuffle_index = np.random.permutation(len(X)) 9    test_size = ceil(len(X) * test_ratio)10    test_index = shuffle_index[:test_size]11    train_index = shuffle_index[test_size:]12    X_train = X[train_index]13    X_test = X[test_index]14    y_train = y[train_index]15    y_test = y[test_index]16    return X_train, X_test, y_train, y_testimport numpy as np
    2from math import ceil
    3
    4def train_test_split(X, y, test_ratio=0.3, seed= None):
    5    assert X.shape[0] == y.shape[0], 'X y 的行数要一样'
    6    if seed:
    7        np.random.seed(seed)
    8    shuffle_index = np.random.permutation(len(X))
    9    test_size = ceil(len(X) * test_ratio)
    10    test_index = shuffle_index[:test_size]
    11    train_index = shuffle_index[test_size:]
    12    X_train = X[train_index]
    13    X_test = X[test_index]
    14    y_train = y[train_index]
    15    y_test = y[test_index]
    16    return X_train, X_test, y_train, y_test

    这里添加了一个 assert 断言保证 X y 的行数一致。train_test_split 函数有四个参数:

    test_ratio 是测试集比例,设置了一个默认值 0.3,意思就是当在 jupyter notebook 中调用这个函数的时候如果不指定该参数,它会默认设置为 0.3,如果想换一个比例了,手动设置这个参数就可以了。

    seed = None 的意思是提供了一个随机种子选项,如果对随机结果没有要求,那么使用默认的 None 就可以,如果想固定一个随机结果,那么就需要设置该参数,比如前面我们设置了一个 321 ,任何一个数都可以,每个数的得出的随机结果不一样。

    接着,将程序命名为 model_selection.py文件(跟 Sklearn 保持一致)存储到 .ipynb 目录的文件夹中,然后调用该函数即可。

    640?wx_fmt=png

    可以看到和 Sklearn 一样,也只需要两行代码就可以调用我们自己写的封装函数了。如果你有练习过一些机器学习的案例,就知道这两行代码非常常见,但以前你可能只是机械地完成这个操作,不清楚它背后具体是怎么划分的,现在手写这个函数后,对这两行代码的含义就会有更清晰地认识。

    另外说一个小知识点。如何在 jupyter notebook 中调用 .py程序,比较好的选择是把程序做成一个包再调用。

    方法很简单,只需要程序同级目录下新建一个 __init__.py的空白程序就可以了。

    文件目录层级如下:

    1kNN/2    train_test_split.ipynb3    train_test/4        __init__.py5        model_selection.py
    2    train_test_split.ipynb
    3    train_test/
    4        __init__.py
    5        model_selection.py

    __init__.py文件的作用是将程序所在的文件夹变成一个 Python 模块,事实上我们调用的 Python 模块,包中都有这样一个文件。

    是不是不难理解?

    这样我们把模型划分好了,完成了准备工作,接下来传给 kNN 模型预测出结果 y_predict ,然后跟 y_test 对比,就可以计算出模型分类的准确率如何,即模型能准确预测出多要红酒分类正确。

    我们在下一篇文章中用两个实际数据集介绍如何计算 kNN 模型分类的准确率

    本文的 jupyter notebook 代码,可以在公众号后台回复「kNN3」得到,加油!

    系列文章:

    【从零开始学机器学习02】Sklearn 中的 kNN 封装算法

    【从零开始学机器学习01】手写机器学习最简单的 kNN 算法

    展开全文
  • 将自己的数据集划分为py-faster-rcnn所需的集(训练集、验证集、训练验证集、测试集),读取xml文件生成对应的txt文件。
  • 主要介绍了python中如何实现将数据分成训练集测试集的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 1.留出法(hold-out)直接将数据集D划分为两个互斥的集合,训练集S、测试集T,用S训练模型,用T来评估其测试误差。需要注意划分时尽可能保持数据分布的一致性,保持样本类别比例相似。可采用分层采样的方式。在使用...

    1.留出法(hold-out)

    直接将数据集D划分为两个互斥的集合,训练集S、测试集T,用S训练模型,用T来评估其测试误差。

    需要注意划分时尽可能保持数据分布的一致性,保持样本类别比例相似。可采用分层采样的方式。

    在使用留出法时,一般要采用若干次随机划分、重复进行实验评估后取平均值作为留出法的评估结果。通常情况下我们将2/3~4/5的样本划分出来用于训练。

    使用sklearn.model_selection中的train_test_split()来分割我们的数据集,其具体参数如下:

    X、y代表带划分数据集所有样本特征集合(自变量)和标签集合(因变量);

    test_size:测试集所占的比例,有以下几种输入类型:

      1.float型,0.0~1.0之间,此时传入的参数即作为测试集的比例;

      2.int型,此时传入的参数的绝对值即作为测试集样本的数量;

      3.None,这时需要另一个参数train_size有输入才生效,此时测试集取为train_size指定的比例或数量的补集;

      4.缺省时为0.25,但要注意只有在train_size和test_size都不输入值时缺省值才会生效;

    train_size:基本同test_size,但缺省值为None,其实test_size和train_size输入一个即可;

    random_state:int型,控制随机数种子,默认为None,即纯随机(伪随机);随机数种子其实就是该组随机数的编号,在需要重复试验的时候,保证得到一组一样的随机数。比如你每次都填1,其他参数一样的情况下你得到的随机数组是一样的。但填0或不填,每次都会不一样。
    随机数的产生取决于种子,随机数和种子之间的关系遵从以下两个规则:

    种子不同,产生不同的随机数;种子相同,即使实例不同也产生相同的随机数

    stratify:控制分类问题中的分层抽样,为了保持split前类的分布,默认为None,即不进行分层抽样,当传入为数组时,则依据该数组进行分层抽样(一般传入因变量所在列即y);

    shuffle:bool型,用来控制是否在分割数据前打乱原数据集的顺序,默认为True

    返回值:

    依次返回训练集自变量、测试集自变量、训练集因变量、测试集因变量,因此使用该函数赋值需在等号右边采取X_trainX_testy_trainy_test的形式;

    如下是随机抽样时的sklearn实现:

    from sklearn.model_selection import train_test_split
    
    X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3)

    如下是分层抽样时的sklearn实现:

    from sklearn.model_selection import train_test_split
    
    X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3,stratify=y)

    随机划分法还有以下几种函数可以实现:ShuffleSplit,GroupShuffleSplit,StratifiedShuffleSplit

    2.交叉验证法

    交叉验证法(cross validation先将数据集D划分为k个大小相似的互斥子集,即D=D1UD2U...UDk,DiDj=Φ(i≠j),每个子集Di都尽可能保持数据分布的一致性,即从D中通过分层采样得到。然后每次用k-1个子集的并集作为训练集,剩下的那一个子集作为验证集;从而可以进行k次训练与测试,最终返回的是这k个测试结果的均值。显然,交叉验证法的稳定性和保真性在很大程度上取决与k的取值,因此交叉验证法又称作“k折交叉验证”(k-fold cross validation),k最常见的取值为10,即“10折交叉验证”,其他常见的有5,20等;

    这个方法充分利用了所以样本,但计算比较繁琐,需要训练k次,测试k次

    交叉验证法的一个特例:留一法(Leave-one-out,即LOO),留一法不受随机样本划分方式的影响,因为m个样本只有唯一的方式划分m个子集——每个子集包含一个样本,其优缺点如下:

    1)优点:留一法使用的训练集与初始数据集相比只少了一个样本,这就使得在绝大多数情况下,留一法中被实际评估的模型与期望评估的用D训练出的模型很相似,因此,留一法的评估结果往往被认为比较准确,

    2)缺点:当数据集比较大时,训练m个模型的计算成本是难以想象的;

     

    我们使用sklearn.model_selection里的函数进行交叉验证

    K折交叉验证:KFold,GroupKFold,StratifiedKFold

    留一法:LeaveOneGroupOut,LeavePGroupsOut,LeaveOneOut,LeavePOut

     

    3.自助法(bootstrapping

    自助法则是使用有放回重复采样的方式进行数据采样,即我们每次从数据集D中取一个样本作为训练集中的元素,然后把该样本放回,重复该行为m次,这样我们就可以得到大小为m的训练集,在这里面有的样本重复出现,有的样本则没有出现过,我们把那些没有出现过的样本作为测试集。通过估计m次采样后每个样本大约有0.368的概率不被采样,因此我们可以认为在D中约有36.8%的数据没有在训练集中出现过。

    优点:这种方法对于那些数据集小、难以有效划分训练/测试集时很有用

    缺点:该方法改变了数据的初始分布导致会引入估计偏差。

    这个可以自己自定义函数编程实现。

    总结:

    1. 对于数据量充足的时候,通常采用留出法或者k折交叉验证法来进行训练/测试集的划分;
    2. 对于数据集小且难以有效划分训练/测试集时使用自助法
    3. 对于数据集小且可有效划分的时候最好使用留一法来进行划分,因为这种方法最为准确

     

    TimeSeriesSplit():

      在机器学习中还存在着一种叫做时间序列的数据类型,这种数据的特点是高度的自相关性,前后相邻时段的数据关联程度非常高,因此在对这种数据进行分割时不可以像其他机器学习任务那样简单随机抽样的方式采样,对时间序列数据的采样不能破坏其时段的连续型,在sklearn.model_selection中我们使用TimeSeriesSplit()来分割时序数据,其主要参数如下:

    n_splits:int型,控制产生(训练集+验证集)的数量;

    max_train_size:控制最大的时序数据长度;

     

    参考资料:https://www.cnblogs.com/feffery/p/8823405.html

                     https://www.cnblogs.com/nolonely/p/7007432.html



    展开全文
  • python 自动划分训练集和测试集

    千次阅读 2021-02-25 10:40:53
    自动划分训练集和测试集前言代码总结 前言 在进行深度学习的模型训练时,我们通常需要将数据进行划分,划分成训练集和测试集,若数据集太大,数据划分花费的时间太多!!! 不多说,上代码(python代码) 代码 # *_*...

    自动划分训练集和测试集

    前言

    在进行深度学习的模型训练时,我们通常需要将数据进行划分,划分成训练集和测试集,若数据集太大,数据划分花费的时间太多!!!
    不多说,上代码(python代码)

    代码

    # *_*coding: utf-8 *_*
    # Author --LiMing--
    
    import os
    import random
    import shutil
    import time
    
    def copyFile(fileDir,origion_path1,class_name):
        name = class_name
        path = origion_path1
        image_list = os.listdir(fileDir) # 获取图片的原始路径
        image_number = len(image_list)
        train_number = int(image_number * train_rate)
        train_sample = random.sample(image_list, train_number) # 从image_list中随机获取0.75比例的图像.
        test_sample = list(set(image_list) - set(train_sample))
        sample = [train_sample, test_sample]
        
        # 复制图像到目标文件夹
        for k in range(len(save_dir)):
                if os.path.isdir(save_dir[k]) and os.path.isdir(save_dir1[k]):
                    for name in sample[k]:
                        name1 = name.split(".")[0] + '.xml'
                        shutil.copy(os.path.join(fileDir, name), os.path.join(save_dir[k], name))
                        shutil.copy(os.path.join(path, name1), os.path.join(save_dir1[k], name1))
                else:
                    os.makedirs(save_dir[k])
                    os.makedirs(save_dir1[k])
                    for name in sample[k]:
                        name1 = name.split(".")[0] + '.xml'
                        shutil.copy(os.path.join(fileDir, name), os.path.join(save_dir[k], name))
                        shutil.copy(os.path.join(path, name1), os.path.join(save_dir1[k], name1))
    
    if __name__ == '__main__':
        time_start = time.time()
    
        # 原始数据集路径
        origion_path = './JPEGImages/'
        origion_path1 = './Annotations/'
    
        # 保存路径
        save_train_dir = './train/JPEGImages/'
        save_test_dir = './test/JPEGImages/'
        save_train_dir1 = './train/Annotations/'
        save_test_dir1 = './test/Annotations/'
        save_dir = [save_train_dir, save_test_dir]
        save_dir1 = [save_train_dir1, save_test_dir1]
    
        # 训练集比例
        train_rate = 0.75
    
        # 数据集类别及数量
        file_list = os.listdir(origion_path)
        num_classes = len(file_list)
        for i in range(num_classes):
            class_name = file_list[i]
        copyFile(origion_path,origion_path1,class_name)
        print('划分完毕!')
        time_end = time.time()
        print('---------------')
        print('训练集和测试集划分共耗时%s!' % (time_end - time_start))
    

    1.需要修改的地方
    1)origion_path:图片路径
    2)origion_path1:xml文件路径
    3)train_rate:训练集比例

    2.执行文件deal.py后生成
    train-img:训练集图片数据
    train-xml:训练集xml数据
    test-img:测试集图片数据
    test-xml:测试及xml数据

    3.train_rate可以根据实际情况进行调整,一般train:test是3:1

    注:每次划分数据都是随机的,每次执行时将之前划分好的数据保存或者重命名,不然会重复写入到4个文件夹中

    总结

    代码还是比较简洁的,有什么问题可以留言。

    展开全文
  • 102类花卉分类是深度学习的一个经典项目,但是数据难寻,在此提供已划分的数据集,并且附带了训练集测试集、验证集标签txt文件+完整pytorch代码
  • python划分训练集、验证集和测试集

    万次阅读 多人点赞 2020-05-16 21:27:15
    使用大量任务相关的数据训练模型; 通过模型在数据上的误差不断迭代训练模型,得到对数据拟合合理的模型; 将训练好调整好的模型应用到真实的场景中; 我们最终的目的是将训练好的模型部署到真实的环境...
  • 本文以flower分类数据为例,数据存储格式为:以类别名命名文件夹,将不同类别图像存储在里面 1.根据下载好的分类数据进行随机分割,读取,保存 linux系统下输入一下命令: wget ...
  • 留出法(hold-out)将数据集D划分为两个互斥的集合,其中一个集合作为训练集S,另一个作为测试集T,即 D = S ∪ T , S ∩ T = ∅ D=S \cup T, S \cap T=\emptyset D = S ∪ T , S ∩ T = ∅ 在S上训练出模型后,用T...
  • 划分80%的训练集,10%的验证集,10%的测试集 使用skleran的train_test_split进行划分,分两次进行。 import train_test_split from sklearn x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size =...
  • python划分训练集和测试集

    万次阅读 2018-03-16 15:36:12
    【第一种】方法def splitData(data,seed,m,k): #将数据分成训练集和测试集,每次指定seed,更换K,重复M次,防止过拟合. test=[] train=[] #random.seed(seed),指定seed的话,每次后面的随机数产生的都是一样的顺序...
  • 验证集可以在训练集中挑选重复,测试集一般不和训练集重复。 方法二 from sklearn.model_selection import train_test_split train_images, validation_images = train_test_split(all_images, train_size...
  • 划分训练集和测试集和验证集

    千次阅读 2018-01-08 19:14:32
    划分训练集和测试集和验证集:import os import codecs import random random.seed(1229) data = [] with codecs.open('neg.txt', "r", encoding='utf-8', errors='ignore') as fdata: now = fdata.readlines() ...
  • 代码https://github.com/apachecn/MachineLearning/blob/master/docs/5.Logistic回归.md 项目案例1: 使用 Logistic 回归在简单数据上的分类 项目案例2: 从疝气病症预测病马的死亡率
  • 最近做图像分类,数据的整理真的好费时间,找到一个代码,非常好使,推荐给大家。 实现的功能是,将一个文件夹下的每个子文件夹的一半数据分割出来并保存,生成相应的train.txt,test.txt。 对代码做了轻微的修改...
  • 训练集和测试集划分方法

    万次阅读 2019-03-07 21:07:57
    答案是对D进行适当的处理,从中产生出训练集S和测试集T,下面介绍几种常见的方法。(内容来自西瓜书) 1.流出法 留出法(hold-out)直接将数据集D划分为两个互斥的集合,其中一个集合作为训练集S,另一个作为测试...
  • Sklearn中的数据划分方法(划分训练集测试集) 1. K折交叉验证: 代码实现 KFold(n_splits=2) #KFold import numpy as np from sklearn.model_selection import KFold X=np.array([[1,2],[3,4],[5,6],[7,8],[9,10...
  • 原文链接:R Tip:数据集划分训练集和测试集?-数据人网​www.shujuren.org问题背景:我们构建数据模型的时候,需要把数据集划分训练集和测试集训练集用来训练模型,测试集用来测试模型的泛化能力。本文总结R...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 29,217
精华内容 11,686
关键字:

划分训练集和测试集代码