Gumbel distribution

感觉这个分布的含义很有用啊, 能预测‘最大’, 也就是自然灾害, 太牛了.

主要内容

定义

[Gumbel distribution-wiki](Gumbel distribution - Wikipedia)

其分布函数和概率密度函数分别为:
F ( x ; μ , β ) = e − e − ( x − μ ) / β , f ( x ; μ , β ) = 1 β e − [ e − ( x − μ ) / β + ( x − μ ) / β ] F(x; \mu, \beta) = e^{-e^{-(x-\mu)/\beta}}, \quad f(x;\mu,\beta) = \frac{1}{\beta} e^{-[e^{-(x-\mu)/\beta}+(x-\mu) / \beta]} F(x;μ,β)=ee(xμ)/β,f(x;μ,β)=β1e[e(xμ)/β+(xμ)/β]
标准Gumbel分布(即 μ = 0 , β = 1 \mu=0, \beta=1 μ=0,β=1):
F ( x ) = e − e − x , f ( x ) = e − ( x + e − x ) . F(x) = e^{-e^{-x}}, \quad f(x) = e^{-(x+e^{-x})}. F(x)=eex,f(x)=e(x+ex).

从Gumbel分布中采样, 只需:
x = F − 1 ( u ) = μ − β ln ⁡ ( − ln ⁡ ( u ) ) , u ∼ U n i f o r m ( 0 , 1 ) . x = F^{-1}(u) = \mu - \beta \ln (-\ln(u)), \quad u \sim \mathrm{Uniform}(0, 1). x=F1(u)=μβln(ln(u)),uUniform(0,1).
proof:
P ( F − 1 ( u ) ≤ x ) = P ( u ≤ F ( x ) ) = F ( x ) , P(F^{-1}(u) \le x) = P(u \le F(x)) = F(x), P(F1(u)x)=P(uF(x))=F(x),
F − 1 ( u ) F^{-1}(u) F1(u)的分布函数就是 F ( x ) F(x) F(x).

E [ x ] = μ + γ ⋅ β , \mathbb{E} [x] = \mu + \gamma \cdot \beta, E[x]=μ+γβ,

其中 γ \gamma γ是Euler-Mascherorni constant.

Gumbel-Max trick

假设我们有一个离散的分布 [ π 1 , π 2 , ⋯   , π k ] [\pi_1, \pi_2, \cdots, \pi_k] [π1,π2,,πk] k k k类, π i \pi_i πi表示为第 i i i类的概率, 则从该分布中采样 z z z等价于
z = arg ⁡ max ⁡ i [ g i + log ⁡ π i ] , g i ∼ G u m b e l ( 0 , 1 ) , i . i . d . z = \arg \max_i [g_i + \log \pi_i], \quad g_i \sim \mathrm{Gumbel}(0, 1), \mathrm{i.i.d}. z=argimax[gi+logπi],giGumbel(0,1),i.i.d.
proof:
P ( z = i ) = P ( g i + log ⁡ π i ≥ max ⁡ { g j + log ⁡ π j } j ≠ i ) = ∫ − ∞ + ∞ p ( x ) P ( x + log ⁡ π i ≥ { g j + log ⁡ π j } j ≠ i ) d x . P(z=i) = P(g_i + \log \pi_i \ge \max \{g_j + \log \pi_j\}_{j\not=i}) = \int_{-\infty}^{+\infty} p(x) P(x+\log \pi_i \ge \{g_j + \log \pi_j\}_{j\not=i}) \mathrm{d}x. P(z=i)=P(gi+logπimax{gj+logπj}j=i)=+p(x)P(x+logπi{gj+logπj}j=i)dx.

P ( x + log ⁡ π i ≥ { g j + log ⁡ π j } j ≠ i ) = ∏ j ≠ i P ( g j ≤ x + log ⁡ π i − log ⁡ π j ) = e − e − x ⋅ 1 − π i π i , P(x+\log \pi_i \ge \{g_j + \log \pi_j\}_{j\not=i}) = \prod_{j\not=i} P(g_j \le x + \log\pi_i - \log \pi_j) = e^{-e^{-x} \cdot \frac{1 - \pi_i}{\pi_i}}, P(x+logπi{gj+logπj}j=i)=j=iP(gjx+logπilogπj)=eexπi1πi,

带入计算得:

P ( z = i ) = ∫ − ∞ + ∞ e − ( x + e − x ⋅ 1 π i ) d x = ∫ − ∞ + ∞ π i ⋅ e − [ ( x − log ⁡ 1 π i ) + e − ( x − log ⁡ 1 π i ) ] d x = π i . \begin{array}{ll} P(z=i) & = \int_{-\infty}^{+\infty} e^{-(x+e^{-x} \cdot \frac{1}{\pi_i})} \mathrm{d}x \\ & = \int_{-\infty}^{+\infty} \pi_i \cdot e^{-[(x-\log\frac{1}{\pi_i})+e^{-(x - \log \frac{1}{\pi_i})}]} \mathrm{d}x \\ & = \pi_i. \end{array} P(z=i)=+e(x+exπi1)dx=+πie[(xlogπi1)+e(xlogπi1)]dx=πi.

Gumbel trick 用于归一化

我们时常会碰到这样的问题:
p ( x ; θ ) = f ( x ; θ ) Z , p(x;\theta) = \frac{f(x;\theta)}{Z}, p(x;θ)=Zf(x;θ),
其中 Z = ∑ i = 1 K f ( x i ; θ ) Z=\sum_{i=1}^K f(x_i;\theta) Z=i=1Kf(xi;θ) 是归一化常数, 那么怎么计算 Z Z Z呢?

构建随机变量 T T T:
T = max ⁡ i [ ln ⁡ f ( x i ) + g i ] , g i ∼ G u m b e l ( − c , 1 ) , i . i . d . T = \max_i [\ln f(x_i) + g_i], \quad g_i \sim \mathrm{Gumbel}(-c, 1), \mathrm{i.i.d.} T=imax[lnf(xi)+gi],giGumbel(c,1),i.i.d.

T ∼ G u m b e l ( − c + ln ⁡ Z ) T \sim \mathrm{Gumbel}(-c + \ln Z) TGumbel(c+lnZ)
proof:

P ( T ≤ t ) = P ( max ⁡ i [ ln ⁡ f ( x i ) + g i ] ≤ t ) = ∏ i P ( g i ≤ t − ln ⁡ f ( x i ) ) = e − e − ( t + c − ln ⁡ Z ) = F ( t ; − c + ln ⁡ Z , 1 ) . P(T \le t) = P(\max_i [\ln f(x_i) + g_i] \le t) = \prod_{i} P(g_i \le t - \ln f(x_i)) = e^{-e^{-(t+c-\ln Z)}} = F(t;-c+\ln Z ,1). P(Tt)=P(imax[lnf(xi)+gi]t)=iP(gitlnf(xi))=ee(t+clnZ)=F(t;c+lnZ,1).

因为
E [ T ] = − c + ln ⁡ Z + γ , \mathbb{E}[T] = -c + \ln Z + \gamma, E[T]=c+lnZ+γ,
故我们只需估计 E [ T ] ≈ ∑ j T j \mathbb{E}[T] \approx \sum_j T_j E[T]jTj 即可估计 Z Z Z
Z = exp ⁡ ( ∑ j T j + c − γ ) . Z = \exp (\sum_{j}T_j + c - \gamma). Z=exp(jTj+cγ).
所以必须要求离散的 x x x?

代码

[scipy-gumbel](scipy.stats.gumbel_r — SciPy v1.6.3 Reference Guide)

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import gumbel_r

fig, ax = plt.subplots(1, 1)
# mean, var, skew, kurt = gumbel_r.stats(moments='mvsk')
# print(mean, var, skew, kurt)

x = np.linspace(gumbel_r.ppf(0.01), gumbel_r.ppf(0.99), 100)
ax.plot(x, gumbel_r.pdf(x), 'r-', lw=5, alpha=0.6, label="gumbel_r pdf")
r = gumbel_r.rvs(size=1000, loc=0, scale=1)
ax.hist(r, density=True, histtype="stepfilled", alpha=0.2)
ax.legend(loc='best', frameon=False)
plt.show()

image-20210526174047331

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值