scipy.stats.dirichlet_multinomial#
- scipy.stats.dirichlet_multinomial = <scipy.stats._multivariate.dirichlet_multinomial_gen object>[源代码]#
一个狄利克雷多项式随机变量。
Dirichlet 多项分布是一种复合概率分布:它是具有试验次数 n 和类别概率
p
的多项分布,其中类别概率p
是从具有浓度参数alpha
的 Dirichlet 分布中随机抽取的。- 参数:
- alphaarray_like
浓度参数。沿最后一个轴的条目数量决定了分布的维度。每个条目必须严格为正。
- n整数或类数组
试验次数。每个元素必须是一个严格正整数。
- 种子{None, int, np.random.RandomState, np.random.Generator}, 可选
用于绘制随机变量。如果 seed 是 None,则使用 RandomState 单例。如果 seed 是整数,则使用新的
RandomState
实例,并以 seed 为种子。如果 seed 已经是RandomState
或Generator
实例,则使用该对象。默认值为 None。
方法
logpmf(x, alpha, n):
概率质量函数的对数。
pmf(x, alpha, n):
概率质量函数。
mean(alpha, n):
Dirichlet 多项分布的均值。
var(alpha, n):
Dirichlet 多项分布的方差。
cov(alpha, n):
Dirichlet 多项分布的协方差。
参见
scipy.stats.dirichlet
狄利克雷分布。
scipy.stats.multinomial
多项分布。
参考文献
[1]Dirichlet-多项分布, 维基百科, https://www.wikipedia.org/wiki/Dirichlet-multinomial_distribution
示例
>>> from scipy.stats import dirichlet_multinomial
获取 PMF
>>> n = 6 # number of trials >>> alpha = [3, 4, 5] # concentration parameters >>> x = [1, 2, 3] # counts >>> dirichlet_multinomial.pmf(x, alpha, n) 0.08484162895927604
如果类别计数的总和不等于试验次数,则概率质量为零。
>>> dirichlet_multinomial.pmf(x, alpha, n=7) 0.0
获取 PMF 的日志
>>> dirichlet_multinomial.logpmf(x, alpha, n) -2.4669689491013327
获取均值
>>> dirichlet_multinomial.mean(alpha, n) array([1.5, 2. , 2.5])
获取方差
>>> dirichlet_multinomial.var(alpha, n) array([1.55769231, 1.84615385, 2.01923077])
获取协方差
>>> dirichlet_multinomial.cov(alpha, n) array([[ 1.55769231, -0.69230769, -0.86538462], [-0.69230769, 1.84615385, -1.15384615], [-0.86538462, -1.15384615, 2.01923077]])
或者,可以调用该对象(作为函数)来固定
alpha
和 n 参数,返回一个“冻结”的 Dirichlet 多项式随机变量。>>> dm = dirichlet_multinomial(alpha, n) >>> dm.pmf(x) 0.08484162895927579
所有方法都是完全矢量化的。x 和
alpha
的每个元素都是一个向量(沿最后一个轴),n 的每个元素是一个整数(标量),结果是逐元素计算的。>>> x = [[1, 2, 3], [4, 5, 6]] >>> alpha = [[1, 2, 3], [4, 5, 6]] >>> n = [6, 15] >>> dirichlet_multinomial.pmf(x, alpha, n) array([0.06493506, 0.02626937])
>>> dirichlet_multinomial.cov(alpha, n).shape # both covariance matrices (2, 3, 3)
根据标准的 NumPy 约定支持广播。在这里,我们有四组浓度参数(每个是两个元素的向量),每个参数对应三个试验次数(每个是标量)。
>>> alpha = [[3, 4], [4, 5], [5, 6], [6, 7]] >>> n = [[6], [7], [8]] >>> dirichlet_multinomial.mean(alpha, n).shape (3, 4, 2)