如何计算r中的kl散度(举例)


在统计学中, Kullback-Leibler (KL) 散度是一种距离度量,用于量化两个概率分布之间的差异。

如果我们有两个概率分布 P 和 Q,我们通常使用符号 KL(P || Q) 来写 KL 散度,这意味着“P 与 Q 的散度”。

我们使用以下公式计算:

KL(P || Q) = ΣP(x) ln (P(x) / Q(x))

如果两个分布之间的 KL 散度为零,则表明分布相同。

计算 R 中两个概率分布之间 KL 散度的最简单方法是使用philentropy包中的KL()函数。

下面的例子展示了如何在实际中使用这个功能。

示例:计算 R 中的 KL 散度

假设 R 中有以下两个概率分布:

 #define two probability distributions
P <- c(.05, .1, .2, .05, .15, .25, .08, .12)
Q <- c(.3, .1, .2, .1, .1, .02, .08, .1)

注意:重要的是每个分布的概率之和为 1。

我们可以使用以下代码来计算两个分布之间的KL散度:

 library (philentropy)

#rbind distributions into one matrix
x <- rbind(P,Q)

#calculate KL divergence
KL(x, unit=' log ')

Metric: 'kullback-leibler' using unit: 'log'; comparing: 2 vectors.
kullback-leibler 
       0.5898852 

P 分布与 Q 分布的 KL 散度约为0.589

请注意,此计算中使用的单位称为nat ,它是自然信息单位的缩写。

所以我们可以说 KL 散度是0.589 nat

另请注意,KL 散度不是对称度量。这意味着如果我们计算 Q 分布与 P 分布的 KL 散度,我们可能会得到不同的值:

 library (philentropy)

#rbind distributions into one matrix
x <- rbind(Q,P)

#calculate KL divergence
KL(x, unit=' log ')

Metric: 'kullback-leibler' using unit: 'log'; comparing: 2 vectors.
kullback-leibler 
       0.4975493 

Q 分布与 P 分布的 KL 散度约为0.497 nat

另请注意,某些公式使用以 2 为底的对数来计算 KL 散度。在这种情况下,我们讨论的是比特而不是纳特的分歧。

要以位为单位计算 KL 散度,可以在单位参数中使用 log2:

 library (philentropy)

#rbind distributions into one matrix
x <- rbind(P,Q)

#calculate KL divergence (in bits)
KL(x, unit=' log2 ')

Metric: 'kullback-leibler' using unit: 'log2'; comparing: 2 vectors.
kullback-leibler 
       0.7178119

P 分布与 Q 分布的 KL 散度约为0.7178 位

其他资源

以下教程解释了如何在 R 中执行其他常见任务:

如何在 R 中生成正态分布
如何在 R 中绘制正态分布

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注