F-散度(F-divergence)

在概率统计中,f散度是一个函数,这个函数用来衡量两个概率密度p和q的区别,也就是衡量这两个分布多么的相同或者不同。


1.f散度的定义

p和q是同一个空间中的两个概率密度函数,它们之间的f散度可以用如下方程表示:


f函数满足两个条件:f函数是一个凸函数,并且f(1)=0。


2.f散度的特例

如果f(x)=xlogx,那就是KL散度。如果是f(x)=-logx,那就表示reverse KL散度。



3.f散度的非负性

因为f是凸函数,E(f(x))>=f(E(x)),所以


这就是为什么需要上面提到的满足的两个条件。


参考:https://en.wikipedia.org/wiki/F-divergence

### KL 的定义 KL(Kullback-Leibler divergence),也被称为相对熵,用于衡量两个概率分布之间的差异程。具体来说,它表示从一个真实分布 \( P \) 到另一个近似分布 \( Q \) 的信息损失量[^1]。 其数学表达形式如下: \[ D_{KL}(P || Q) = \sum_{x} P(x) \log{\frac{P(x)}{Q(x)}} \] 其中: - \( P(x) \) 是目标的真实分布, - \( Q(x) \) 是用来逼近 \( P(x) \) 的估计分布。 该公式适用于离型随机变量的情况;对于连续型随机变量,则可以将求和替换为积分运算。 ### 计算方法 为了计算KL,在实际应用中通常遵循以下几个方面考虑: - 需要明确知道或者能够估算出真实的概率分布\( P(x)\),以及模型预测的概率分布\( Q(x)\)[^3]。 - 如果某些样本点上\( Q(x)=0\)而对应的\( P(x)>0\) ,则根据上述公式的特性可知此时KL会趋向无穷大,因此实践中应避免这种情况发生[^2]。 下面给出一段Python代码来演示如何简单实现KL的计算: ```python import numpy as np def kl_divergence(p, q): """Calculate Kullback-Leibler divergence between two distributions.""" p = np.asarray(p, dtype=np.float64) q = np.asarray(q, dtype=np.float64) # Ensure probabilities sum up to 1. p /= p.sum() q /= q.sum() nonzero_pq = (p != 0) & (q != 0) return np.sum(p[nonzero_pq] * np.log(p[nonzero_pq] / q[nonzero_pq])) # Example usage: true_distribution = [0.4, 0.6] estimated_distribution = [0.35, 0.65] result = kl_divergence(true_distribution, estimated_distribution) print(f"The KL-divergence is {result}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值