0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

抽样的几种常用方法以及在Python中是如何实现的

上海磐启微电子有限公司 来源:Python数据科学 作者:Python数据科学 2021-08-10 15:16 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

大家好,今天来和大家聊聊抽样的几种常用方法,以及在Python中是如何实现的。

抽样是统计学、机器学习中非常重要,也是经常用到的方法,因为大多时候使用全量数据是不现实的,或者根本无法取到。所以我们需要抽样,比如在推断性统计中,我们会经常通过采样的样本数据来推断估计总体的样本。

上面所说的都是以概率为基础的,实际上还有一类非概率的抽样方法,因此总体上归纳为两大种类:

概率抽样:根据概率理论选择样本,每个样本有相同的概率被选中。

非概率抽样:根据非随机的标准选择样本,并不是每个样本都有机会被选中。

概率抽样技术1.随机抽样(Random Sampling)

这也是最简单暴力的一种抽样了,就是直接随机抽取,不考虑任何因素,完全看概率。并且在随机抽样下,总体中的每条样本被选中的概率相等。

比如,现有10000条样本,且各自有序号对应的,假如抽样数量为1000,那我就直接从1-10000的数字中随机抽取1000个,被选中序号所对应的样本就被选出来了。

在Python中,我们可以用random函数随机生成数字。下面就是从100个人中随机选出5个。

import random

population = 100

data = range(population)

print(random.sample(data,5))

》 4, 19, 82, 45, 41

2.分层抽样(Stratified Sampling)

分层抽样其实也是随机抽取,不过要加上一个前提条件了。在分层抽样下,会根据一些共同属性将带抽样样本分组,然后从这些分组中单独再随机抽样。

因此,可以说分层抽样是更精细化的随机抽样,它要保持与总体群体中相同的比例。 比如,机器学习分类标签中的类标签0和1,比例为3:7,为保持原有比例,那就可以分层抽样,按照每个分组单独随机抽样。

Python中我们通过train_test_split设置stratify参数即可完成分层操作。

from sklearn.model_selection import train_test_split

stratified_sample, _ = train_test_split(population, test_size=0.9, stratify=population[[‘label’]])

print (stratified_sample)

3.聚类抽样(Cluster Sampling)

聚类抽样,也叫整群抽样。它的意思是,先将整个总体划分为多个子群体,这些子群体中的每一个都具有与总体相似的特征。也就是说它不对个体进行抽样,而是随机选择整个子群体。

用Python可以先给聚类的群体分配聚类ID,然后随机抽取两个子群体,再找到相对应的样本值即可,如下。

import numpy as np

clusters=5

pop_size = 100

sample_clusters=2# 间隔为 20, 从 1 到 5 依次分配集群100个样本的聚类 ID,这一步已经假设聚类完成

cluster_ids = np.repeat([range(1,clusters+1)], pop_size/clusters)

# 随机选出两个聚类的 ID

cluster_to_select = random.sample(set(cluster_ids), sample_clusters)

# 提取聚类 ID 对应的样本

indexes = [i for i, x in enumerate(cluster_ids) if x in cluster_to_select]

# 提取样本序号对应的样本值

cluster_associated_elements = [el for idx, el in enumerate(range(1, 101)) if idx in indexes]

print (cluster_associated_elements)

4.系统抽样(Systematic Sampling)

系统抽样是以预定的规则间隔(基本上是固定的和周期性的间隔)从总体中抽样。比如,每 9 个元素抽取一下。一般来说,这种抽样方法往往比普通随机抽样方法更有效。

下图是按顺序对每 9 个元素进行一次采样,然后重复下去。

用Python实现的话可以直接在循环体中设置step即可。

population = 100

step = 5

sample = [element for element in range(1, population, step)]

print (sample)

5.多级采样(Multistage sampling)

在多阶段采样下,我们将多个采样方法一个接一个地连接在一起。比如,在第一阶段,可以使用聚类抽样从总体中选择集群,然后第二阶段再进行随机抽样,从每个集群中选择元素以形成最终集合。

Python代码复用了上面聚类抽样,只是在最后一步再进行随机抽样即可。

import numpy as np

clusters=5

pop_size = 100

sample_clusters=2

sample_size=5# 间隔为 20, 从 1 到 5 依次分配集群100个样本的聚类 ID,这一步已经假设聚类完成

cluster_ids = np.repeat([range(1,clusters+1)], pop_size/clusters)

# 随机选出两个聚类的 ID

cluster_to_select = random.sample(set(cluster_ids), sample_clusters)

# 提取聚类 ID 对应的样本

indexes = [i for i, x in enumerate(cluster_ids) if x in cluster_to_select]

# 提取样本序号对应的样本值

cluster_associated_elements = [el for idx, el in enumerate(range(1, 101)) if idx in indexes]

# 再从聚类样本里随机抽取样本print (random.sample(cluster_associated_elements, sample_size))

非概率抽样技术非概率抽样,毫无疑问就是不考虑概率的方式了,很多情况下是有条件的选择。因此,对于无随机性我们是无法通过统计概率和编程来实现的。这里也介绍3种方法。

1.简单采样(convenience sampling)

简单采样,其实就是研究人员只选择最容易参与和最有机会参与研究的个体。比如下面的图中,蓝点是研究人员,橙色点则是蓝色点附近最容易接近的人群。

2.自愿抽样(Voluntary Sampling)

自愿抽样下,感兴趣的人通常通过填写某种调查表格形式自行参与的。所以,这种情况中,调查的研究人员是没有权利选择任何个体的,全凭群体的自愿报名。比如下图中蓝点是研究人员,橙色的是自愿同意参与研究的个体。

3.雪球抽样(Snowball Sampling)

雪球抽样是说,最终集合是通过其他参与者选择的,即研究人员要求其他已知联系人寻找愿意参与研究的人。比如下图中蓝点是研究人员,橙色的是已知联系人,黄色是是橙色点周围的其它联系人。

总结以上就是8种常用抽样方法,平时工作中比较常用的还是概率类抽样方法,因为没有随机性我们是无法通过统计学和编程完成自动化操作的。

比如在信贷的风控样本设计时,就需要从样本窗口通过概率进行抽样。因为采样的质量基本就决定了你模型的上限了,所以在抽样时会考虑很多问题,如样本数量、是否有显著性、样本穿越等等。在这时,一个良好的抽样方法是至关重要的。

参考:

[2] https://towardsdatascience.com/8-types-of-sampling-techniques-b21adcdd2124

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    7314

    浏览量

    93958
  • 机器学习
    +关注

    关注

    66

    文章

    8541

    浏览量

    136224
  • python
    +关注

    关注

    57

    文章

    4857

    浏览量

    89561

原文标题:基于 Python 的 8 种常用抽样方法

文章出处:【微信号:gh_6a53af9e8109,微信公众号:上海磐启微电子有限公司】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    labview如何实现数据的采集与实时预测

    现有以下问题:labview可以实现数据的采集以及调用python代码,但如何将这两项功能集成一个VI文件里,从而实现数据的采集与实时预测
    发表于 12-03 21:13

    Python调用API教程

    两个不同系统之间的信息交互。在这篇文章,我们将详细介绍Python调用API的方法和技巧。 一、用Requests库发送HTTP请求 使用Python调用API的第一步是发送HTTP
    的头像 发表于 11-03 09:15 320次阅读

    提高RISC-VDrystone测试得分的方法

    Drystone 是一种常用的计算机性能基准测试,主要用来测量整数(非浮点)计算性能。 影响 RISC-V Drystone 测试得分的因素主要有以下几个: 处理器核心设计:处理器核心
    发表于 10-21 13:58

    使用jQuery的常用方法与返回值分析

    使用jQuery的常用方法与返回值分析 jQuery是一个轻量级的JavaScript库,旨在简化HTML文档遍历和操作、事件处理以及动画效果的创建。本文将介绍一些常用的jQuery
    发表于 10-01 20:18

    【Labview技巧合集】16 labview嵌入python做的界面

    labview嵌入python做的GUI界面 无所不能的labview啊
    发表于 09-22 05:30

    termux调试python猜数字游戏

    用termux做一个猜数字游戏 下面是Termux创建猜数字游戏的步骤及完整实现方案,结合Python实现(最适配Termux环境
    发表于 08-29 17:15

    Python字符串逆序有几种方式,代码是什么

    对于一个给定的字符串,逆序输出,这个任务对于python来说是一种很简单的操作,毕竟强大的列表和字符串处理的一些列函数足以应付这些问题 了,今天总结了一下python对于字符串的逆序输出的
    的头像 发表于 08-28 14:44 774次阅读

    基础篇3:掌握Python的条件语句与循环

    Python编程语言中,条件语句和循环是构成复杂逻辑和数据处理的基石。本篇基础教程将帮助您深入了解Python的条件语句和循环结构,让您能够更好地控制程序流程。 条件语句 条件语句
    发表于 07-03 16:13

    在线测径仪100%全检替代抽样检测!开启工业质检智能时代!

    传统的线棒管材生产过程抽样检测的滞后性与随机性导致质量隐患频发,漏检、误判造成的经济损失高达行业总成本的5%-10%。在线测径仪凭借全流程自动化检测技术,以每秒2000次的高频测量能力,
    发表于 04-17 14:14

    零基础入门:如何在树莓派上编写和运行Python程序?

    在这篇文章,我将为你简要介绍Python程序是什么、Python程序可以用来做什么,以及如何在RaspberryPi上编写和运行一个简单的Pyth
    的头像 发表于 03-25 09:27 1518次阅读
    零基础入门:如何在树莓派上编写和运行<b class='flag-5'>Python</b>程序?

    Python嵌入式系统的应用场景

    你想把你的职业生涯提升到一个新的水平?Python嵌入式系统中正在成为一股不可缺少的新力量。尽管传统上嵌入式开发更多地依赖于C和C++语言,Python的优势在于其简洁的语法、丰富的库和快速的开发周期,这使得它在某些嵌入式场景
    的头像 发表于 03-19 14:10 1186次阅读

    有没有什么方案能实现直接用matlab或python调用D4100_usb.dll?

    我实验室购入一块DLPLCR70EVM并搭配DLPLCR410EVM使用,由于Discovery 4100 Explorer程序不能满足实验需要,我论坛上找到方法通过D4100_usb.dll
    发表于 02-27 06:59

    使用Python实现xgboost教程

    使用Python实现XGBoost模型通常涉及以下几个步骤:数据准备、模型训练、模型评估和模型预测。以下是一个详细的教程,指导你如何在Python中使用XGBoost。 1. 安装XGBoost
    的头像 发表于 01-19 11:21 2207次阅读

    字符串处理方法 字符串转数字的实现

    在编程,将字符串转换为数字是一个常见的需求。不同的编程语言有不同的方法实现这一功能。以下是一些常见编程语言中的字符串转数字的实现方法
    的头像 发表于 01-07 15:26 1392次阅读

    ADS1115单词转换时间最短也需要1.2ms左右,请问其抽样时间启动采样多久后完成?

    ADS1115单词转换时间最短也需要1.2ms左右。请问其抽样时间启动采样多久后完成? 当前项目中为了维持ADC前端信号,将激发光源开启了2ms左右 导致功耗较高。如果可以确定其抽样时间,是否又可以
    发表于 01-02 07:01