机器学习数据顺序随机打乱:Python实现

  本文介绍基于Python语言,实现机器学习、深度学习等模型训练时,数据集打乱的具体操作。

1 为什么要打乱数据集

  在机器学习中,如果不进行数据集的打乱,则可能导致模型在训练过程中出现具有“偏见”的情况,降低其泛化能力,从而降低训练精度。例如,如果我们做深度学习的分类,其中初始数据的前80%都是第一类,后20%都是第二类,那么如果我们不打乱数据,模型按照数据顺序依次加以训练,则在前面大部分数据中训练出来的结果都是第一类(即形成了惯性,模型认为这些数据只对应着第一类);而到后20%数据进行训练时,所得结果也往往全都为第一类;所以要打乱。

2 如何打乱

  首先引入random

import random

2.1 数据特征与标签均为一维

DataIndex=[i for i in range(len(TrainX))]
random.shuffle(DataIndex)
TrainX=TrainX[DataIndex]
TrainY=TrainY[DataIndex]

  其中,TrainX为一维的训练数据特征,TrainY为一维的训练数据标签。

2.2 数据特征为多维而标签为一维

Datasets=tf.data.Dataset.from_tensor_slices((dict(TrainX),TrainY))
Datasets=Datasets.shuffle(1000)

  其中,TrainX需要为多维DataFrame格式的训练数据特征,TrainY为一维Series格式的训练数据标签。但是经过这种方法,我们得到的DatasetsDataset类的数据,若是接下来需要带入input_fn还可以,如果想单独取出TrainXTrainY的话就比较麻烦。

  因此,我们还可以直接在初始数据划分训练集与测试集时直接将数据打乱:

TrainData=MyData.sample(frac=TrainFrac,random_state=RandomSeed)
TestData=MyData.drop(TrainData.index)

  其中,MyData为初始全部数据,TrainDataTestData分别为划分后的训练集与测试集数据。

  经过.sample()这一步骤,与原始数据的Index相比,实际上已经实现了TrainDataTestData的随机排列。

  至此,大功告成。

本文转载于网络 如有侵权请联系删除

相关文章

  • VBS 代码合集(慎用,好玩)

    大家好,又见面了,我是你们的朋友全栈君。玩玩就好啦 记得关注哦 一、你打开好友的聊天对话框,然后记下在你QQ里好友的昵称,把下面代码里的xx替换一下,就可以自定义发送QQ信息到好友的次数(代码里的数字10改一下即可). xx.vbs=> =————————————————————————— OnErrorResumeNext Dimwsh,ye setwsh=createobject(“wscript.shell”) fori=1to10 wscript.sleep700 wsh.AppActivate(“与xx聊天中”) wsh.sendKeys“^v” wsh.sendKeysi wsh.sendKeys“%s” next wscript.quit三、打开无数个计算器,直到死机setwsh=createobject(“wscript.shell”) do wsh.run“calc” loop四、直接关机dimWSHshell setWSHshell=wscript.createobject(“wscript.shell”) WSHshell.run“shutdown-f-s-

  • 哈夫曼实现文件压缩解压缩(c语言)

    大家好,又见面了,我是你们的朋友全栈君。写一个对文件进行压缩和解压缩的程序,功能如下:①可以对纯英文文档实现压缩和解压;②较好的界面程序运行的说明。介绍哈夫曼:效率最高的判别树即为哈夫曼树在计算机数据处理中,霍夫曼编码使用变长编码表对源符号(如文件中的一个字母)进行编码,其中变长编码表是通过一种评估来源符号出现机率的方法得到的,出现机率高的字母使用较短的编码,反之出现机率低的则使用较长的编码,这便使编码之后的字符串的平均长度、期望值降低,从而达到无损压缩数据的目的。例如,在英文中,e的出现机率最高,而z的出现概率则最低。当利用霍夫曼编码对一篇英文进行压缩时,e极有可能用一个比特来表示,而z则可能花去25个比特(不是26)。用普通的表示方法时,每个英文字母均占用一个字节,即8个比特。二者相比,e使用了一般编码的1/8的长度,z则使用了3倍多。倘若我们能实现对于英文中各个字母出现概率的较准确的估算,就可以大幅度提高无损压缩的比例。霍夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的

  • JVM

    JDK/JRE/JVM的关系JDK开发工具包(javadevelopmentkit)支持开发和运行Java程序。JDK包含JRE以及各种Java开发工具(如编译器javac、调试器jdb等)。JRE运行环境(javaruntimeenvironment)能够运行已编译的Java程序。JRE包含JVM以及运行时所需调用的基础类库(如java.lang包、java.util包等)。JVM虚拟机(javavirtualmachine)运行Java程序的工作环境。Java程序在虚拟机上运行而不是直接在操作系统上运行,从软件层面屏蔽了底层硬件指令的细节。虚拟机会根据操作系统自动将字节码文件转化成相应的机器码,使Java字节码文件能够在多种平台上不加修改地运行。HotSpot虚拟机是SunJDK和OpenJDK中所带的虚拟机,也是目前使用范围最广的Java虚拟机。Java运行原理基本概念解释和编译解释:源文件经过编译器编译成为脚本文件,由解释器逐行解释并执行。灵活性更好。编译:源文件经过编译器编译成为可执行文件,由计算机直接去执行。性能更好。静态编译和动态编译静态编译:编译时确定类型,绑定对象。性

  • pandas读取csv文件提示不存在的解决方法及原因分析

    一般情况是数据文件没有在当前路径,那么它是无法读取数据的。另外,如果路径名包含中文它也是无法读取的。(1)可以选择:importos os.getcwd() 获得当前的工作路径,把你的数据文件放在此路径上就可以了,就可以直接使用pd.read_csv(“./_.csv”)(2)可以选择:使用os.chdir(path),path是你的那个数据文件路径(3)可以选择:不更改路径,直接调用df=pd.read_csv(U”文件存储的盘(如C盘):/文件夹/文件名。csv”),比如在C盘的Python文件夹的stockdata下:da=pd.read_csv(U”C:/Python2.7/stockdata/sh600.csv”)如果是在ubuntu系统下可以:data=pd.read_csv(U”/home/lilai/Tinic/train”) 补充知识:jupyter解决pandas因含中文字体无法读取csv文件问题train=pd.read_csv(“train.csv”) 报错UnicodeDecodeError:‘utf-8’codeccan’tdecodebyte0xc8inp

  • Python基础之str常用方法、for循环

    初学python,有些地方可能还不够明白,希望各位看官发现我的错误后留言指正!一.字符串的索引与切片  注:字符串的第一位的索引值是0  1.索引案例1s='abcd' 2s1=s[0] 3print(s1)#输出a复制  2.切片案例,注:顾头不顾尾,即指定的最后一个索引的字符取不到1s='abcd' 2s2=s[0:3] 3print(s2) 4#输出abc,不包括下标是3的d 复制  3.若字符串非常长,而且要取后面的字符串,可以从最后一位(下标是-1)开始取1s='abcd' 2s3=s[-1] 3print(s3)#输出d复制  4.取整个字符串1s='abcd' 2s4=s[0:] 3s5=s[:] 4print(s4,s5)#都会输出整个字符串 5 6print(s[0:0])#输出一个空字符串,不会报错复制  5.步长:默认步长为1,若需要间隔固定的间距取字符,则步长=间距+1,格式:[首下标:尾下标:步长]1s='abcde' 2s6=s[0:4:2] 3print(s

  • 19 个强大、有趣、又好玩的 Linux 命令!

    转自:民工哥技术之路1.sl命令 你会看到一辆火车从屏幕右边开往左边……安装$sudoapt-getinstallsl复制运行$sl复制命令有-alFe几个选项,-aAnaccidentseemstohappen.You'llfeelpityforpeoplewhocryforhelp. -lshowslittleone. -FItflies. -eAllowinterruptbyCtrl+C.复制可以给别人来个恶作剧,他一敲ls,不知道的肯定很有效果$aliasls=sl复制2.fortune命令输出一句话,有笑话,名言什么的(还有唐诗宋词sudoapt-getinstallfortune-zh)安装$sudoapt-getinstallfortune复制运行$fortune复制3.cowsay命令用ASCII字符打印牛,羊等动物,还有个cowthink,这个是奶牛想,那个是奶牛说,哈哈,差不多安装$sudoapt-getinstallcowsay复制运行$cowsay"Iamnotacow,hahaha"复制$cowsay-l查看其它动物的名字,

  • 扒虫篇-Bug日志 Ⅱ

    1.一个奇葩的注册App上传时出的蛋疼问题事情是这样的:一个风和日丽的下午,我正在itunesConnect中注册一个APP,基本信息都保存了,在编辑版本信息时,都弄的差不多了,可是没有保存,结果不巧,停电了......,等来电之后我再次注册时:Paste_Image.png可是我这里并没有显示出来啊,而且老板定下的名字也不能改啊,于是我尝试各种解决办法:关闭浏览器清理电脑,再次登录;换台电脑再次登录;重启电脑,再次登录。可是还是如此。期间,itunesConnect竟然抽风宕机了Snip20161122_1.png没办法了,我都想着给苹果的客服打电话了,可是第二天早上,登录账号后发现Paste_Image.png它居然出现了,尼玛,,,苹果服务器出的问题。2.Xcode8上一个模拟器运行时的报错。Snip20161010_1.png这是个不经常出现的问题,一旦出现模拟器就无法以Debug的形式,连接调试了。真机上可以运行。解决方法:先New一个Scheme。Paste_Image.png点击MangageScheme,Paste_Image.png在这个界面中删除旧的Scheme,选

  • 医疗行业网络入侵途径与全球安全现状

    患者信息泄露、医疗信息被篡改、医生误诊、遭勒索……医疗行业的网络安全危机是否已经到来? 去年在某行业峰会上,我们作出了“医疗网络将成为网络犯罪分子重点攻击对象”的预测,奈何预言成真。医疗数据泄露事件有如洪水猛兽。已有数据显示,今年医疗行业也不会幸免。我们研究网络犯罪分子加密医疗数据并发起赎金勒索的活动已逾一年。这些攻击者是如何进入医疗网络、泄露医疗数据,以及如何在公共医疗资源中找到敏感的医疗数据?2015-2017年医疗数据泄露事件数量(来源:HIPPAJournal)01打开医疗网络“大门”的钥匙为了找到医疗基础架构中可能存在的弱点,我们首先提取了名称中含“medic”、“clinic”、“hospit”、“surgery”以及“healthcare”等医院的IP地址,然后启动masscan(端口扫描器),通过专门的搜索引擎(Shodan与Censys)进行解析,最终获得这些医疗机构的公共资源。Masscan报告摘录当然,医疗网络边界往往包含着很多不太重要的开放端口和服务:web服务器、DNS服务器、mail服务器等等。这些端口和服务最容易被攻击者利用,但是研究这些简单的漏洞对于我们

  • 《数据库系统概念》15-可扩展动态散列

    静态散列要求桶的数目始终固定,那么在确定桶数目和选择散列函数时,如果桶数目过小,随着数据量增加,性能会降低;如果留一定余量,又会带来空间的浪费;或者定期重组散列索引结构,但这是一项开销大且耗时的工作。为了应对这些问题,为此提出了几种动态散列(dynamichashing)技术,可扩展动态散列(extendablehashing)便是其一。一、可扩展动态散列A)用一个数组来存储桶指针的目录,数组的位数为2的D次方,桶的容量为2的L次方,D和L分别称为全局位深度和局部位深度。每次发生桶溢出时,溢出桶分裂,容量变为2的L+1次方,其它桶的容量保持不变,同时数据目录的深度变为D+1。扩展容量时,只是调整了局部的桶容量和目录的容量,性能开销比较小。上图中,目录深度为2,目录项有4个。然后开始插入数据d1和d2,假定h(d1)=13、h(d2)=20,由于13=1101,且全局位深度为2,则根据后两位01确定应插入b桶,b桶有空间,可直接插入。20=10100,应插入a桶,但a桶以及满了,于是开始分裂,a桶的局部位深度变为3,容量扩展为8,如果扩展后的局部位深度超过了全局位深度,则全局位深度等于这

  • 海量数据, 为何总是 "海量垃圾" ?!

    2017.9.10,深圳,KenFang雷军说:我拥有海量的数据,却不知道怎么用?每年,花在存储海量数据的费用,也是海量;足以使企业破产⋯ 为何会如此?当我们将所谓“海量数据分析”的神秘面纱给揭开时,打破“海量数据分析”的神话,就会很容易的明白,真正的问题到底出在哪?为何谷歌能做到的,我们却做不到?大家都明白的CommonSense: 做海量数据分析,要先能建立数据模型;有了数据模型,我们才能从“海量”数据中,去提炼出“有用”的数据。 海量数据分析最关键、最重要的ㄧ步:将海量数据“转换”为有用的数据。而数据模型建立的前提是: @要能先分析出,产生数据背后的“用户的目的”。例如:用户是基于什么样的社会事件?天灾?人祸?的触发,而生成数据的。 @所采集到的数据,从“时间”的纬度,必需是要有“延续性”的。所以⋯ @当我们所拥有的数据,虽然是海量,但,我们却不知道,这些数据是为何而产生的?更糟糕的是,数据之间,完全没办法,经由“时间”,而归纳出“人类行为的模式”。 这样的数据,再如何的“海量”,也根本没法经由“数据分析师”,使用任何的数据分析工具,建立出任何有效的数据模型;海量数据将永远没办法

  • 腾讯云云服务器重置实例密码api接口

    1.接口描述接口请求域名:cvm.tencentcloudapi.com。 本接口(ResetInstancesPassword)用于将实例操作系统的密码重置为用户指定的密码。 *如果是修改系统管理云密码:实例的操作系统不同,管理员帐号也会不一样(Windows为Administrator,Ubuntu为ubuntu,其它系统为root)。 重置处于运行中状态的实例密码,需要设置关机参数ForceStop为TRUE。如果没有显式指定强制关机参数,则只有处于关机状态的实例才允许执行重置密码操作。 支持批量操作。将多个实例操作系统的密码重置为相同的密码。每次请求批量实例的上限为100。 实例操作结果可以通过调用DescribeInstances接口查询,如果实例的最新操作状态(LatestOperationState)为“SUCCESS”,则代表操作成功。 默认接口请求频率限制:10次/秒。 APIExplorer提供了在线调用、签名验证、SDK代码生成和快速检索接口等能力。您可查看每次调用的请求内容和返回结果以及自动生成SDK调用示例。 2.输入参数以下请求参数列

  • 腾讯云音频内容安全快速入门

    步骤一:登录注册注册腾讯云账号,并完成实名认证,详情请参见账号注册教程。 说明: 如果您已拥有腾讯云账号,可略过此步骤。 步骤二:创建子账号(可选)在 注册腾讯云 账号时,所生成的账号为主账号,拥有该主账号下所有云资源的管理权限。如果您需要其他用户来协助您一起管理账号下的云资源,可以通过使用访问管理功能创建子账号,并为其绑定权限策略。该功能可以创建一个或多个子账号提供给团队成员,详情请参见 新建子用户。 子账号刚创建时,默认是没有任何权限的,需要主账号或管理员为其绑定策略,才能使子账号拥有某些云资源的操作权限。您可以为子账号配置内容安全CAM授权,详情请参见  CAM授权指引。 步骤三:开通服务前提条件已获取腾讯云主账号或子账号。 操作步骤 登录 内容安全控制台,在左侧导航栏中选择音频内容安全下的任一菜单。 在页面右侧区域单击立即开通,即可开通音频内容安全。 说明: 首次开通服务后,可免费获得600分钟的测试套餐包,有效期为一个月;如免费套餐包到期或用尽后未购买正式套餐包,服务将被停用。 在开通服务后,

  • 【计算机视觉】【神经网络与深度学习】深度学习在图像超分辨率重建中的应用

    摘要: 超分辨率技术(Super-Resolution)是指从观测到的低分辨率图像重建出相应的高分辨率图像,在监控设备、卫星图像和医学影像等领域都有重要的应用价值。SR可分为两类:从多张低分辨率图像重建出高分辨率图像和从单张低分辨率图像重建出高分辨率图像。 超分辨率技术(Super-Resolution)是指从观测到的低分辨率图像重建出相应的高分辨率图像,在监控设备、卫星图像和医学影像等领域都有重要的应用价值。SR可分为两类:从多张低分辨率图像重建出高分辨率图像和从单张低分辨率图像重建出高分辨率图像。基于深度学习的SR,主要是基于单张低分辨率的重建方法,即Single ImageSuper-Resolution(SISR)。 SISR是一个逆问题,对于一个低分辨率图像,可能存在许多不同的高分辨率图像与之对应,因此通常在求解高分辨率图像时会加一个先验信息进行规范化约束。在传统的方法中,这个先验信息可以通过若干成对出现的低-高分辨率图像的实例中学到。而基于深度学习的SR通过神经网络直接学习分辨率图像到高分辨率图像的端到端的映射函数。 本文介绍几个

  • 站里大神的一句话

    我打算信步而行,摇头晃脑只是为了观赏两边的风景。现在是春天,路畔的花园粉色桃花白色梨花开了,或许还有樱花,因为零落的一片一片花瓣在水里有些哀伤。风景太好,我不忍走到终点, it'smyturntofuckyou

  • android sdk manager 假如不能从官方下载或者很慢,可以参照下面的网址

    http://tools.android-studio.org/index.php

  • mongodb监控工具mongostat

    mongostat的使用及命令详解     mongostat是mongodb自带的状态检测工具,在命令行下使用,会间隔固定时间获取mongodb的当前运行状态,并输出。 1、常用命令格式: mongostat--host192.168.11.11:27017--usernameroot--password12345678--authenticationDatabaseadmin 参数说明: --host :指定IP地址和端口,也可以只写IP,然后使用--port参数指定端口号 --username:如果开启了认证,则需要在其后填写用户名 --password :不用多少,肯定是密码 --authenticationDatabase:若开启了认证,则需要在此参数后填写认证库(注意是认证上述账号的数据库) 命令输出格式 2、各字段解释说明: insert/s:官方解释是每秒插入数据库的对象数量,如果是slave,则数值前有*,则表示复制集操作 query/s:每秒的查询操作次数 update/s:每秒的更新操作次数 dele

  • 《高频交易》读书笔记

    这本书的翻译有很多句子不通,有能力还是读原版的吧。 我只记录了高频交易实践内容,用来为机器自动交易提供参考。包括功能架构、常见缺陷、测试,三部分。 一 功能架构   上图为大多数系统交易平台结构,主要由5个步骤构成:1、核心引擎;2、报价归档;3、交易后分析;4、模拟;5、人力监督; 1、核心引擎:为了快,多为C++开发,有些用Java的关闭了GC。核心系统和投资组合管理系统启动,核心系统调自营商下单,response为价格和成交数额,核心系统计算收益,反馈到投资组合管理系统的风险管理参数, 投资组合管理系统包括:原始报价输入、计量经济模型、当前头寸(仓位)规模、投资多元化信息、投资组合回报最大化投入、最小化投资组合的风险。 客户与自营商传递报文用的是财务信息交换协议(FIX), 风险管理系统:突破绩效盈亏限制时,生成警告信息。 2、报价归档:高频交易中最具有时效性的功能是数据归档。(IO速度远低于CPU、内存的速度,核心计算用c,IO功能用速度慢的python也行)我觉得可以加入非关系型数据库、异步IO。 3、交易后分析:交易后,分析系统去分析,代码模拟的结果,

  • merge (oracle中merge用法)

    [Oracle]Merge语句 Merge的语法例如以下:   MERGE[hint]INTO[schema.]table[t_alias]USING[schema.] {table|view|subquery}[t_alias]ON(condition) WHENMATCHEDTHENmerge_update_clause WHENNOTMATCHEDTHENmerge_insert_clause;复制 MERGE是什么,怎样使用呢?让我们先看一个简单的需求:   需求是,从T1表更新数据到T2表中。假设T2表的NAME在T1表中已存在,就将MONEY累加,假设不存在。将T1表的记录插入到T2表中。 大家知道,在等价的情况下,一定需要至少两条语句,一条为UPDATE,一条为INSERT,并且语句中必需要与推断的逻辑,或者写在过程中,假设是单条语句,就要写全条件。写在UPDATE和INSERT的语句中,显的比較麻烦并且easy出错。假设了解MERGE,我们能够不借助存储过程,直接用单条SQL便实现了该业务逻辑,且代码非常简洁。详细例如以下:   MER

  • myrocks复制中断问题排查

    背景    mysql可以支持多种不同的存储引擎,innodb由于其高效的读写性能,并且支持事务特性,使得它成为mysql存储引擎的代名词,使用非常广泛。随着SSD逐渐普及,硬件存储成本越来越高,面向写优化的rocksdb引擎逐渐流行起来,我们也是看中了rocksdb引擎在写放大和空间放大的优势,将其引入到mysql体系。两种引擎的结构B-Tree(innodb引擎)和LSM-Tree(rocksdb引擎)很好地形成互补,我们可以根据业务类型来选择合适的存储。一般mysql默认是mysql+innodb引擎,而mysql+rocksdb引擎称之为myrocks。今天要讨论的就是myrocks复制中断问题,案例来源于真实的业务场景。 问题现象   复制过程中,出现了1756错误,根据错误日志和debug确认是slave-sql线程在更新slave_worker_info表时出错导致,堆栈如下: #70x0000000000a30104inRpl_info_table::do_flush_info(this=0x2b9999c9de00,force

  • [独孤九剑]Oracle知识点梳理(十)%type与%rowtype及常用函数

    本系列链接导航: [独孤九剑]Oracle知识点梳理(一)表空间、用户 [独孤九剑]Oracle知识点梳理(二)数据库的连接 [独孤九剑]Oracle知识点梳理(三)导入、导出 [独孤九剑]Oracle知识点梳理(四)SQL语句之DML和DDL [独孤九剑]Oracle知识点梳理(五)数据库常用对象之Table、View [独孤九剑]Oracle知识点梳理(六)数据库常用对象之Procedure、function、Sequence [独孤九剑]Oracle知识点梳理(七)数据库常用对象之Cursor [独孤九剑]Oracle知识点梳理(八)常见Exception  [独孤九剑]Oracle知识点梳理(九)数据库常用对象之package [独孤九剑]Oracle知识点梳理(十)%type与%rowtype及常用函数 5.8、%type与%rowtype的概念   定义变量时,使用person.name%type是将变量类型设置为与person表的name字段相同类型   使用v_RoomRecordrooms%ROWTYPE是将v_RoomRecord的结构与表rooms的表

  • js两个整数之间求和

    constGetSum=(a,b)=>{ letmin=Math.min(a,b), max=Math.max(a,b); return(max-min+1)*(min+max)/2; } 复制   

相关推荐

推荐阅读