Reservoir sampling algorithm--蓄水池抽样算法的理解

一、算法代码

def reservoir(num_seen_examples: int, buffer_size: int) -> int:"""Reservoir sampling algorithm.:param num_seen_examples: the number of seen examples:param buffer_size: the maximum buffer size:return: the target index if the current image is sampled, else -1"""if num_seen_examples < buffer_size:return num_seen_examplesrand = np.random.randint(0, num_seen_examples + 1)if rand < buffer_size:return randelse:return -1

二、具体功能解释如下:

  1. 参数说明:

    • num_seen_examples: 已经观察到的样本数。
    • buffer_size: 缓冲区的最大大小。
  2. 判断是否需要替换:

    • 如果已经观察到的样本数 num_seen_examples 小于缓冲区的最大大小 buffer_size,说明蓄水池尚未填满,可以直接返回当前样本的索引作为替换的目标索引。
  3. 执行蓄水池抽样:

    • 如果已经观察到的样本数超过了缓冲区的最大大小,执行蓄水池抽样。
    • 生成一个随机整数 rand,范围在 [0, num_seen_examples + 1) 之间。
  4. 返回结果:

    • 如果生成的随机整数 rand 小于缓冲区的最大大小 buffer_size,则返回该随机整数作为抽样的目标索引,表示当前样本将被替换进蓄水池。
    • 否则,返回 -1,表示当前样本不被替换,不进入蓄水池。

三、蓄水池抽样函数的原理理解:

        蓄水池抽样是一种经典的随机抽样算法,主要用于从一个数据流中等概率地随机抽取 k 个元素。这个算法的主要思想是在遍历数据流的过程中,以递增的概率选择元素,并在遇到新元素时以一定的概率替换已选取的元素。

3.1 算法的基本步骤如下:

  1. 初始化: 遍历数据流的前 k 个元素,将它们放入蓄水池中。

  2. 迭代: 对于第 i 个元素(i > k),以 k/i 的概率选择该元素并替换蓄水池中的一个已选元素。

这样,当遍历完整个数据流时,每个元素被选入蓄水池的概率都是 k/n(其中 n 是数据流中的元素总数),即保证了每个元素被选取的概率相等。

3.2 简单示例:

import numpy as npdef reservoir_sampling(data_stream, k):reservoir = []# 初始化,将前 k 个元素放入蓄水池for i in range(k):reservoir.append(data_stream[i])# 迭代处理后续的元素for i in range(k, len(data_stream)):# 生成一个随机整数,范围在 [0, i+1)rand = np.random.randint(0, i+1)# 如果生成的随机整数小于 k,替换蓄水池中的元素if rand < k:reservoir[rand] = data_stream[i]return reservoir# 示例数据流
data_stream = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]# 设置蓄水池大小为 3
reservoir_sample = reservoir_sampling(data_stream, 3)print("Reservoir Sample:", reservoir_sample)

        在这个示例中,蓄水池的大小(k)被设置为 3。算法会从数据流中随机选择 3 个元素,保证每个元素被选中的概率相等。在实际应用中,这种随机抽样的方法经常用于模拟从大规模数据流中进行抽样而不需要存储整个数据流。

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

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

相关文章

springboot/spring cloud 手动控制事务提交

1、背景&#xff1a;定时器定时从数据库中拉取数据进行分组处理&#xff0c;每一组如果有任意一个异常导致失败&#xff0c;该组操作事务只能回滚。所以在循环中每一次大循环是一个事务&#xff0c;大循环中的其它小循环中任意一个异常都会回滚处理。 2、service中引入spring的…

2023年度回顾:怿星科技的转型与创新

岁月不居&#xff0c;时节如流。随着2023年的落幕&#xff0c;怿星科技在这一年中不仅实现了自身的转型&#xff0c;还在技术创新、产品研发、行业合作和人才培养等方面取得了显著的成就。这一年&#xff0c;怿星科技正式完成了从服务型公司向产品型公司的战略转变&#xff0c;…

Delphi6函数大全5-SysUtils.pas

Delphi6函数大全5-SysUtils.pas 首部 function InquireSignal(RtlSigNum: Integer): TSignalState; $[SysUtils.pas 功能 <NULL> 说明 Kylix函数 参考 <NULL> 例子 <NULL> ━━━━━━━━━━━━━━━━━━━━━ 首部 procedure A…

为什么选择 IBM LSF?

IBM Spectrum Computing 推出了全面的软件定义基础架构解 决方案产品组合&#xff0c;从而优化资源利用率以缩短成果实现时间并 降低成本&#xff0c;以高效地交付 IT 服务。IBM Spectrum Computing 解决方案非常适合技术和 HPC 应用&#xff0c;旨在简化和加速高性能 仿真和分…

Windows本地如何部署Apache服务器搭配内网穿透实现无公网IP远程访问?

文章目录 前言1.Apache服务安装配置1.1 进入官网下载安装包1.2 Apache服务配置 2.安装cpolar内网穿透2.1 注册cpolar账号2.2 下载cpolar客户端 3. 获取远程桌面公网地址3.1 登录cpolar web ui管理界面3.2 创建公网地址 4. 固定公网地址 前言 Apache作为全球使用较高的Web服务器…

【Kotlin】协程

Kotlin协程 背景定义实践GlobalScope.launchrunBlocking业务实践 背景 在项目实践过程中&#xff0c;笔者发现很多异步或者耗时的操作&#xff0c;都使用了Kotlin中的协程&#xff0c;所以特地研究了一番。 定义 关于协程&#xff08;Coroutine&#xff09;&#xff0c;其实…

深度学习|3.6 激活函数 3.7 为什么需要非线性激活函数

激活函数 主要有sigmoid函数、tanh函数、relu函数和leaky relu函数 tanh函数相比sigmoid函数是具有优势的&#xff0c;因为tanh函数使得输出值的平均值为0&#xff0c;而sigmoid函数使得输出值的平均值为1/2&#xff0c;对下一层来说tanh输出的0更好进行处理。 激活函数tanh…

# .NET Framework中使用命名管道进行进程间通信

.NET Framework中使用命名管道进行进程间通信 在.NET应用程序中&#xff0c;进程间通信&#xff08;IPC&#xff09;是一项常见需求。命名管道提供了一种高效、可靠的方式来在独立运行的进程之间传输数据。本文将展示如何在.NET Framework环境下创建一个WinForms管道客户端应用…

DIA数皆智能客户体验管理CEM获伊利“健康+AI”生态创新大奖

DIA数皆智能客户体验管理CEM获伊利“健康AI”生态创新大奖 数皆智能再获殊荣&#xff01; 北京&#xff0c;2023年12月26日 — 在全球瞩目的伊利集团“健康AI”生态创新大赛中&#xff0c;上海数皆智能技术有限公司大放异彩&#xff0c;其创新领先的“智能化客户体验管理CEM&a…

置顶> 个人学习记录一览

个人学习记录一览表 写个说明   知识学的好&#xff0c;不如笔记记得好&#xff0c;知识点的遗忘在所难免&#xff0c;这里记录我个人的学习过程&#xff0c;以备后面二次学习使用。 Linux 操作系统 Linux 操作系统 001-介绍 Linux 操作系统 002-VMware Workstation的相关操…

第19届楚天春晚在九省通衢大武汉闪亮登场

——中国明星后代女子歌舞团刘亦菲等兼任形象大使 2024年新年伊始&#xff0c;一场以繁荣中国传统文化为主旨的“楚天春晚”全国文旅活动在湖北武汉拉开帷幕&#xff01;以“文化强省&#xff0c;旅游大省”为神州特色的联合国世界品牌之都&#xff0c;在辞旧迎新的早春来临之…

kubeadm来快速搭建一个K8S集群

二进制搭建适合大集群&#xff0c;50台以下的主机 kubeadm更适合中下企业的业务集群 我们采用了二进制包搭建出的k8s集群&#xff0c;本次我们采用更为简单的kubeadm的方式来搭建k8s集群。 二进制的搭建更适合50台主机以上的大集群&#xff0c;kubeadm更适合中小型企业的集群…

RocketMQ 生产者源码分析:DefaultMQProducer、DefaultMQProducerImpl

&#x1f52d; 嗨&#xff0c;您好 &#x1f44b; 我是 vnjohn&#xff0c;在互联网企业担任 Java 开发&#xff0c;CSDN 优质创作者 &#x1f4d6; 推荐专栏&#xff1a;Spring、MySQL、Nacos、Java&#xff0c;后续其他专栏会持续优化更新迭代 &#x1f332;文章所在专栏&…

Python 资源大全中文版

文末有链接 资源列表 环境管理 管理 Python 版本和环境的工具 p&#xff1a;非常简单的交互式 Python 版本管理工具。 pyenv&#xff1a;简单的 Python 版本管理工具。 Vex&#xff1a;可以在虚拟环境中执行命令。 virtualenv&#xff1a;创建独立 Python 环境的工具。 …

量子体积高达14082!这家公司正推动量子技术普及化

&#xff08;图片来源&#xff1a;网络&#xff09; Quantum AI致力于普及量子计算技术&#xff0c;成立仅一年&#xff0c;其研发的量子体积&#xff08;由IBM提出一个衡量量子计算机性能和错误率的专用指标&#xff09;已达到惊人的14082。 Quantum AI是Finlay MacKenzie和…

学习Go语言Web框架Gee总结--http.Handler(一)

学习Go语言Web框架Gee总结--http.Handler http-base/go.modhttp-base/main.gohttp-base/gee/gee.gohttp-base/gee/go.mod 网站学习来源&#xff1a;Gee 代码目录结构&#xff1a; http-base/go.mod //指定当前模块的名称为 "example" module example//指定当前模…

React16源码: context用法与createContext源码实现

context 1 &#xff09;概述 在react的设计中&#xff0c;组件与组件之间的通信通常是 父组件通过 props 给子组件传递子组件需要的属性父组件通过传递一些回调函数给子组件让子组件在某些特定的时候&#xff0c;可以调用一些父组件的特性 这种情况&#xff0c;会存在一个问题…

Spring ProxyFactoryBean

Spring的ProxyFactoryBean是一个非常有用的工具&#xff0c;它可以帮助我们创建代理对象&#xff0c;以实现AOP&#xff08;面向切面编程&#xff09;等功能。本文将介绍ProxyFactoryBean的基本概念、使用方法和注意事项。 ProxyFactoryBean的设计模式 ProxyFactoryBean是Spri…

谷歌AI模型Gemini被指演示视频造假 /深圳园区推出鸿蒙工程师租房优惠 |魔法半周报

我有魔法✨为你劈开信息大海❗ 高效获取AIGC的热门事件&#x1f525;&#xff0c;更新AIGC的最新动态&#xff0c;生成相应的魔法简报&#xff0c;节省阅读时间&#x1f47b; &#x1f525;资讯预览 谷歌AI模型Gemini被指演示视频造假&#xff0c;AI“神话”成“笑话” 深圳园…

TCP/IP的网络层(即IP层)之IP地址和网络掩码,在视频监控系统中的配置和应用

在给客户讲解我们的AS-V1000视频监控平台的时候&#xff0c;有的客户经常会配置错误IP地址的掩码和网关&#xff0c;导致出现一些网路问题。而在视频监控系统中&#xff0c;IP地址和子网掩码是用于标识网络中设备的重要标识符。IP地址被用来唯一地标识一个网络设备&#xff0c;…