理解有放回和无放回抽样 (Python)

news2024/12/28 14:28:19

理解有放回和无放回抽样 (Python)

文章目录

  • 一、说明
  • 二、放回抽样模型概念
    • 2.1 如何实现放回抽样
    • 2.2 使用 NumPy 进行替换抽样
    • 2.3 使用 Pandas 进行替换抽样
  • 三、基本统计原理
  • 四、什么是无放回抽样
    • 4.1 使用 NumPy 进行无放回抽样
    • 4.1 数据科学中不重复抽样的例子
  • 五、结论

一、说明

概率的模型很重要,比如有放回抽样和无放回抽样,这两个模型都拥有很强实用型,绝不能说说就算了,而是用程序如何实现的问题。
本教程将深入探讨有放回和无放回抽样,并涉及这些概念在数据科学中的一些常见应用。与往常一样,本教程中使用的代码可在我的GitHub上找到。让我们开始吧!
在这里插入图片描述

采用替换程序进行采样。

二、放回抽样模型概念

放回抽样可以定义为允许抽样单元出现多次的随机抽样。放回抽样包括

  • 从总体(如一罐珠子或一个数据集)中随机抽取的采样单元(如一颗玻璃珠或一行数据)。
  • 记录抽取了哪个采样单元。
  • 将抽样单位返回给总体。
    在抽取下一个抽样单元之前将抽样单元返回总体的原因是为了确保在未来的抽样中,选择任何特定抽样单位的概率保持不变. 在整个数据科学中,有许多可替换抽样的应用。其中许多应用使用引导法,这是一种统计过程,它对数据集使用可替换抽样来创建许多模拟样本。使用可替换抽样创建的数据集(因此它们具有与原始数据集相同数量的样本)称为引导数据集。引导数据用于机器学习算法(如袋装树和随机森林)以及统计方法(如引导置信区间)等。

2.1 如何实现放回抽样

采用替换程序进行采样。图片由Michael Galarnyk提供。
放回抽样可以定义为允许抽样单元出现多次的随机抽样。放回抽样包括

从总体(如一罐珠子或一个数据集)中随机抽取的采样单元(如一颗玻璃珠或一行数据)。
记录抽取了哪个采样单元。
将抽样单位返回给总体。
在这里插入图片描述

假设您有一罐 12 颗不同的玻璃珠,如上图所示。如果您从罐子中放回原处取样,随机选择其中任何一颗玻璃珠的概率是 1/12。选择一颗珠子后,将其放回罐子中,这样在未来的取样中选择 12 颗珠子中的任意一颗的概率就不会改变(1/12)。这意味着如果您重复该过程,完全有可能随机取出相同的珠子(在这种情况下为 1/12 的概率)。

本节的剩余部分将介绍如何使用 Python 库 NumPy 和 Pandas 进行放回抽样,并将介绍相关概念,例如引导数据集以及在进行放回抽样以创建引导数据集时应预期多少个重复样本。

2.2 使用 NumPy 进行替换抽样

为了更好地理解放回抽样,我们现在用 Python 模拟这个过程。下面的代码加载 NumPy 并从包含从 0 到 11 的唯一数字的 NumPy 数组中放回抽样 12 次。

import numpy as np
np.random.seed(3)
# a parameter: generate a list of unique random numbers (from 0 to 11)
# size parameter: how many samples we want (12)
# replace = True: sample with replacement
np.random.choice(a=12, size=12, replace=True)

结果如下:
在这里插入图片描述

注意有多个重复的数字。
在上面的代码中我们之所以采样 12 次,是因为我们从中采样的原始罐子(数据集)中有 12 个珠子(采样单元)。我们选择的 12 个弹珠现在是引导数据集的一部分,引导数据集是通过有放回采样创建的数据集,其值数量与原始数据集相同。

2.3 使用 Pandas 进行替换抽样

由于大多数人对从罐子中取样珠子的应用不感兴趣,因此有必要提及采样单元也可以是整行数据之类的东西。下面的代码使用 Kaggle 的 King County 数据集创建了一个引导数据集,其中包含 2014 年 5 月至 2015 年 5 月期间 King County(包括西雅图)的房屋售价。您可以从Kaggle下载数据集或从我的GitHub加载它。

# Import libraries
import numpy as np
import pandas as pd
# Load dataset
url = 'https://raw.githubusercontent.com/mGalarnyk/Tutorial_Data/master/King_County/kingCountyHouseData.csv'
df = pd.read_csv(url)
# Selecting columns I am interested in
columns= ['bedrooms','bathrooms','sqft_living','sqft_lot','floors','price']
df = df.loc[:, columns]
# Only want to use 15 rows of the dataset for illustrative purposes. 
df = df.head(15)
# Notice how we have 3 rows with the index label 8
df.sample(n = 15, replace = True, random_state=2)

在这里插入图片描述
请注意,有多个重复的行。
当通过替换抽样来创建引导数据集时,您应该预期有多少个重复样本/行?
在这里插入图片描述

自举数据通常用于袋装树和随机森林模型(这可能是袋装树或随机森林的图表,具体取决于决策树如何适应数据)。图片由Michael Galarnyk提供。
需要注意的是,当您使用替换抽样来生成数据时,您可能会得到重复的样本/行。实际上,平均引导数据集包含约 63.2% 的原始行。这意味着对于原始数据集中的任何特定行数据,36.8% 的引导数据集将不包含它。

本小节简要介绍如何从统计上得出这些数字,以及如何通过使用 Python 库 pandas 进行实验来接近这些数字。

三、基本统计原理

让我们首先推导一下,对于原始数据集中的任何特定行数据,36.8%的引导数据集将不包含该行。

假设原始数据集中有 N 行数据。如果要创建引导数据集,则需要进行 N 次替换抽样。

对于单个可替换样本,特定行数据不是从数据集中随机抽取的概率是
在这里插入图片描述

由于自举数据集是通过从大小为 N 的数据集中采样 N 次获得的,因此我们需要采样 N 次才能找到给定自举数据集中未选择特定行的概率。
在这里插入图片描述

如果我们当 N 趋向无穷大时取极限,我们会发现概率是 0.368。
在这里插入图片描述

原始数据集中任何特定行的数据出现在引导数据集中的概率仅为 1 — 𝑒^-1 = .63213。请注意,在现实生活中,数据集越大(N 越大),接近这些数字的可能性就越大。

使用 pandas

下面的代码使用 pandas 显示引导数据集将包含约 63.2% 的原始行。

# Import libraries
import numpy as np
import pandas as pd
# Load dataset
url = 'https://raw.githubusercontent.com/mGalarnyk/Tutorial_Data/master/King_County/kingCountyHouseData.csv'
df = pd.read_csv(url)
# Selecting columns I am interested in
columns= ['bedrooms','bathrooms','sqft_living','sqft_lot','floors','price']
df = df.loc[:, columns]
"""
Generate Bootstrapped Dataset (dataset generated with sample with replacement which has the same number of values as original dataset)
% of original rows will vary depending on random_state
"""
bootstrappedDataset = df.sample(frac = 1, replace = True, random_state = 2)

在下面的 bootstrap 样本中,请注意它包含约 63.2% 的原始样本/行。这是因为样本量很大(len(df) 为 21613)。这也意味着每个 bootstrap 数据集将不包含原始数据集中约 36.8% 的行。

长度(df)
在这里插入图片描述

len(bootstrappedDataset.index.unique())/ len(df)
在这里插入图片描述

四、什么是无放回抽样

在这里插入图片描述

无放回抽样。图片由Michael Galarnyk提供。
无放回抽样可以定义为不允许抽样单元出现多次的随机抽样。现在让我们看一个简单的例子来了解无放回抽样的工作原理。

假设您有一罐 12 颗独特的玻璃珠,如上图所示。如果您从罐中不放回原处取样,则随机选择任何 1 颗玻璃珠的概率为 1/12。选择一颗珠子后,不会将其放回罐中,因此在未来的取样中选中剩余 11 颗珠子的概率现在是 (1/11)。这意味着每多抽取一个样本,罐中的珠子就会越来越少,直到最终没有珠子可供取样(12 次取样后)。

4.1 使用 NumPy 进行无放回抽样

为了巩固这些知识,我们现在用 Python 模拟这个过程。下面的代码加载 NumPy 并从包含从 0 到 11 的唯一数字的 NumPy 数组中不重复地采样 12 次

import numpy as np
np.random.seed(3)
# a parameter: generate a list of unique random numbers (from 0 to 11)
# size parameter: how many samples we want (12)
# replace = False: sample without replacement
np.random.choice(a=12, size=12, replace=False)

在这里插入图片描述

注意没有重复的数字。
请注意,如果您尝试使用不放回抽样生成比原始样本(本例中为 12)更长的样本,您将收到错误。回到珠子罐的例子,您无法抽取比罐子中更多的珠子。

np.random.seed(3)
np.random.choice(a=12,size=20,replace=False)

在这里插入图片描述
在这里插入图片描述

您无法(不放回)取样比罐子中更多的珠子。图片由Michael Galarnyk提供。

4.1 数据科学中不重复抽样的例子

不重复抽样在整个数据科学中都有使用。一种非常常见的用途是在模型验证程序中,例如训练测试拆分和交叉验证。简而言之,这些程序中的每一个都允许您模拟机器学习模型在新/未见过的数据上的表现。

下图显示了训练测试拆分过程,该过程包括将数据集拆分为两部分:训练集和测试集。这包括随机抽样(不重复)约 75%(您可以调整此比例)的行并将其放入训练集,将剩余的 25% 放入测试集。请注意,“特征”和“目标”中的颜色表示特定训练测试拆分的数据将去往何处(“X_train”、“X_test”、“y_train”、“y_test”)。

在这里插入图片描述

训练测试分割程序。
如果您想了解有关训练测试分割的更多信息,可以查看我的博客文章《了解训练测试分割》。

五、结论

理解有放回和无放回抽样的概念在统计学和数据科学中非常重要。自举数据用于机器学习算法(如袋装树和随机森林)以及统计方法(如自举置信区间)等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2266960.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

H5电子杂志制作工具推荐

什么样的电子杂志制作软件最好用呢?这里向大家介绍几款操作简易又稳定、功能满足工作的需求、效果非常精美大气的电子杂志制作软件。 1.FLBOOK:是一款专门为企业内刊、期刊设计的在线制作平台,用来制作企业电子期刊非常方便。它不需要下载安…

CAN201 Introduction to Networking(计算机网络)Pt.3 网络层

文章目录 4.Network Layter(网络层)4.1 Overview4.2 Router(路由器)4.3 Internet Protocol4.4 IPv4 addressing4.5 NAT(network address translation,网路地址转换)4.6 IPv64.7 Generalized For…

计算机网络——期末复习(4)协议或技术汇总、思维导图

思维导图 协议与技术 物理层通信协议:曼彻斯特编码链路层通信协议:CSMA/CD (1)停止-等待协议(属于自动请求重传ARQ协议):确认、否认、重传、超时重传、 (2)回退N帧协…

uniapp中Nvue白屏问题 ReferenceError: require is not defined

uniapp控制台输出如下 exception function:createInstanceContext, exception:white screen cause create instanceContext failed,check js stack ->Uncaught ReferenceError: require is not defined 或者 exception function:createInstanceContext, exception:white s…

http 请求总结get

关于get请求传递body的问题 错误代码 有400 , 415 等情况 <!doctype html><html lang"zh"><head><title>HTTP Status 400 – 错误的请求</title><style type"text/css">body {font-family:Tahoma,Arial,sans-seri…

【微信小程序】4plus|搜索框-历史搜索 | 我的咖啡店-综合实训

升级版1-清空全部的再次确认 实现功能: 历史搜索记录展示-历史搜索记录展示10条点击跳转-点击历史搜索记录可同步到搜索框并自动搜索全部删除-可一次性全部删除历史搜索记录全部删除-有再次确认操作展示 进行搜索后留下搜索记录 点击垃圾桶图标,显示【清空全部】 点击【清…

Kubernetes 安装 Nginx以及配置自动补全

部署 Nginx &#xff1a; [rootk8s-master ~]# kubectl create deployment nginx --imagenginx:1.14-alpine deployment.apps/nginx created暴露端口&#xff1a; [rootk8s-master ~]# kubectl expose deployment nginx --port80 --typeNodePort service/nginx exposed查看服…

“库存管理软件的用户体验”:界面与交互设计

3.1可行性分析 开发者在进行开发系统之前&#xff0c;都需要进行可行性分析&#xff0c;保证该系统能够被成功开发出来。 3.1.1技术可行性 开发该库存管理软件所采用的技术是vue和MYSQL数据库。计算机专业的学生在学校期间已经比较系统的学习了很多编程方面的知识&#xff0c;同…

基于openEuler22.09部署OpenStack Yoga云平台(一)

OpenStack Yoga部署 安装OpenStack 一、基础准备 基于OpenStack经典的三节点环境进行部署&#xff0c;三个节点分别是控制节点&#xff08;controller&#xff09;、计算节点&#xff08;compute&#xff09;、存储节点&#xff08;storage&#xff09;&#xff0c;其中存储…

AutoDL服务器深度学习使用过程

前期准备 Xshell,Xftp,Pycharm专业版 step 1:实例开机&#xff08;无卡or有卡&#xff09;&#xff0c;Xshell连接 新建xshell会话&#xff1a; 登录指令格式为&#xff1a; ssh -p 38076 rootregion-1.autodl.com 在ssh -p 38076 rootregion-1.autodl.com命令中&#xff0…

【RabbitMQ的死信队列】

死信队列 什么是死信队列死信队列的配置方式死信消息结构 什么是死信队列 消息被消费者确认拒绝。消费者把requeue参数设置为true(false)&#xff0c;并且在消费后&#xff0c;向RabbitMQ返回拒绝。channel.basicReject或者channel.basicNack。消息达到预设的TTL时限还一直没有…

详解从输入url到页面渲染

当你在浏览器中输入一个 URL 并按下回车键&#xff0c;浏览器会经历一系列步骤来加载并渲染页面。这些步骤包括 DNS 解析、缓存处理、建立连接、发送请求、接收响应、解析 HTML、构建 DOM 树和 CSSOM 树、执行 JavaScript、布局和绘制等。以下是这些步骤的详细解释&#xff0c;…

从 GitLab.com 到 JihuLab.com 的迁移指南

本文分享从 GitLab.com 到 JihuLab.com 的迁移指南。 近期&#xff0c;GitLab Inc. 针对其 SaaS 产品做了限制&#xff0c;如果被判定为国内用户&#xff0c;则会建议使用其在国内的发布版本极狐GitLab。从 GitLab SaaS 产品&#xff08;GitLab.com&#xff09;迁移到极狐GitL…

AIA - IMSIC之二(附IMSIC处理流程图)

本文属于《 RISC-V指令集基础系列教程》之一,欢迎查看其它文章。 1 ​​​​​​​通过IMSIC接收外部中断的CSR 软件通过《AIA - 新增的CSR》描述的CSR来访问IMSIC。 machine level 的 CSR 与 IMSIC 的 machine level interrupt file 可相互互动;而 supervisor level 的 CSR…

Python爬虫实战(保姆级登网页信息爬取教程)

此blog为爬虫实战教学&#xff0c;代码已附上&#xff0c;可以复制运行。若要直接看实战代码翻到博客后半部分。 本文使用selenium库进行爬虫&#xff0c;实现爬取数据操作&#xff0c;此库是通过模仿用户的操作进行对页面的处理。了解了这个思维模式&#xff0c;可以对代码进…

国产三维CAD正强势崛起

CAD软件作为现代工业设计和制造领域不可或缺的核心工具&#xff0c;其重要性不言而喻。它极大地提升了设计效率与精度&#xff0c;缩短了产品开发周期&#xff0c;为企业的创新与发展注入了强大动力。随着全球市场竞争的日益激烈&#xff0c;以及当前国际局势的复杂多变&#x…

编码滤波技术-SAO

1. AVS中的SAO样值偏移自适应补偿技术&#xff0c;首先将正在处理的块往左上移动了四行四列&#xff0c;超过图像边界的部分丢弃&#xff0c;右、下图像边界部分补齐。 也就是偏移前在图像边缘的块&#xff0c;进行去除和扩展得到偏移后的块。图像内部的块&#xff0c;正常往左…

Leetcode打卡:查询数组中元素出现的位置

执行结果&#xff1a;通过 题目 3159 查询数组中元素出现的位置 给你一个整数数组 nums &#xff0c;一个整数数组 queries 和一个整数 x 。 对于每个查询 queries[i] &#xff0c;你需要找到 nums 中第 queries[i] 个 x 的位置&#xff0c;并返回它的下标。如果数组中 x 的出…

【游戏设计原理】32 - 消费者剩余

1. 如何理解消费者剩余原理&#xff1f; 消费者剩余是一种经济学概念&#xff0c;表示消费者愿意为商品支付的最大金额与实际支付金额之间的差额。 简单来说&#xff0c;消费者剩余衡量了消费者从交易中获得的“额外价值”或“剩余利益”。 在传统商业模式下&#xff0c;由于…

肝功能不正常可以过教师入职体检吗?

如何看肝功能报告单 转氨酶正常等于肝功能正常吗?要想看懂肝功能报告单就要看懂各指标含义。 1、总胆红素TbiL正常值是 1.7-17.1μmol/L 急性黄疸型肝炎活动性肝炎肝坏死、肝癌、胰头癌都异常偏高。 2、直接胆红素 DbiL正常值是 0-6.84μmol/L 结石病、肝癌、胰头癌与这项…