截断正态分布(Truncated normal distribution)
Truncated normal distribution - Wikipedia
Normal Distribution 称为正态分布,也称为高斯分布,Truncated Normal Distribution一般翻译为截断正态分布,也有称为截尾正态分布。
截断正态分布是截断分布(Truncated Distribution)的一种,那么截断分布是什么?截断分布是指,限制变量x" role="presentation">xx 取值范围(scope)的一种分布。例如,限制x取值在0到50之间,即{0<x<50}。因此,根据限制条件的不同,截断分布可以分为:
- 2.1 限制取值上限,例如,负无穷<x<50
- 2.2 限制取值下限,例如,0<x<正无穷
- 2.3 上限下限取值都限制,例如,0<x<50
正态分布则可视为不进行任何截断的截断正态分布,也即自变量的取值为负无穷到正无穷;
1. 概率密度函数
假设 X 原来服从正太分布,那么限制 x 的取值在(a,b)范围内之后,X 的概率密度函数,可以用下面公式计算:
也可简写为:
其中 ϕ(⋅)" role="presentation">ϕ(⋅)ϕ(⋅):均值为 0,方差为 1 的标准正态分布;
ϕ(ξ)=12πexp(−12ξ2)" role="presentation">ϕ(ξ)=12π−−√exp(−12ξ2)ϕ(ξ)=12πexp(−12ξ2)Φ(⋅)" role="presentation">Φ(⋅)Φ(⋅) 为标准正态分布的累积分布函数;
- 对其分母部分的一些简单认识,
- b→∞" role="presentation">b→∞b→∞,⇒ Φ(b−μσ)=1" role="presentation">Φ(b−μσ)=1Φ(b−μσ)=1
- a→−∞" role="presentation">a→−∞a→−∞ ⇒ Φ(a−μσ)=0" role="presentation">Φ(a−μσ)=0Φ(a−μσ)=0
2. 截断型正态分布期望、方差
https://www.youtube.com/watch?v=cvvrOqTIodk
对于正态分布:f(x)=12πσexp(−(x−μ)22σ2)" role="presentation">f(x)=12π√σexp(−(x−μ)22σ2)f(x)=12πσexp(−(x−μ)22σ2),有如下基本结论:
- f′(x)=−x−μσ2f(x)" role="presentation">f′(x)=−x−μσ2f(x)f′(x)=−x−μσ2f(x)
- ∫abf′(x)dx=f(b)−f(a)" role="presentation">∫baf′(x)dx=f(b)−f(a)∫abf′(x)dx=f(b)−f(a)(牛顿莱布尼茨公式)
- S(x)=1−F(x)" role="presentation">S(x)=1−F(x)S(x)=1−F(x)(F(x)" role="presentation">F(x)F(x) 是 cdf)
对于下截断型正态分布,其数学期望 E(x|c<x)" role="presentation">E(x|c<x)E(x|c<x):
为计算其方差,还需计算 E(x2|c<x)" role="presentation">E(x2|c<x)E(x2|c<x):
进一步 Var(x|c<x)=E(x2|c<x)−(E(x|c<x))2" role="presentation">Var(x|c<x)=E(x2|c<x)−(E(x|c<x))2Var(x|c<x)=E(x2|c<x)−(E(x|c<x))2
3. 实现
R 语言 :
> install.packages('truncnorm') > library(truncnorm) > norm_data <- rnorm(n = 1000, mean = 90, sd = 4) > hist(norm_data) > truncnorm_data <- rtruncnorm(n = 1000, a = 85, b = 100, mean = 90, sd = 4) > hist(truncnorm_data)
tensorflow:
- tf.truncated_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)