概率论中伯努利分布(bernoulli distribution)介绍及C++11中std::bernoulli_distribution的使用

2023-11-15

Bernoulli分布(Bernoulli distribution):是单个二值随机变量的分布。它由单个参数ø∈[0,1],ø给出了随机变量等于1的概率。它具有如下的一些性质:

P(x=1)= ø

P(x=0)=1-ø

P(x=x)= øx(1-ø)1-x

Ex[x]= ø

Varx(x)= ø(1-ø)

伯努力分布(Bernoulli distribution,又名两点分布或者0-1分布)是一个离散型概率分布,为纪念瑞士科学家雅各布·伯努利而命名。若伯努利试验成功,则伯努利随机变量取值为1。若伯努利试验失败,则伯努利随机变量取值为0。记其成功概率为p(0≤p≤1),失败概率为q=1-p。则:

其概率质量函数为:

其期望值为:

其方差为:


Multinoulli分布(multionoulli distribution)或者范畴分布(categorical distribution):是指在具有k个不同状态的单个离

散型随机变量上的分布,其中k是一个有限值。Multinoulli分布由向量p∈[0,1]k-1参数化,其中每一个分量pi表示第i个状

态的概率。最后的k个状态的概率可以通过1-lTp给出。注意必须限制lTp≤1。Multinoulli分布经常用来表示对象分类的分

布,所以很少假设状态1具有数值1之类的。因此,我们通常不需要去计算Multinoulli分布的随机变量的期望和方差.

Bernoulli分布和Multinoulli分布足够用来描述在它们领域内的任意分布。它们能够描述这些分布,不是因为它们

特别强大,而是因为它们的领域很简单;它们可以对那些能够将所有的状态进行枚举的离散型随机变量进行建模。

当处理的是连续型随机变量时,会有不可数无限多的状态,所以任何通过少量参数描述的概率分布都必须在分布上加以

严格的控制。

“multinoulli”这个术语是最近被Gustavo Lacerdo发明,被Murphy(2012)推广的。Multinoulli分布是多项式分

布(multinomial distribution)的一个特例。多项式分布是{0,…,n}k中的向量的分布,用于表示当对Multinoulli分布采

样n次时k个类中的每一个被访问的次数。多项式分布(multinomial distribution)是二项式分布的推广。二项分布的

典型例子是扔硬币,硬币正面朝上概率为p,重复扔n次硬币,k次为正面的概率即为一个二项式分布概率。把二

项分布推广至多个(大于2)互斥事件的发生次数,就得到了多项式分布。比如扔骰子,不同于扔硬币,骰子有6个

面对应6个不同的点数,这样单次每个点数朝上的概率都是1/6.

In probability theory and statistics, a categorical distribution(分类分布)(also called a generalized Bernoulli

distribution(广义伯努利分布), multinoull distribution or, less precisely, a discrete distribution) is a probabilit

distribution that describes the possible results of a random event that can take on one of K possible outcomes,

with the probability of each outcom separately specified. There is not necessarily an underlying ordering of thes

outcomes, but numerical labels are often attached for convenience in describing the distribution. On the other

hand, the categorical distribution is a special case of the multinomial distribution.

以上内容摘自:《深度学习中文版》和 维基百科

以下是对C++11中伯努利分布std::bernoulli_distribution类介绍:

C++11在头文件<random>中提供了伯努利概率分布类std::Bernoulli_distribution。伯努利分布(Bernoulli distribution)是判断某件事情发生或者未发生的概率,产生随机bool值。它是一个单次试验只有0(失败)和1(成功)两个结果的离散分布。

std::bernoulli_distribution:Bernoulli distribution, Random number distribution that produces bool values according to a Bernoulli distribution.

#include "bernoulli_distribution.hpp"
#include <iostream>
#include <random>
#include <string>
#include <iomanip>
#include <map>

/
// reference: http://www.cplusplus.com/reference/random/bernoulli_distribution/
int test_bernoulli_distribution_1()
{
{
	const int nrolls = 10000;

	std::default_random_engine generator;
	std::bernoulli_distribution distribution(0.5);

	int count = 0;  // count number of trues

	for (int i = 0; i<nrolls; ++i) if (distribution(generator)) ++count;

	std::cout << "bernoulli_distribution (0.5) x 10000:" << std::endl;
	std::cout << "true:  " << count << std::endl;
	std::cout << "false: " << nrolls - count << std::endl;
}

{ // (1)、bernoulli_distribution::bernoulli_distribution: Constructs a bernoulli_distribution object
//   with a probability of p (or with the probability specified by object parm)
//   (2)、bernoulli_distribution::operator(): Generate random number
//   Returns a new random value with the probability associated to the object (version 1) or
//   with the probability specified by parm (version 2)
//   (3)、bernoulli_distribution::p: Probability of true
//   Returns the parameter p associated with the bernoulli_distribution.
//   This parameter represents the probabily that member function operator() returns true.
//   (4)、bernoulli_distribution::max:Maximum value, Returns the least upper bound of the range of
//   values potentially returned by member operator(), which for bernoulli_distribution is true.
//   (5)、bernoulli_distribution::min: Minimum value, Returns the greatest lower bound of the range of
//   values potentially returned by member operator(), which for bernoulli_distribution is false.
	std::cout << "Please, enter a yes/no question (I will answer it):" << std::endl;
	std::string text;
	getline(std::cin, text);

	std::seed_seq seed(text.begin(), text.end());  // seed using question
	std::default_random_engine generator(seed);
	std::bernoulli_distribution distribution(0.91);

	bool result = distribution(generator);
	std::cout << (result ? "yes" : "no") << std::endl;
	std::cout << "p: " << distribution.p() << std::endl;
	std::cout << "max: " << distribution.max() << std::endl;
	std::cout << "min: " << distribution.min() << std::endl;
}

{ // bernoulli_distribution::param: Distribution parameters
//   A bernoulli_distribution is defined by a single parameter: its probability (p) of true results.
//   An object of type param_type carries this information, but it is meant to be used only to construct
//   or specify the parameters for a bernoulli_distribution object, not to inspect the individual parameter.
	std::default_random_engine generator;
	std::bernoulli_distribution d1(0.7);
	std::bernoulli_distribution d2(d1.param());

	// print two independent values:
	std::cout << std::boolalpha;
	std::cout << d1(generator) << std::endl;
	std::cout << d2(generator) << std::endl;
}

{ // bernoulli_distribution::reset: Resets the distribution,
//   so that subsequent uses of the object do not depend on values already produced by it.
	std::default_random_engine generator;
	std::bernoulli_distribution distribution;

	// print two independent values:
	std::cout << std::boolalpha;
	std::cout << distribution(generator) << std::endl;
	distribution.reset();
	std::cout << distribution(generator) << std::endl;
}

	return 0;
}

/
// reference: http://en.cppreference.com/w/cpp/numeric/random/bernoulli_distribution
int test_bernoulli_distribution_2()
{

	std::random_device rd;
	std::mt19937 gen(rd());
	// give "true" 1/4 of the time
	// give "false" 3/4 of the time
	std::bernoulli_distribution d(0.25);

	std::map<bool, int> hist;
	for (int n = 0; n<10000; ++n) {
		++hist[d(gen)];
	}
	for (auto p : hist) {
		std::cout << std::boolalpha << std::setw(5) << p.first
			<< ' ' << std::string(p.second / 500, '*') << '\n';
	}

	return 0;
}

/
int test_bernoulli_distribution_3()
{
	std::random_device rd; std::mt19937 gen(rd()); // 每次产生不固定的不同的值
	//std::default_random_engine gen; // 每次产生固定的不同的值
	std::bernoulli_distribution d(0.5);

	for (int i = 0; i < 10; ++i)
		std::cout << d(gen);
	std::cout << std::endl;

	return 0;
}

GitHubhttps://github.com/fengbingchun/Messy_Test

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

概率论中伯努利分布(bernoulli distribution)介绍及C++11中std::bernoulli_distribution的使用 的相关文章

  • C++11中std::condition_variable的使用

  • 激活函数之logistic sigmoid函数介绍及C++实现

    logistic sigmoid函数 logistic sigmoid函数通常用来产生Bernoulli分布中的参数 因为它的范围是 0 1 处在 的有效取值范围内 logisitic sigmoid函数在变量取绝对值非常大的正值或负值时会
  • C++中的虚函数表介绍

    在C 语言中 当我们使用基类的引用或指针调用一个虚成员函数时会执行动态绑定 因为我们直到运行时才能知道到底调用了哪个版本的虚函数 所以所有虚函数都必须有定义 通常情况下 如果我们不使用某个函数 则无须为该函数提供定义 但是我们必须为每一个虚
  • C语言中的弱符号与强符号介绍

    弱符号 Weak symbol 是链接器 ld 在生成ELF Executable and Linkable Format 缩写为ELF 可执行和可链接格式 是一种用于可执行文件 目标文件 共享库和核心转储的标准文件格式 ELF文件有两种索
  • 矩阵奇异值分解

    转自 http www madio net forum redirect goto nextnewset tid 47409 html 奇异值分解是线性代数中一种重要的矩阵分解 在信号处理 统计学等领域有重要应用 定义 设A为m n阶矩阵
  • C++11容器中新增加的emplace相关函数的使用

    C 11中 针对顺序容器 如vector deque list 新标准引入了三个新成员 emplace front emplace和emplace back 这些操作构造而不是拷贝元素 这些操作分别对应push front insert和p
  • 程序员的自我修养--链接、装载与库笔记:可执行文件的装载与进程

    可执行文件只有装载到内存以后才能被CPU执行 1 进程虚拟地址空间 程序和进程有什么区别 程序 或者狭义上讲可执行文件 是一个静态的概念 它就是一些预先编译好的指令和数据集合的一个文件 进程则是一个动态的概念 它是程序运行时的一个过程 很多
  • C++11中std::function的使用

    类模版std function是一种通用 多态的函数封装 std function的实例可以对任何可以调用的目标实体进行存储 复制 和调用操作 这些目标实体包括普通函数 Lambda表达式 函数指针 以及其它函数对象等 通过std func
  • 矩阵伪逆介绍及C++/OpenCV/Eigen的三种实现

    矩阵A的伪逆 Moore Penrose pseudoinverse 定义为 A VD UT 其中 U D和V是矩阵A奇异值分解后得到的矩阵 对角矩阵D的伪逆D 是非零元素取倒数之后再转置得到的 当矩阵A的列数多于行数时 使用伪逆求解线性方
  • C和C++安全编码笔记:文件I/O

    C和C 程序通常会对文件进行读写 并将此作为它们正常操作的一部分 不计其数的漏洞正是由这些程序与文件系统 其操作由底层操作系统定义 交互方式的不规则性而产生的 这些漏洞最常由文件的识别问题 特权管理不善 以及竞争条件导致 8 1 文件I O
  • C和C++安全编码笔记:并发

    并发是一种系统属性 它是指系统中几个计算同时执行 并可能彼此交互 一个并发程序通常使用顺序线程和 或 进程的一些组合来执行计算 其中每个线程和进程执行可以在逻辑上并行执行的计算 这些进程和 或 线程可以在单处理器系统上使用分时抢占式的方式
  • Effective C++改善程序与设计的55个具体做法笔记

    Scott Meyers大师Effective三部曲 Effective C More Effective C Effective STL 这三本书出版已很多年 后来又出版了Effective Modern C More Effective
  • Linux下遍历指定目录的C++实现

    之前在 https blog csdn net fengbingchun article details 51474728 给出了在Windows遍历指定文件夹的C 实现 这里给出在Linux下遍历目录的实现 Windows和Linux下的
  • C语言中signal函数简介及使用

    signal h是C标准函数库中的信号处理部分 定义了程序执行时如何处理不同的信号 信号用作进程间通信 报告异常行为 如除零 用户的一些按键组合 如同时按下Ctrl与C键 产生信号SIGINT C 中的对应头文件是csignal C语言标准
  • C++11中std::bind的使用

    std bind函数是用来绑定函数调用的某些参数的 std bind它可以预先把指定可调用实体的某些参数绑定到已有的变量 产生一个新的可调用实体 它绑定的参数的个数不受限制 绑定的具体哪些参数也不受限制 由用户指定 std bind 1 将
  • C++14中返回类型推导的使用

    使用C 14中的auto返回类型 编译器将尝试自动推导 deduce 返回类型 namespace int xx 1 auto f return xx return type is int const auto f3 return xx r
  • C++11中std::shared_future的使用

    C 11中的std shared future是个模板类 与std future类似 std shared future提供了一种访问异步操作结果的机制 不同于std future std shared future允许多个线程等待同一个共
  • C++中std::sort/std::stable_sort/std::partial_sort的区别及使用

    某些算法会重排容器中元素的顺序 如std sort 调用sort会重排输入序列中的元素 使之有序 它默认是利用元素类型的 lt 运算符来实现排序的 也可以重载sort的默认排序 即通过sort的第三个参数 此参数是一个谓词 predicat
  • Linux下getopt函数的使用

    getopt为解析命令行参数函数 它是Linux C库函数 使用此函数需要包含系统头文件unistd h getopt函数声明如下 int getopt int argc char const argv const char optstri
  • C++/C++11中变长参数的使用

    C C 11中的变长参数可以应用在宏 函数 模板中 1 宏 在C99标准中 程序员可以使用变长参数的宏定义 变长参数的宏定义是指在宏定义中参数列表的最后一个参数为省略号 而预定义宏 VA ARGS 则可以在宏定义的实现部分替换省略号所代表的

随机推荐

  • Javascript基础第六天知识点以及案例:作用域、JS预解析、对象

    作用域目标 能够说出 JavaScript 的两种作用域 能够区分全局变量和局部变量 能够说出如何在作用域链中查找变量的值 1 作用域 1 1 作用域概述 通常来说 一段程序代码中所用到的名字并不总是有效和可用的 而限定这个名字的可用性的代
  • 慢速,混合和快速衰减模式。为什么我们要把事情复杂化?

    慢速 混合和快速衰减模式 为什么我们要把事情复杂化 如果你正在驱动感性负载 而它是有刷或无刷直流电机 步进电机 螺线管或继电器 你一定经历过一些问题 比如不需要的电流在不受欢迎的方向流动 如果你没有考虑到物理定律的这个事实 那么你有可能只有
  • caddy php h5ai,使用Docker快速安装H5ai网盘、内置HTML5视频播放器DPlayer

    说明 本镜像由iLemonrain大佬制作 使用的是LOC冻猫大佬修改的H5ai源码 其内置了HTML5视频播放器DPlayer 这里说下安装方法 安装 本镜像使用环境为Apache 2 4 PHP 7 1 1 安装Docker CentO
  • 每次都忘记:vscode把空格替换成换行符并换行显示

    勾选正则表达式 空格直接打 换行用 n
  • Cocos2d-x简单游戏<捕鱼达人>代码实现

    这个简单的捕鱼游戏Demo只是完成了简单的 1 场景切换 数据加载 武器等级更换 lt 大炮的升级 gt 2 鱼的随机游动 大炮发射子弹 撒网 捕鱼 3 子弹 鱼 网的碰撞检测等 4 场景及背景音乐的定时更换 碰撞时得音效 仅供参考 入门练
  • 100m光纤测速多少正常_光纤收发器的六个指示灯代表是什么意思?

    对光纤收发器这块了解的朋友应该知道 光纤收发器有6个LED指示灯 它们分别显示了收发器的工作状态 根据LED所示 我们就能判断出收发器是否工作正常和可能有什么问题 从而能帮助找出故障 那么 光纤收发器的六个指示灯分别代表什么意思 有哪些作用
  • 2015-2023年全球医疗器械公司100强(附细分领域排行)

    目录 2023全球医疗器械企业100强榜单 12家中国企业上榜 2022年度全球医疗器械公司100强排行榜 2021年全球医疗器械百强排行榜 2020年全球医疗器械企业100强公布 年份待定 2020全球医疗器械100强 2019年度全球医
  • JWT原理解析与实现

    1 Token与Session优缺点概述 1 1 Session的由来 在登录一个网站进行访问时由于HTTP协议是无状态的就是说一次HTTP请求后他就会被销毁 比如我在www a com login里面登录了 然后你就要访问别的了比如要访问
  • PicoDet论文译读笔记

    PP PicoDet A Better Real Time Object Detector on Mobile Devices 摘要 在目标检测中如何实现更好的精度 速度均衡是一个具有挑战性的问题 在本文中 作者致力于目标检测中关键组件的优
  • yolov6论文翻译

    摘要 多年来 YOLO系列一直是高效物体检测的事实上的工业级标准 YOLO社区以压倒性的优势丰富了它在众多硬件平台和丰富场景中的应用 在这份技术报告中 我们努力把它的极限推到一个新的水平 以坚定不移的心态向行业应用迈进 考虑到现实环境中对速
  • uniapp封装request请求

    在基础文件里面创建一个api文件 在创建两个 js文件 http js 里面封装 request 请求 let baseUrl https white 511 toponet cn 基地址 export const request opti
  • 头歌(C语言)-数据结构与算法-排序-第2关:实现快速排序

    任务描述 相关知识 编程要求 评测说明 任务描述 本关要求通过补全快速排序私有函数QSort 来供函数QuickSort调用 以此来实现快速排序的功能 相关知识 快速排序的基本过程是 从待排序记录中任选一个记录 以它的排序码作为中心值 将其
  • 关于单链表的函数

    关于单链表一些基础功能函数的总结 文章目录 关于单链表一些基础功能函数的总结 0 这个链表的结构体 1 输出单链表 2 创建单链表 头插法 3 链表 其中一个 的删除 4 链表的插入 5 单链表的快排 6 单链表变成循环链表 尾节点连上头结
  • 《Vision-Language Pre-Training with Triple Contrastive Learning》/《具有三重对比学习的视觉语言预训练》

    一 摘要 视觉语言表示学习很大程度上受益于通过对比损失 例如 InfoNCE损失 的图像 文本对齐 这种对齐策略能够最大化图像与其匹配文本之间的互信息 MI 然而 简单地执行跨模态对齐 CMA 不能确保来自相同模态的相似输入保持接近 这可能
  • Greenplum元数据信息

    1 元数据重要的表 pg database 所有的数据库信息 pg namespace 所有的schema信息 pg class 所有的表信息 pg attribute 所有的属性信息 pg proc 函数信息 包括自定义函数 以上都可以以
  • spec文件说明

    spec文件概述 spec文件中主要包含4个class Analysis PYZ EXE和COLLECT Analysis以py文件为输入 它会分析py文件的依赖模块 并生成相应的信息 修改的主要是这个部分 PYZ是一个 pyz的压缩包 包
  • #循循渐进学51单片机#定时器与数码管#not.4

    1 熟练掌握单片机定时器的原理和应用方法 1 时钟周期 单片机时序中的最小单位 具体计算的方法就是时钟源分之一 2 机器周期 我们的单片机完成一个操作的最短时间 3 定时器 打开定时器 储存寄存器 的值经过一个机器周期自动加一 也就是说 机
  • 常用文件读写&CSV文件读写&对象的序列化和反序列化

    前言 意识 python中一切皆是对象 常见文件的读写分类 1 普通文本文件 txt py md html doc等 2 二进制文件 图片 音频 视频 压缩包等 3 csv文件 csv 需要借助于系统模块csv 4 对象的序列化和反序列化
  • 使用 sCrypt 实现数独游戏合约

    我们在 BSV 区块链上实现了一个数独游戏智能合约 利用之前介绍过的一种合约范式可以将游戏中寻找解题方案的过程外包上链 因为求解数独问题的计算工作量会随着其行列数快速增长 实际上它也是一个 NP 完全 问题 不过我们可以借由 sCrypt
  • 概率论中伯努利分布(bernoulli distribution)介绍及C++11中std::bernoulli_distribution的使用

    Bernoulli分布 Bernoulli distribution 是单个二值随机变量的分布 它由单个参数 0 1 给出了随机变量等于1的概率 它具有如下的一些性质 P x 1 P x 0 1 P x x x 1 1 x Ex x Var