#include <boost/math/distributions/bernoulli.hpp>
namespace boost{ namespace math{ template <class RealType = double, class Policy = policies::policy<> > class bernoulli_distribution; typedef bernoulli_distribution<> bernoulli; template <class RealType, class Policy> class bernoulli_distribution { public: typedef RealType value_type; typedef Policy policy_type; BOOST_MATH_GPU_ENABLED bernoulli_distribution(RealType p); // Constructor. // Accessor function. BOOST_MATH_GPU_ENABLED RealType success_fraction() const // Probability of success (as a fraction). }; }} // namespaces
伯努利分布是单次试验结果的离散分布,只有两种结果,0(失败)或 1(成功),成功的概率为 p。
伯努利分布是最简单的构建块,其他基于独立伯努利试验序列的离散分布可以基于它构建。
伯努利分布是只有一次试验的二项分布 (k = 1, p)。
f(0) = 1 - p, f(1) = p
D(k) = if (k == 0) 1 - p else 1
下图说明了概率密度函数 pdf如何随单次试验的结果而变化
以及累积分布函数
BOOST_MATH_GPU_ENABLED bernoulli_distribution(RealType p);
构造一个具有成功概率 p 的 伯努利分布。
BOOST_MATH_GPU_ENABLED RealType success_fraction() const
返回此分布的成功概率参数。
支持所有分布通用的常用非成员访问器函数:累积分布函数、概率密度函数、分位数、风险函数、累积风险函数、__logcdf、__logpdf、均值、中位数、众数、方差、标准差、偏度、峰度、超额峰度、范围和支撑。对于此分布,所有非成员访问器函数都标记有 BOOST_MATH_GPU_ENABLED
,并且可以在主机和设备上运行。
随机变量的域为 0 和 1,有用的支持范围仅为 0 或 1。
在此范围之外,函数未定义,或者可能会抛出 domain_error 异常并提供错误消息。
伯努利分布使用简单的算术运算符实现,因此误差应在一个或两个 epsilon 之内。
在下表中,p 是成功概率,q = 1-p。k 是随机变量,为 0 或 1。
![]() |
注意 |
---|---|
伯努利分布在此处实现为严格离散分布。如果需要允许 k 为任何实数的广义版本,则应使用单次试验的二项分布,例如
|
函数 |
实现说明 |
---|---|
支持范围 |
{0, 1} |
|
使用关系式:当 k = 0 时,pdf = 1 - p,否则为 p |
cdf |
使用关系式:当 k = 0 时,cdf = 1 - p,否则为 1 |
cdf 补码 |
q = 1 - p |
分位数 |
如果 x <= (1-p) 则为 0,否则为 1 |
来自补码的分位数 |
如果 x <= (1-p) 则为 1,否则为 0 |
均值 |
p |
方差 |
p * (1 - p) |
众数 |
如果 (p < 0.5) 则为 0,否则为 1 |
偏度 |
(1 - 2 * p) / sqrt(p * q) |
峰度 |
6 * p * p - 6 * p +1/ p * q |
超额峰度 |
峰度 -3 |