干货收藏!Python完整代码带你一文看懂抽样(2)
以上的数据记录数不是固定的,在实际工作时,如果没有特定时间要求,笔者一般会选择一个适中的样本量做分析,此时应综合考虑特征数、特征值域分布数、模型算法适应性、建模需求等;如果是面向机器计算的工作项目,一般会选择尽量多的数据参与计算,而有关算法实时性和效率的问题会让技术和运维人员配合实现,例如提高服务器配置、扩大分布式集群规模、优化底层程序代码、使用实时计算的引擎和机制等。 (2)抽样样本在不同类别中的分布问题 做分类分析建模问题时,不同类别下的数据样本需要均衡分布。 抽样样本能准确代表全部整体特征:
异常检测类数据的处理:
4.代码实操:Python数据抽样本示例中,将使用random包以及自定义代码实现抽样处理。数据源文件data2.txt、data3.txt和data4.txt位于“附件-chapter3”中。 整个示例代码分为5部分。 第1部分:导入需要的库
这里用到了Python内置标准库random以及第三方库Numpy,前者用于做随机抽样,后者用于读取文件并做数据切片使用。 第2部分:实现简单随机抽样
首先通过Numpy的loadtxt方法读取数据文件。 然后使用Random库中的sample方法做数据抽样。由于sample库要求抽取的对象是一个序列或set,因此这里使用了一个列表推导式直接基于data数据集的记录数生成索引列表,然后再返回给sample随机抽样,抽样数量为2000;最后从data中直接基于索引获得随机抽样后的结果。 打印输出前2条数据和总抽样样本量。返回结果如下:
本示例中,我们使用了列表推导式来生成data的索引列表。传统方法的实现可以这样写:
而这里的列表推导式的写法[i for i in range(len(data))]除了在语法上更加简洁和优雅外,在性能上同样会有提升。我们通过如下实验做简单测试,对从0到1000000的每个数求平方然后添加到列表。两种方法如下:
上述代码执行后的输出结果分别是:
上面只是简单的计算逻辑并且数据量也不大,如果配合大数据量以及更复杂的运算,那么效率提升会非常明显。与之类似的还有生成器表达式、字典推导式,都是很Pythonic的实现方法。 (编辑:ASP站长网) |