在建模的时候,时常需要构造训练集和测试集,但当总数据比较大的时候,如何进行简单抽样也是一个问题。
假设有这样一个情况,一份数据总共有1,000,000条,要从中抽取100,000条左右的数据。每条数据相对比较大,把所有数据一次放入内存不靠谱,那么如何抽样呢?
最龊的方法就是抽取头100,000或100,000条。
第二种能想到的方法就是,构造一个1-1,000,000的数组,然后从里面随机抽取100,000个作为样本行号列表,在读取大文件,一旦行号在列表中就输出到样本文件中。
第二种方法基本够用,但还是存在一定缺陷。当总数据非常大,需要抽取的样本数也不小时,或机器内存较小时。于是考虑到使用概率方式,在[1-n]作均匀随机抽取数字,那么期望值(n+1)/2,也就是说随机足够多次数,那么所有的随机出来的数字的平均数为(n+1)/2。那么是否可以这样考虑,我们每随机一个值a,就把大文件中中连续的a行作为一个块,那么最后每个块的平均大小为(n+1)/2,也就是说大文件被切分成N/((n+1)/2),我们再再每一块中取一行作为样本。这样的话由于大文件的总行数N,和块数(样本大小)是已知的,那么我们就可以求出n。
还是一开始的例子,可以求出n=(N/m) * 2 - 1=(1000000/100000) * 2 - 1 = 19;
于是
ei=randint(1, 19);bi=0;
fd = open('total.txt', 'r');
ofd = open('sample.txt', 'w');
while True:
line = fd.readline();
if not line:
break;
bi += 1;
if bi != ei:
continue;
ofd.write(line);
bi = 0;
ei = randint(1, 19)
PS: 我实际测试的列子是总数据条数为35385665,尝试抽取100,000,使用上面的方法,最后抽取出100,167条记录,基本符合要求了。不过不能精确的抽取100,000也就是这个方法的弊端了。
分享到:
相关推荐
易语言程序随机抽取器利用计算机的随机数生成算法进行操作,其原理是在给定的范围内生成一组随机数,从而实现对名单、号码、任务等数据的随机抽取。软件的简易性意味着它可能没有复杂的设置选项,但基本的功能足以...
标题 "1-1000个数字中随机抽取1组数据" 涉及到的主要知识点是计算机编程中的随机数生成和数组操作。在许多应用中,如模拟实验、数据分析或者游戏开发,都需要生成随机数。在这个场景下,我们需要从1到1000的整数范围...
自学VB所写的一个随机抽取应用,从外部txt文件读取名单(一行一个),使用了ReDim Preserve扩展数组定义范围。姓名滚动显示,单次仅抽取一个。可以选择屏蔽重复或不屏蔽(运用临时数组储存未抽取数据,以及ReDim清空...
在IT领域,随机抽取记录软件是一种非常实用的工具,尤其在数据分析、教育评估、抽奖活动或者市场调研等场景中。这种软件允许用户从一组数据中按照预设规则随机选取特定的记录,确保了过程的公正性和随机性。下面将...
"小飞侠随机抽取器"是一款专为数据随机抽取和简单抽奖场景设计的软件工具。在各种需要公平、公正选取元素的场合,如抽奖活动、课堂抽签、名单筛选等,这款软件都能发挥其功能。它允许用户自定义抽取项,意味着你可以...
本项目名为"随机抽取工具java",使用Java编程语言实现,它能够帮助用户从Excel文件中导入学生数据,并按照指定数量随机抽取学生。接下来,我们将详细讨论这个工具涉及到的关键技术和知识点。 1. **Java编程基础**:...
1. **随机抽样**:随机抽样是统计学中的基本概念,它指的是在总体数据中按照一定的随机原则抽取一部分样本,以代表整体。数据筛选器能够实现这一功能,让用户从数据集中选取具有代表性的子集,这对于进行数据分析、...
综上所述,"随机抽取图片进行战斗"这个项目涵盖了时钟控件的运用、随机数生成、数组操作、文件I/O、数据解析、逻辑判断、简单游戏规则设计以及界面展示等多个IT知识点。通过这个项目,开发者不仅可以锻炼基础编程...
【标题】"基于PyQt5实现随机抽取数据并导出"是一个使用Python的GUI库PyQt5开发的应用程序,该程序能够从一个主Excel文件中按照用户指定的数量随机选取数据,并将这些数据导出为TXT或.xlsx格式。这个功能对于数据分析...
3. **随机抽取算法**: - **随机数生成**:C#的`System.Random`类提供了生成随机数的功能,可以使用`Next`方法在指定范围内生成随机数。 - **名单抽取**:将名单存储在一个列表或数组中,使用随机数作为索引抽取...
在本项目中,"随机抽取彩票界面"是一个基于Java编程语言设计的简单彩票抽彩系统,主要用于教育目的,帮助学生理解和实践随机数生成以及用户界面设计。下面将详细阐述这个系统涉及的关键知识点。 1. **Java语言基础*...
《随机抽取小软件》是一款专为用户设计的实用工具,主要功能是进行随机抽选,适用于各种需要公平选择场景。这款软件内置了默认的登录系统,用户可以通过用户名“admin”和密码“123456”进行访问,无需复杂的注册...
简单好用的多类型抽奖PPT,支持随机抽取数字、姓名等文字内容。 附有记录框,可连续抽取多次。抽奖过程有滚动动画,抽奖更加真实透明。 只需简单修改Excel文件便可轻松完成数据录入,并附有贴心的使用说明。 同时,...
在C#编程环境中,开发一个抢答赛随机抽取题目的应用程序是一个典型的桌面应用项目,它涉及到文件操作、数据读取、随机数生成以及用户界面设计等多个方面。本项目使用Visual Studio 2015作为集成开发环境(IDE),...
这个压缩包中的“程序”文件很可能是这个随机抽取小程序的源代码,用户可以查看代码了解其工作原理,或者开发者可以进一步修改和定制以满足特定需求。为了确保程序的稳定性和安全性,用户在使用时应遵循程序的使用...
本案例中的"PowerPoint + VBA编程,实现滚动随机抽取+指定抽取"是一个巧妙地结合了Microsoft PowerPoint与VBA(Visual Basic for Applications)技术的实用工具。VBA是Office套件中内置的一种编程语言,允许用户...
通过从各种年龄组(年轻人,中年人和老年人),种族组(白人,黑人和亚洲人)的面部图像中随机抽取B,G,R值以及从FERET数据库和PAL数据库获得的性别来收集皮肤数据集。 。学习样本总量为245057; 其中50859是皮肤...
原数据集共有1225万条左右数据,数据为淘宝APP2014年11月18日至2014年12月18日的用户行为数据,共计6列字段,列字段分别是: user_id:用户身份, item_...本数据集随机抽取了其中的100万条数据,可减少程序运行时间。
7. **文件操作**:如果姓名是从文件中读取或保存到文件,那么VB的`FileOpen`、`Input`、`Write`和`Close`等文件操作函数就会用到。这可以实现姓名列表的导入导出,增强程序的实用性。 通过分析和理解这个VB随机抽取...
综上所述,"随机抽取名字"项目涵盖了C#语言的多个核心概念和技术,包括基础语法、数据结构、随机数生成、异常处理、用户交互、面向对象编程以及多线程等。开发者可以通过实现这样一个项目,深入理解和运用这些知识。