如何计算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 中执行其他常见任务: