一、说明
多重努利分布,也称为分类分布 或伯努利分布对多个类别的泛化,是在随机变量上定义的概率分布函数,该变量可以采用 k 个 不同值之一。每个值代表不同的类别或结果,与每个类别关联的概率之和必须为 1。
从本质上讲,Multinoulli 分布将 Bernoulli 分布的概念扩展到存在两种以上可能结果的场景。它通常用于观察结果属于多个离散类别的情况,例如在文本分类的自然语言处理中,单词可以分为不同的类或主题。
二、关于贝努力
如果您执行的实验只能有两个结果(成功或失败),则在成功时取值 1 且在失败时取值 0的随机变量是伯努利随机变量。
如果您执行一个可以有 k 个结果的实验,并且通过X_i一个随机变量来表示,该变量在获得第 i 个 结果时取值 1,否则取 0,则定义为 Multinoulli 随机向量的随机向量 X:
换句话说,当获得第 i 个 结果时,Multinoulli 随机向量 X 的第 i 个条目的值为 1,而所有其他条目都等于 0。这个定义本质上是描述一个独热编码向量,它通常用于表示机器学习和概率论中的分类数据。
在接下来的内容中,k 个可能结果的概率将用 p1、p2、...、pk 表示。
X 是一个向量,有一个等于 1 的条目,表示特定结果的发生,而所有其他条目都等于 0,表示没有这些结果。
设 p1, p2, ..., pk 为 k 个严格正数,使得:
我们说 X 有一个 Multinoulli 分布,概率为 p1, p2, ..., pk
如果其概率质量函数为:
如果您对上述联合 pmf 的定义感到困惑,请注意,当 (x1, x2, ..., xk) ∈ Rx 且 习 = 1 时,因为已获得第 i 个结果,因此所有其他条目都等于 0,并且:
三、另一种公式化的方法:
看起来更复杂但有助于数学运算的公式如下:
**四、例:**对具有多重努利分布的不公平六面骰子进行建模
在此示例中,我们通过对不公平的六面骰子的结果进行建模来探索 Multinoulli 分布的概念。每个结果代表从 1 到 6 的一个数字,为每个结果分配不同的概率。使用 Multinoulli 分布,我们计算观察到每个结果的概率,从而深入了解此不公平骰子的结果分布。
让我们使用我之前提到的 one-hot fashion 方法重新计算概率 P(X = 4):
代入给定的概率:
因此,给定 Multinoulli 分布的概率 P (X= 4) 确实是 0.15。
五、期望 (E[X])
假设期望 E[X] 等于概率 p,其中 p 是观察到特定类别的概率,让我们使用提供的概率来计算它:
对于前一个不公平的骰子:
[0.1, 0.2, 0.3, 0.15, 0.1, 0.15 ]
五、方差
要计算表示不公平六面骰子结果的给定 Multinoulli 分布的方差,我们可以使用以下公式:
[0.1*0.9, 0.2*0.8, 0.3*0.7, 0.15*0.85, 0.1*0.9, 0.15*0.85]
在机器学习系列的第 22 天,我们深入研究了 Multinoulli 分布的基础知识,探索了其基础知识和应用。加入我们的第 23 天,我们将深入探讨多项式分布的复杂性。
六、python示例
骰子的 multinoulli 分布表示骰子每个面(1 到 6)的概率。
bb
import numpy as np
import matplotlib.pyplot as plt
# Define the probabilities for each face of the dice
faces = np.array([1, 2, 3, 4, 5, 6])
probabilities = np.array([1/6] * 6) # For a fair dice
# Create the plot
plt.figure(figsize=(8, 5))
plt.bar(faces, probabilities, color='blue', alpha=0.7)
# Add titles and labels
plt.title('Multinoulli Distribution for a Fair Six-Sided Dice')
plt.xlabel('Dice Faces')
plt.ylabel('Probability')
# Adding some space above the bars for better visualization
plt.ylim(0, 1/6 + 0.05)
# Show the probabilities on top of the bars
for i in range(len(faces)):
plt.text(faces[i], probabilities[i] + 0.002, f'{probabilities[i]:.2f}', ha='center', va='bottom')
plt.show()
此代码将生成一个条形图,显示骰子每个面的概率。
在机器学习系列的第 22 天,我们探索了 multinoulli 分布,讨论了它在各种分类问题中的属性和应用。