本文链接:个人站 | 简书 | CSDN
版权声明:除特别声明外,本博客文章均采用 BY-NC-SA 许可协议。转载请注明出处。
之前在介绍 DeepAR 等时间序列预测模型时,为了简单起见,我们使用了大家比较熟悉的正态分布作为示例。在实际应用中,需要根据数据本身的特点选择合适的分布。泊松分布、二项分布、以及负二项分布都可以用来刻画计数类数据。其中,泊松分布的 ,二项分布的 ,负二项分布的 。在我日常接触的业务场景中, 较为常见,为此免不了要跟负二项分布打交道。
虽然没什么必要,但是本着「有困难要上,没困难创造困难也要上」的精神,我们还是来推导一下负二项分布的相关公式。
1. 定义
一个成功概率为 的伯努利试验,不断重复,直至失败 次。此时成功的次数为一个随机变量,用 表示。称 服从负二项分布,记作 。
需要注意的是,负二项分布的定义并不唯一。例如 tensorflow_probability
使用的定义与本文一致,而 scipy
则将 定义为伯努利试验成功 次时的失败次数。使用前一定要先看清楚,别问我怎么知道的。此外,Wikipedia 词条不同段落使用的定义竟然也不完全一致,或许是由不同的人编辑的。
2. 概率质量函数
时总共进行了 次试验,最后一次为失败,故前 次试验总共成功了 次,失败了 次。因此
3. 期望
根据定义
令 、,显然
故
4. 方差
首先计算
令 、,考虑服从负二项分布的随机变量 ,其概率质量函数为 ,显然
故
而根据定义
我们在文章开头提到,负二项分布的 。由于 ,这个结论是显而易见的。
5. 累积分布函数
负二项分布的累积分布函数可以表示为正则不完全 Beta 函数:
证明如下:
令 ,有
对 求偏导,得
而根据正则不完全 Beta 函数的定义,有
同样对 求偏导,得
也就是说
亦即
注意到 时有
解得常数 。
证毕。
6. 在时间序列预测模型中的使用
DeepAR 等模型中,网络的输出目标是概率分布的参数。例如正态分布的 和 。但对于负二项分布而言,让网络直接输出 和 是不合适的,因为在训练过程中很难保证输出的值满足 。那么让网络输出 和 呢?似乎是可以的,只要保证 , 即可。前者可以使用 softplus 激活函数,后者可以使用 sigmoid 激活函数。有没有办法避免使用 sigmoid 呢?通常的做法是让网络输出 和 ,只要使用 softplus 激活函数确保二者均为正数即可。
参考文献
- Negative binomial distribution - Wikipedia
- Beta function - Wikipedia
- Patil G P. On the evaluation of the negative binomial distribution with examples[J]. Technometrics, 1960, 2(4): 501-505.