首页 > 编程问答 >不同 Beta 分布样本

不同 Beta 分布样本

时间:2024-07-29 14:30:35浏览次数:10  
标签:python numpy machine-learning beta-distribution

给定这个Python代码


success = np.array([1, 2, 3, 4, 5])
failure = np.array([12, 13, 14, 15, 16])

beta_samples = np.random.beta(success + 1, failure + 1, size = 5)
print(beta_samples)

beta_samples2 = [np.random.beta(success[i] + 1, failure[i] + 1) for i in range(5)]
print(beta_samples2)

Python代码的输出是:

[0.22023725 0.18643029 0.14765836 0.12017337 0.39477445]
[0.22605254862542162, 0.12566539444840888, 0.13290508184544317, 0.2718239044172474, 0.1464185003569084]

假设我使用相同的 success failure 数组,为什么我会得到两个完全不同的Beta分布样本? 哪一项是正确的,哪一项是错误的? 这是因为稍后我需要使用 argmax(...) 函数选择这些 beta 样本中最大值的位置/索引,目前,这两个样本都会给我不同的索引/位置。


这两个样本的生成方式不同,导致结果不同。让我们逐行分解代码:

第一种方法:

beta_samples = np.random.beta(success + 1, failure + 1, size = 5)

此行从 同一 Beta 分布中生成 5 个独立样本。此分布的参数由 success + 1 failure + 1 确定。这意味着所有 5 个样本都使用相同的 alpha 和 beta 值(基于提供的 success failure 数组)生成。

第二种方法:

beta_samples2 = [np.random.beta(success[i] + 1, failure[i] + 1) for i in range(5)]

此行生成 5 个 Beta 分布样本,但每个样本都来自 不同的 分布。循环遍历 success failure 数组中的每个对应对,并使用这些特定值生成一个样本。因此,最终会得到 5 个来自具有不同 alpha 和 beta 值的不同 Beta 分布的样本。

哪个是正确的?

两者都是正确的,具体取决于的目标。

  • 如果想要从 单个 Beta 分布中抽取多个样本(使用提供的 success failure 数据定义),则第一种方法是正确的。
  • 如果想要从 多个 Beta 分布中抽取样本(其中每个分布由 success failure 数组中的对应对定义),则第二种方法是正确的。

argmax 问题:

获得不同的 argmax 结果是因为从不同的分布中抽取了样本。由于每个样本集都代表来自不同基础分布的随机抽样,因此它们具有不同的值并导致不同的 argmax 索引也就不足为奇了。

要使用哪种方法?

要确定要使用哪种方法,请考虑的目标是什么:

  • 如果希望获得特定 Beta 分布(由所有成功和失败的汇总定义)的代表性样本,请使用第一种方法。
  • 如果希望从多个 Beta 分布(每个都代表不同的成功/失败对)中获得样本,请使用第二种方法。

一旦选择了正确的方法, argmax 函数将为提供基于该方法生成的样本的正确最大值索引。请记住,即使使用同一种方法,由于随机性,也可能会在每次运行代码时获得不同的 argmax 结果。

标签:python,numpy,machine-learning,beta-distribution
From: 78805636

相关文章

  • Python如何统治AI世界?一文读懂它的优势与挑战
    一、Python语言介绍1.1Python语言概述Python是一种由GuidovanRossum于1991年首次发布的高级编程语言。其设计理念强调代码的可读性和简洁性,使其成为了许多开发者的首选语言。Python的语法简洁直观,采用了缩进来定义代码块,这与其他使用花括号或关键词的编程语言不同。Python......
  • 找到一种方法将program1的输出作为python中program2的输入发送
    有人可以帮我找到一种方法将program1的输出作为python中的program2的输入发送将其保存为.csv文件不会对我有帮助,因为该程序应该尽快执行这些任务。因此我正在寻找一种方法将程序1的终端输出直接发送到程序2在Python中,可以使用子进程模块将一个程序的输出发送到另一个程......
  • 同时运行多个Python程序的最佳方法
    我有一个python程序,我想同时运行多个具有不同参数的实例。这些实例彼此之间不进行通信。在单独的终端中运行每个实例太乏味了。我考虑使用多处理模块将每个实例作为单独的进程运行,但是我希望能够随时停止和重新启动某些单独的实例,而不会中断其他正在运行的实例。是否有任何流程......
  • 替换 Python 数据框中包含值的 <
    我有一个数据框,在某些列中存在诸如“<0.5、<10、<100”等值。如果值仅包含“<”,我想将所有这些值替换为0。我该怎么做?我对Python比较陌生。尝试使用pd.DataFrame.replace()。importpandasaspd#创建示例数据框df=pd.DataFrame({'A':['<0.5','<10',15,20],......
  • 基于funasr+pyaudio实现电脑本地麦克风实时语音识别项目语音转文本python实现
    【框架地址】https://github.com/modelscope/FunASR【简单介绍】FunASR是一个功能全面的语音识别工具包,支持多种预训练模型的推理和微调,提供高精度和高效能的语音识别服务。结合PyAudio库,可以实现电脑本地麦克风实时语音识别项目。该项目首先通过PyAudio库捕获麦克风输入的......
  • 从Python中的数据框中删除不必要的数据
    所以我这里有一个dat文件,我正在使用Python来读取它。在整个文件中,有一些不必要的行,例如BEGIN等,而我真正想开始阅读的部分是从数据帧开始。因此,我想检查在Python中执行此操作的最佳方法是什么,并且只阅读数据框何时开始?谢谢!以下是使用Python从数据......
  • Python拟合曲线
    拟合曲线多项式拟合np.ployfit(x,y,deg)importmatplotlib.pyplotaspltimportnumpyasnpx=[1,1.5,2,2.5,3,3.5,4,4.5,5,5.5,6,6.5,7,7.5,8]y=[33.40,79.50,122.65,159.05,189.15,214.15,238.65,252.2,267.55,280.50,296.65,301.65,310.......
  • 12个Python数据类型转换实战演练
    文末赠免费精品编程资料~~在Python编程中,数据类型转换是处理数据时必不可少的技能。掌握如何灵活地在不同类型之间转换,能让你的代码更加高效和灵活。下面,我们将通过一系列实战演练,学习并实践12种常见的Python数据类型转换。1.整数转字符串实战案例:将年龄转换为字符串......
  • Python全套教程,小白零基础入门必备!
    Python是一种语法简单、功能强大的编程语言,它注重的是如何高效解决问题。【教程领取方式在文末!!】正是这种简单实用的特性,让Python成为近年来最热门的编程语言之一。Python具有广泛的应用场景,包括:Web开发、数据分析、机器学习、网络爬虫、人工智能、量化交易等众多领......
  • BP神经网络及其Python和MATLAB实现预测
    BP神经网络及其Python和MATLAB实现预测引言BP神经网络(BackPropagationNeuralNetwork),即反向传播神经网络,是一种通过反向传播算法进行监督学习的多层前馈网络。这种网络能够通过不断地调整和改变神经元的连接权重,达到对特定任务的学习和优化。由于其高度的灵活性和适应性......